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
추가 읽기
- 조나단 데보인 폴라드(2014).사용자 권한을 제거하기 위해 su를 남용하지 마십시오.. 일반적인 답변.
답변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)
사용runuser
PAM 세션이 필요한 경우(다음에서도 가능 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