
Ubuntu 12.04에서 sudo -s
$HOME 변수가 변경되지 않아 일반 사용자가 인 경우 regularuser
상황은 다음과 같습니다.
$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser
오래 전에 우분투를 버렸기 때문에 확신할 수는 없지만 이것이 기본 동작이라고 생각합니다. 그래서 내 질문은 다음과 같습니다.
- 이것은 어떻게 이루어 집니까? 구성은 어디에 있나요?
- 어떻게 비활성화하나요?
편집하다: 답변을 주셔서 감사합니다. 덕분에 상황이 좀 더 명확해졌습니다. 하지만 원하는 답변을 얻으려면 몇 가지 질문을 추가해야 할 것 같습니다.
- Debian에서는
sudo -s
$HOME 변수를/root
. 내가 답변에서 얻은 것과man sudo
쉘이 실행된 것은 에sudo -s
제공된 것입니다/etc/passwd
. 맞습니까? /etc/passwd
그러나 Ubuntu와 Debian 모두 루트에 제공된 쉘 은/bin/bash
. 두 시스템 모두 $HOME에 관한 한.profile
또는 파일 의 차이점이 어디에 있는지 찾을 수 없으므로 동작이 다릅니다. 이것에 대한 도움이 있나요?.bashrc
sudo -s
답변1
Sudo에는 많은 컴파일 타임 구성 옵션이 있습니다. 를 사용하여 버전의 설정을 나열할 수 있습니다 sudo -V
. Debian wheezy 구성과 Ubuntu 12.04 구성의 차이점 중 하나는 HOME
환경 변수가 Ubuntu에서는 보존되지만 Debian에서는 보존되지 않는다는 것입니다. 두 배포판 모두 보존해도 안전한 것으로 명시적으로 표시된 일부를 제외하고 모든 환경 변수를 지웁니다. 따라서 Ubuntu에서는 sudo -s
유지 되고 Debian에서는 지워진 다음 대상 사용자의 홈 디렉터리로 설정됩니다.HOME
HOME
sudo
다음에서 이 동작을 재정의할 수 있습니다.sudoers
파일. 파일 visudo
을 편집하려면 실행하세요 sudoers
. 몇 가지 관련 옵션이 있습니다:
env_keep
보존되는 환경 변수를 결정합니다.Defaults env_keep += "HOME"
호출자의HOME
환경 변수를 유지하거나Defaults env_keep -= "HOME"
지우는 데 사용합니다 (그리고 대상 사용자의 홈 디렉터리로 대체).env_reset
환경 변수가 재설정되는지 여부를 결정합니다. 환경 변수 재설정은 특정 명령 실행을 허용하는 규칙에 필요한 경우가 많지만 어쨌든 임의 명령 실행을 허용하는 규칙에 대해서는 직접적인 보안 이점이 없습니다.always_set_home
, 설정된 경우 비활성화되거나 목록 에 포함되어HOME
유지되었더라도 재정의됩니다 . 이 옵션은 어쨌든 보존되지 않으면 아무런 효과가 없습니다 .env_reset
HOME
env_keep
HOME
set_home
와 비슷always_set_home
하지만 에만 적용되며 명시적인 명령으로sudo -s
호출할 때는 적용되지 않습니다 .sudo
이러한 옵션은 특정 원본 사용자, 특정 대상 사용자 또는 특정 명령에 대해 설정할 수 있습니다. 자세한 내용은 설명서를 참조하세요 sudoers
.
옵션을 전달하여 HOME
주어진 호출에 대해 언제든지 재정의하도록 선택할 수 있습니다 .sudo
-H
쉘은 결코 HOME
. ( HOME
설정되지 않은 경우 설정되지만 sudo
항상 HOME
어떤 방식으로든 설정됩니다.)
를 실행하면 sudo -i
초기 sudo
로그인을 시뮬레이션합니다. 여기에는 HOME
대상 사용자의 홈 디렉터리 설정 및 호출이 포함됩니다 .로그인 쉘.
답변2
대화형 로그인 루트 셸을 얻으려면 sudo -H -i
대신 다음 을 사용하세요 .sudo -s
sudo -H -i
cd
pwd -P # /private/var/root (on Mac OS X 10.6.8)
에서 man sudo
:
-H The -H (HOME) option sets the HOME environment variable to
the homedir of the target user (root by default) as
specified in passwd(5). By default, sudo does not modify
HOME (see set_home and always_set_home in sudoers(5)).
답변3
sudo
이는 "로그인 쉘"과 "비로그인 쉘"의 동작과는 거의 관련이 없으며 차이점과 많은 관련이 있습니다. 빠른 수정은 다음과 같습니다.
$ sudo -i
다음에서 볼 수 있듯이:
$ sudo -s
# id
uid=0(root) gid=0(root) groups=0(root)
# echo $HOME
/home/msw
# exit
$ sudo -i
# echo $HOME
/root
# pwd
/root
sudo 매뉴얼에 명시된 대로:
-i(초기 로그인 시뮬레이션) 옵션은 대상 사용자의 비밀번호 데이터베이스 항목에 지정된 쉘을 로그인 쉘로 실행합니다. 이는 .profile 또는 .login과 같은 로그인별 리소스 파일이 셸에서 읽혀진다는 의미입니다. 명령이 지정되면 쉘의 -c 옵션을 통해 실행할 수 있도록 쉘에 전달됩니다. 명령이 지정되지 않으면 대화형 쉘이 실행됩니다.
답변4
Ubuntu와 Debian 의 서로 다른 동작을 제거하려면 래퍼 sudo -s
를 사용할 수 있습니다 sudo
(Q4에 대한 답변).
sudos() {
local PATH="$(getconf PATH)" root_homedir
root_homedir="$(sudo -H sh -c 'printf "%s" "$HOME"')"
sudo sh -c 'export HOME="$0"; exec sh -i' "$root_homedir"
return 0
}
sudo -k
sudos
{
logname
whoami
id -un
id -ur
echo "PATH: $PATH"
}
exit
echo "PATH: $PATH"