따라서 sudoers 파일에 다음과 같은 항목이 있습니다.
user1 ALL=(user2) NOPASSWD: /scripts/dir/
/scripts/dir/
이를 통해 user1은 와 같은 명령을 사용하여 비밀번호를 입력하지 않고도 user2로 모든 실행 파일을 실행할 수 있습니다 sudo -u user2 /scripts/dir/script
. 그러나 실행 파일이 $PATH, $DISPLAY
user2의 환경(등)에서 실행될 것으로 예상하는 문제가 발생했습니다 . user1은 sudo -iu user2 /scripts/dir/script
시뮬레이션된 로그인 셸과 같은 것을 실행하여 이 작업을 수행할 수 있지만 위의 sudoers 항목을 사용하면 작동하지 않으며 암호를 묻는 메시지가 표시됩니다. user1이 이 명령을 실행할 수 있도록 허용하거나 적어도 명령을 실행할 때 user2의 .bashrc, .cshrc 등을 가져올 수 있는 sudoers 항목이 있습니까?
옵션 을 찾았 SETENV
지만 이를 통해 user1은 user2의 환경을 채택하는 대신 기존 환경을 유지할 수 있습니다. source /home/user2/.bashrc
계속해서 그렇게 sudo -Eu user2 /scripts/dir/script
하면 user1 user2의 환경에 옵션이 유지되지만 -E
user1이 파일에 대한 읽기 권한이 있고 .bashrc
스크립트는 user1에게 권한이 없는 명령을 실행하려고 시도하지 않는다고 가정합니다. 달리다.
sudoers 매뉴얼 페이지에서는 -i
다음과 같이 옵션을 설명합니다 sudo
.
특별한 경우로, sudo의 -i 옵션(초기 로그인)을 지정하면 sudoer는 env_reset 값에 관계없이 환경을 초기화합니다. DISPLAY, PATH 및 TERM 변수는 변경되지 않고 유지됩니다. HOME, MAIL, SHELL, USER 및 LOGNAME은 대상 사용자에 따라 설정됩니다. AIX(및 PAM이 없는 Linux 시스템)에는 /etc/environment의 내용도 포함됩니다. BSD 시스템에서 use_loginclass 플래그가 활성화되면 /etc/login.conf의 path 및 setenv 변수도 적용됩니다. 다른 모든 환경 변수는 제거됩니다.
이는 아마도 user1에게 명령을 실행할 수 있는 권한을 -i
부여하거나 특별히 sudoers에서 옵션을 허용함으로써 일부 sudoers 구성을 통해 옵션이 제공될 수 있음 을 시사하는 것 같습니다 . 그러나 저는 이 작업을 수행하는 좀 더 세분화된 방법을 원합니다. 또한 이는 내가 원하는 것이 아닌 user1의 환경을 나타내는 것으로 보이며 그 환경에서 나올 것 입니다.ALL
-i
PATH
DISPLAY
물론 user1에게 이 작업을 수행하는 데 필요한 것보다 더 많은 권한을 부여할 수 있지만 그렇게 하면 보안 위험이 발생할 수 있습니다.
답변1
그래서 안전한 방법을 찾을 수 없어서 SETENV:
sudoers 항목의 옵션을 사용하게 되었고, user1으로 명령을 실행하기 전에 user2의 소스를 가져와서 .bashrc
sudo -E
를 호출할 때 해당 옵션을 제공했습니다. user1은 PATH
user2로서 임의의 실행 파일을 실행할 수 있도록 환경 변수를 설정할 수 있으므로 이는 내가 원하는 작업을 수행하는 안전한 방법이 아닙니다 .