우분투에서 sudo가 $ HOME을 변경하지 않도록 설정 하고이 동작을 비활성화하는 방법은 무엇입니까?


38

Ubuntu 12.04 sudo -s에서 $ HOME 변수가 변경되지 않은 경우 일반 사용자가 regularuser인 경우 상황은 다음과 같습니다.

$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser

오래 전에 우분투를 버렸기 때문에 확신 할 수는 없지만 이것이 기본 동작이라고 생각합니다. 그래서 내 질문은 :

Q1. 이것은 어떻게 이루어 집니까? 구성은 어디에 있습니까?

Q2. 비활성화하려면 어떻게합니까?

편집 : 답변을 해주셔서 감사합니다. 약간 명확 해졌지만 찾고있는 답변을 얻으려면 몇 가지 질문을 추가해야한다고 생각합니다.

Q3. 데비안 sudo -s에서는 $ HOME 변수를로 변경합니다 /root. 내가 대답에서 얻은 man sudo것과 쉘이 달린 sudo -s것은에서 주어진 것입니다 /etc/passwd.

Q4. 그러나 우분투와 데비안에서 /etc/passwdroot로 제공된 쉘 은 /bin/bash입니다. 두 시스템 모두 $ HOME에 관한 한 차이점 .profile이나 .bashrc파일의 위치를 찾을 수 없으므로 동작이 sudo -s다릅니다. 이것에 대한 도움이 필요하십니까?


내 답변에 대한 의견으로 자신의 질문에 대답했지만 unix.stackexchange.com/questions/38175/… 링크를 여기에 넣을 것이라고 생각 했습니다. Q3 의 주장 은 일부 사람들이 로그인 쉘에 있는지 여부에 관계없이 프로필과 rc 파일이 동일하게 작동하도록 설정했기 때문 이라고 생각합니다 . sudo데비안과 우분투에서 다르게 행동 하는 것은 거의 불가능하다고 생각합니다 .
msw

@msw 데비안과 우분투의 차이 (12.04) sudo는 기본적으로 차이가 있다고 생각합니다. 그러나 다른 사람이 설정하고 꽤 오랫동안 실행 한 상자에 있기 때문에 나는 그것에 내기하지 않습니다. 어쨌든 관심있는 사람은 security.stackexchange.com/questions/18369/…bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140을 발견 했습니다 .
alxs

답변:


50

Sudo에는 많은 컴파일 타임 구성 옵션이 있습니다. 로 버전의 설정을 나열 할 수 있습니다 sudo -V. 데비안 wheezy와 Ubuntu 12.04의 구성 간의 차이점 중 하나는 HOME환경 변수가 데비안이 아닌 우분투에서는 유지 된다는 것 입니다. 두 배포판 모두 명시 적으로 보존하기 위해 안전한 것으로 표시된 몇 가지를 제외하고 모든 환경 변수를 지 웁니다. 따라서 데비안 에서는 지우고 우분투에서는 sudo -s보존 하고 대상 사용자의 홈 디렉토리로 설정합니다.HOMEHOMEsudo

sudoers파일 에서이 동작을 무시할 수 있습니다 . 파일 visudo을 편집하려면 실행하십시오 sudoers. 몇 가지 관련 옵션이 있습니다.

  • env_keep보존 할 환경 변수를 결정합니다. 사용 Defaults env_keep += "HOME"발신자의 유지하기 위해 HOME환경 변수를하거나 Defaults env_keep -= "HOME"내용을 삭제 (대상 사용자의 홈 디렉토리로 대체).
  • env_reset환경 변수가 재설정되는지 여부를 결정합니다. 환경 변수 재설정은 특정 명령을 실행할 수있는 규칙에는 종종 필요하지만 임의의 명령을 실행할 수있는 규칙에는 직접적인 보안 이점이 없습니다.
  • always_set_home으로 설정하면 비활성화되었거나 목록 에있어 HOME보존 된 경우에도 재정의 됩니다. 이 옵션은 유지되지 않으면 효과 가 없습니다.env_resetHOMEenv_keepHOME
  • set_home은 명시 적 명령으로 호출 할 때가 always_set_home아니라에 적용됩니다 .sudo -ssudo

이러한 옵션은 지정된 소스 사용자, 지정된 대상 사용자 또는 지정된 명령에 대해 설정할 수 있습니다. 자세한 내용은 sudoers설명서를 참조하십시오.

옵션을 전달하여 HOME주어진 통화에 대해 항상 재정의하도록 선택할 수 있습니다 .sudo-H

쉘은의 값을 무시하지 않습니다 HOME. ( HOME설정되지 않은 경우 설정되지만 sudo항상 HOME한 가지 방법으로 설정 됩니다.)

당신이 실행하는 경우 sudo -i, sudo초기 로그인을 시뮬레이션합니다. 여기에는 HOME대상 사용자의 홈 디렉토리 설정 및 로그인 쉘 호출 이 포함됩니다 .


17

대화식 로그인 루트 셸을 얻는 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)).

5

이것은 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 옵션을 통해 실행되도록 쉘로 전달됩니다. 명령을 지정하지 않으면 대화식 쉘이 실행됩니다.


자세한 내용을 알려 주셔서 감사합니다. 껍질의 차이점을 확인해야한다고 생각합니다. : 사람이 읽기 위해, 저와 같은 상황에서이 확인 unix.stackexchange.com/questions/38175/...을
alxs

1
아니요, sudo가 변경되는지 여부는 sudo HOME구성 방법과 관련이 있습니다.
Gilles 'SO- 악마 그만'

@Gilles : sudo는 어떻게 구성되어 있습니까? 에서 /etc/sudoers$ HOME에 관한 한 데비안과 우분투에는 차이가 없습니다.
alxs

1
@alxs IIRC 데비안과 우분투는 컴파일 타임 기본값이 다릅니다. 옵션 always_set_homeset_home로 재정의 할 수 있습니다 sudoers.
Gilles 'SO- 악마 그만'

@Gilles : 감사합니다. 이것이 내가 왜 그런 일을하고 되돌릴 수 있는지에 대한 답입니다. 게시하지 않아도된다면 답변으로 받아들입니다. 나는 그것을 직접 할 수는 있지만 그것을 인정하고 싶지 않습니다.
alxs

2

루트 쉘을 얻는 데 널리 사용되는 방법은 다음과 같습니다.

 $ sudo su - 
 # id
 uid=0(root) gid=0(root) groups=0(root)
 # pwd
 /root

사용하는 데 사용 sudo -i -H하지만 git에서 전역 npm 패키지를 설치하지 못했습니다. 으로 sudo su -작동! 감사합니다.
Laurent

0

sudo -sUbuntu와 Debian에서 각각 다른 동작을 제거하려면 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"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.