사용자 env를 사용하기 위해 sudo -u $ user를 어떻게 얻습니까?


19

때 보인다 sudo사용하여이 내려 보내고 sudo -u $user루트의 환경이 여전히 사용되고 있음. sudo사용자 환경을 어떻게 활용할 수 있습니까? 이 메모를 사용할 모든 사용자에게 로그인 쉘이있는 것은 아닙니다.


'환경'을 정의하십시오. # whoami => root # sudo -u user whoami => user
alex

1
@ 알렉스 I 그림은 sudo -u user유사하다 su user당신이 사용해야하는 스와의 ENV 전환su - user
xenoterracide

그러나 사용자에게 로그인 쉘이없는 경우 "사용자 환경"이란 무엇입니까?
토마스 테멜

@Thomas 사용자는 쉘을 사용할 수 없어도 프로그램을 실행할 수 있습니다 ... -u그룹도 무시 한다고 생각 합니다 ... 루트에서 무언가를 시도했지만 (sudo -u down 사용) 작동했지만 분명히 사용자에게는 적합하지 않았습니다. .. 따라서 제한과 환경 문제가있는 방식으로 명령을 실행해야합니다.
xenoterracide

답변:


21

시험 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

그들이 쉘이 없다면 불행히도 작동하지 않습니다 /etc/passwd:( 그러나 그것은 추측 할 것입니다 ...
xenoterracide

매뉴얼 페이지를 보면 -E환경을 유지하는 페이지 인 것처럼 보입니다 . 즉 모든 환경 변수 등은 여전히 ​​설정 PATH되어 있지 않지만 LD_LIBRARY_PATH호출하는 사용자에게 있습니다.
Shahbaz

1
$SUDO_USER사용 가능
Rahul Patil

4

man sudoers데비안에 다른 가능성이 언급되어 있습니다. 어떤 방법으로 원하는지 확실하지 않지만 질문에 env_reset옵션을 원한다고 들리는 것처럼 들립니다 /etc/sudoers. 반대는 기본적으로 env_keep목록입니다. 적절한를 설정하기 위해 HOME당신이 사용할 수있는 -H옵션을 ' sudo다시, 직접 또는 sudoers로, always_set_home옵션을 선택합니다.

또는 전달하려는 정확한 환경 env_file을 지정하는 데 사용할 수 있습니다 . 당신이 체크 아웃 그러나, 나는 그것이 최고라고 생각 에서 옵션을 하기 때문에, 컨트롤 모두 그가 설정하는 점이다.env_*man sudoers/etc/sudoers

env_resetsudoers파일에서 사용하는 컨텍스트의 일부는 다음과 같습니다 .

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year

1

sudo를 보내고 환경 변수가 유지되지 않습니다.

제 경우에는 here-document를 사용 합니다 .

my_script.shHERE DOCUMENT 내부 와 같은 작업을 수행 합니다.

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상황에 맞는 가치가 있습니다.


좋은 대답입니다. 하나의 작은 수정 : su - some_user대신 이어야합니다 su -u some_user.
rudolfbyker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.