Sudo
ing을 사용하여 Sudo -u $user
루트 환경이 아직 사용되고 있음을 나타냅니다. Sudo
에서 사용자 환경을 사용하려면 어떻게해야합니까? 특별한 참고로 내가 이것을 사용할 모든 사용자가 로그인 쉘을 가지고있는 것은 아닙니다.
Sudo -i -u $user
시도
[email protected]:~$ env |grep HOME
HOME=/home/gerald
[email protected]:~$ Sudo -u ubuntu env |grep HOME
HOME=/home/gerald
[email protected]:~$ Sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu
Debian에서 man sudoers
는 또 다른 가능성을 언급합니다. 어느 쪽을 원하는지 확실하지 않지만 env_reset
의 /etc/sudoers
옵션을 원하는 것처럼 들립니다. 그 반대는 기본적으로 env_keep
목록입니다. 적절한 HOME
을 설정하려면 -H
옵션을 Sudo
에 직접 사용하거나 sudoers
에서 always_set_home
와 함께 사용할 수 있습니다. 선택권.
또는 env_file
를 사용하여 전달하려는 정확한 환경을 지정할 수 있습니다. 그러나 env_*
에서 man sudoers
옵션을 확인하는 것이 가장 좋다고 생각합니다. /etc/sudoers
가 모든 것을 제어하고 그 점이 중요하기 때문입니다.
다음은 내 sudoers
파일에서 env_reset
를 사용하는 컨텍스트의 일부입니다.
Defaults !lecture
Defaults env_reset
Defaults syslog=auth
Defaults log_year
Sudo ing 환경 변수는 보존되지 않습니다.
제 경우에는 here-document 를 사용합니다.
HERE DOCUMENT 안에 my_script.sh
와 같은 작업을 넣습니다.
su -u some_user <<EOF
./my_script.sh
EOF
변수는 현재 사용자로부터 해석되므로 여기에 직접 입력해서는 안됩니다.
su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF
스크립트를 실행하는 사용자에 대해 $MY_VAR
가 설정되어 있지 않으면 설정되지 않습니다.
변수는 스크립트 내에서 호출하거나 \
로 이스케이프해야합니다.
예 :.
su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF
여기에서 $MY_VAR
는 some_user
컨텍스트 값을 갖습니다.