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

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

sudo다운시에도 sudo -u $user여전히 루트 환경을 사용하고 있는 것 같습니다. sudo사용자 환경 을 활용하는 방법은 무엇입니까 ? 특히 주목할 점은 이 기능을 사용할 모든 사용자가 로그인 셸을 갖고 있는 것은 아니라는 것입니다.

답변1

노력하다sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu

답변2

man sudoers데비안에서는 또 다른 가능성이 언급되었습니다. 어떤 방식을 원하는지 확실하지 않지만 귀하의 질문은 선택을 원하는 것처럼 들립니다 env_reset. /etc/sudoers그 반대는 기본적으로 env_keep목록입니다. 올바른 옵션을 설정하려면 이 옵션을 직접 사용 하거나 에서 다시 HOME사용할 수 있습니다 .-Hsudosudoersalways_set_home

또는 다음을 env_file지정할 수 있습니다.정밀한합격하고 싶은 환경. 하지만 모든 것을 제어할 수 있기 때문에 옵션 env_*을 살펴보는 것이 가장 좋다고 생각합니다 .man sudoers/etc/sudoers

env_reset이것은 파일에서 사용하고 있는 컨텍스트의 일부입니다 sudoers.

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year

답변3

언제스도환경 변수는 유지되지 않습니다.

내 경우에는여기 문서.

my_script.sh당신의 행동을 HERE 문서에 넣으세요 :

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.

관련 정보