it-swarm-ko.tech

Sudo -u $ user가 사용자 환경을 사용하도록하려면 어떻게해야합니까?

Sudoing을 사용하여 Sudo -u $user 루트 환경이 아직 사용되고 있음을 나타냅니다. Sudo에서 사용자 환경을 사용하려면 어떻게해야합니까? 특별한 참고로 내가 이것을 사용할 모든 사용자가 로그인 쉘을 가지고있는 것은 아닙니다.

19
xenoterracide

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
21
Gerald Schneider

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
4
0xC0000022L

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_VARsome_user 컨텍스트 값을 갖습니다.

1
Juaniyyoo