추가 읽기

추가 읽기

OpenVPN의 "--up" 옵션은 일반적으로 라우팅 등에 사용됩니다. 따라서 OpenVPN이 루트 권한을 포기하고 아무도 실행하지 않기 전에 처리됩니다. 그러나 권한이 없는 사용자로 실행해야 하는 쉘 스크립트를 호출하고 있습니다.

어떻게 해야 하나요? 나는 배웠다프로세스 권한 제거, 특히 다항식과 Therel의 답변이 있지만 구현 방법을 이해하지 못합니다. 저는 Centos 6.5에서 작업 중이며 "chmod u+s" 및 "setuid()"로 suid가 차단되었습니다.

"--down" 옵션으로 호출된 스크립트를 루트로 실행할 수 있게 해주는 OpenVPN 플러그인("openvpn-down-root.so")이 있습니다. "openvpn-up-user.so"와 같은 상응하는 항목이 있을 수 있지만 아직 찾지 못했습니다.

편집 0

Nikola Kotur의 답변을 바탕으로 설치했습니다.Ian Meyer의 runit-rpm. chpst 명령은 터미널에서 작동하지만 up 스크립트에서는 "명령을 찾을 수 없습니다"라는 메시지와 함께 실패합니다. 작동하는 것은 "sudo chpst"와 올바른 디스플레이 및 언어 설정입니다. 보다내 터미널이 유니코드 문자를 올바르게 출력하지 않는 이유는 무엇입니까?이러한 이유로 up 스크립트에는 다음 네 줄이 필요합니다.

LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo chpst -u user -U user /home/user/unprivileged.sh &

편집 1

0xC0000022L의 의견을 바탕으로 "sudo -u user"가 "sudo chpst -u user -U user"와 마찬가지로 작동한다는 것을 알았습니다.

LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo -u user /home/user/unprivileged.sh &

나는 man sudoers를 조사하고 sudo가 혼자 작동하게 되면 업데이트할 것입니다.

답변1

runit과 sudo를 다루는 것만으로는 많은 것을 놓칠 수 있습니다. 실제로 runit과 같은 전체 도구 세트가 있으며, 정확히 다음 작업을 위해 설계된 이 작업을 수행하는 데 사용할 수 있는 여러 도구가 있습니다.

  • Daniel J. Bernstein의 daemontools는setuidgid:
    설정값사용자/집/사용자/unprivileged.sh
  • util-linux (최신 Debian에는 기본적으로 설치됨)에는setpriv:
    setpriv --reuid=사용자--regid=그룹--init-groups --inh-caps=-all /home/사용자/unprivileged.sh
  • Adam Sampson의 freedt에는 다음이 포함됩니다 setuidgid.
    설정값사용자/집/사용자/unprivileged.sh
  • Bruce Guenter의 daemontools-encore는setuidgid:
    설정값사용자/집/사용자/unprivileged.sh
  • Gerrit Pape의 runit은 다음과 같습니다.chpst:
    chpst-u사용자/집/사용자/unprivileged.sh
  • 웨인 마샬의 수감자들은runuid:
    실행중인 사용자 ID사용자/집/사용자/unprivileged.sh
  • 로랑 베르코의 s6는s6-setuidgid:
    s6-setuidgid사용자/집/사용자/unprivileged.sh
  • 간식 있어요setuidgid:
    설정값사용자/집/사용자/unprivileged.sh

그들은 섞이지 않아다른다음에 추가특혜를 누리고 대화형 모드에 갇히지 않습니다.

그건 그렇고, 당신이 첨부한 문제는 당신이 잊어버린 것과 당신의 문제에 지나지 sbin않습니다 bin.PATH

추가 읽기

답변2

나는 사용한다달리다chpst그러한 작업을 수행하기 위한 도구입니다 . 예를 들어 up 스크립트에서 권한이 없는 스크립트를 호출하면 다음과 같습니다.

chpst -u nobody /path/to/script

답변3

Linux 기반 시스템에서는 다음을 수행할 수 있습니다.setpriv(에서 util-linux):

setpriv --reuid=1000 --regid=1000 --init-groups COMMAND [ARGUMENTS...]  # Like su/runuser/sudo
setpriv --reuid=1000 --regid=1000 --clear-groups COMMAND [ARGUMENTS...]  # Like daemontools setuid(8)

사용runuserPAM 세션이 필요한 경우(다음에서도 가능 util-linux))

runuser -u USER [--] COMMAND [ARGUMENTS...]

~에서su매뉴얼 페이지:

주로 권한이 없는 사용자를 위해 설계되었지만 권한이 있는 사용자(예: 루트로 실행되는 스크립트)에게 권장되는 솔루션은 non-set-user-ID 명령을 사용하는 것입니다.사용자 실행(1)인증이 필요하지 않으며 별도의 PAM 구성이 제공됩니다. PAM 세션이 전혀 필요하지 않은 경우 권장되는 해결 방법은 다음 명령을 사용하는 것입니다.권한 설정(1).

답변4

무엇에 대해:

sudo -Eu <user> <command>

이전 댓글에서 환경에 대해 불평하셨으므로 출력 간의 차이를 비교할 수도 있습니다.

sudo -u <user> printenv
sudo -Eu <user> printenv

관련 정보