다른 사용자 및 해당 환경으로 sudo

다른 사용자 및 해당 환경으로 sudo

$ whoami
admin
$ sudo -S -u otheruser whoami
otheruser
$ sudo -S -u otheruser /bin/bash -l -c 'echo $HOME'
/home/admin

bash가 로그인 쉘로 호출되는데 왜 로 $HOME설정되지 않습니까?/home/otheruser

구체적으로 /home/otheruser/.bashrc출처가 없습니다. 게다가 /home/otheruser/.profile아직 출처도 없습니다. -( /home/otheruser/.bash_profile존재하지 않는다)

답변1

로그인 셸을 호출하려면 sudo을 사용하면 됩니다 -i. 명령을 지정하지 않으면 로그인 셸 프롬프트가 표시되고, 그렇지 않으면 명령 출력이 표시됩니다.

예(로그인 셸):

sudo -i

예(지정된 사용자 사용):

sudo -i -u user

예(명령 포함):

sudo -i -u user whoami

예(사용자의 인쇄 $HOME):

sudo -i -u user echo \$HOME

참고: 백슬래시 문자는 달러 기호가 대상 사용자의 셸에 도달하고 호출하는 사용자의 셸에서 해석되지 않도록 합니다.

방금 마지막 예를 확인했습니다.스트레스무슨 일이 일어났는지 정확히 알려줍니다. 아래 출력은 --login마치 bash가 명시적으로 호출된 것처럼 지정된 명령으로 쉘이 호출되고 있음을 보여줍니다.스도설정 등의 작업을 직접 할 수 있습니다 $HOME.

# strace -f -e process sudo -S -i -u user echo \$HOME
execve("/usr/bin/sudo", ["sudo", "-S", "-i", "-u", "user", "echo", "$HOME"], [/* 42 vars */]) = 0
...
[pid 12270] execve("/bin/bash", ["-bash", "--login", "-c", "echo \\$HOME"], [/* 16 vars */]) = 0
...

나는 당신이 를 사용하고 있다는 것을 알았지 -S만 이것은 일반적으로 좋은 기술이 아니라고 생각합니다. 키보드를 통해 인증을 수행하지 않고 다른 사용자로 명령을 실행하려면 SSH를 사용할 수 있습니다. 이는 localhost다른 호스트에서 작동하며 대화형 입력 없이 작동하는 공개 키 인증을 제공합니다.

ssh user@localhost echo \$HOME

참고: SSH의 경우 SSH 서버는 항상 SSH 클라이언트에 액세스할 수 있는 로그인 셸을 생성하므로 특별한 옵션이 필요하지 않습니다.

답변2

당신은 Bash를 너무 신뢰합니다. Bash의 모든 "로그인 셸"은 시작 및 종료 시 획득되는 파일입니다. 이 $HOME변수는 포함되지 않습니다.

Bash 문서에서는 로그인 셸이 무엇인지 자세히 설명합니다.https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html#Bash-Startup-Files

$HOME실제로 Bash는 어떠한 설정도 전혀 수행하지 않습니다. $HOME쉘을 호출하는 모든 것(로그인, SSH 등)에 의해 설정되고 쉘은 이를 상속합니다. $HOMEadmin으로 쉘을 시작한 다음 exec-ed하는 것과 관계없이 bash, 다른 사용자가 쉘에서 상속 sudo하도록 요구되거나 구성되지 않는 한 설계상 환경을 변경하지 않습니다 .bash

예상한 방식으로 더 많은 환경을 처리 하려면 sudo 스위치를 sudo살펴보세요 . -i노력하다:

sudo -S -u otheruser -i /bin/bash -l -c 'echo $HOME'

sudo 매뉴얼 페이지에 이에 대한 자세한 내용이 설명되어 있지만 그다지 좋지는 않습니다.http://linux.die.net/man/8/sudo

답변3

sudo -u www-data bash -i -c "env"

-ibash가 대화형으로 실행되도록 지시하는 이 플래그를 참고하세요 .

www-data이 명령은 (예를 들어) env명령이 실행되는 사용자를 위한 대화형 bash 쉘을 실행합니다 .

사용자가 www-data가지고 있는 경우에도로그인이 안됨쉘을 기본 쉘로 사용합니다.

관련 정보