“su”,“sudo -s”,“sudo -i”,“sudo su”의 차이점은 무엇입니까?


148

이미 매뉴얼에서 읽었지만 차이점을 볼 수 없습니다.

su -사용자 아이디 변경 또는 수퍼 유저

sudo -s [command]

-s(쉘) 옵션은 passwd 파일에 지정된대로이 설정되어있는 경우 SHELL 환경 변수에 의해 지정된 쉘이나 쉘을 실행합니다 (5). 명령이 지정되면 실행을 위해 셸로 전달됩니다. 그렇지 않으면 대화식 쉘이 실행됩니다.

sudo -i 매뉴얼에서 설명이 사라짐


7
또한 su user신뢰할 수없는 쉘에서 로그인 하는 데 사용하지 말고를 사용하십시오 su - user. 참조 unix.stackexchange.com/q/7013/8250
Lekensteyn

@Lekensteyn 와우, 좋은 예입니다. LOL에 대한 thx :)
törzsmókus

1
항상 옛 계명을 기억하십시오. 그대는 루트의 이름을 헛되이 주장해서는 안됩니다!
törzsmókus

sudo -i나쁜 말 은 아니지만, 당신은 확실히 그것을 사용하여 물건을 f *** 수 있습니다
Kolob Canyon

답변:


118

이러한 명령의 주요 차이점은 기능에 대한 액세스를 제한하는 방식입니다.

su (이것은 "대체 사용자"또는 "사용자 전환"을 의미합니다) -정확하게 수행합니다. 대상 사용자의 권한으로 다른 쉘 인스턴스를 시작합니다. 이를 수행 할 권한이 있는지 확인하기 위해 대상 사용자 의 비밀번호 묻습니다 . 따라서 루트가 되려면 루트 비밀번호를 알아야합니다. 컴퓨터에 루트로 명령을 실행해야하는 사용자가 여러 명인 경우 모두 루트 암호를 알아야합니다. 동일한 암호 여야합니다. 사용자 중 하나의 관리자 권한을 취소해야하는 경우 루트 암호를 변경하고 액세스를 유지해야하는 사람들에게만 암호를 알려야합니다.

sudo (흠 ... 니모닉이란 무엇입니까? 슈퍼 유저 DO?) 는 완전히 다릅니다. 특정 작업에 대한 권한을 가진 사용자를 나열하는 구성 파일 (/ etc / sudoers)을 사용합니다 (루트로 명령 실행 등). 호출 될 때 시작한 사용자의 비밀번호를 요청 합니다. terminal은에 나열된 "joe"와 같은 사람입니다 /etc/sudoers. 개인의 관리자 권한을 취소하려면 구성 파일을 편집하거나 해당 구성에 나열된 그룹에서 사용자를 제거하면됩니다. 이로 인해 권한을 훨씬 더 깔끔하게 관리 할 수 ​​있습니다.

그 결과 많은 데비안 기반 시스템에서 root사용자는 비밀번호를 설정하지 않았습니다. 즉, 루트로 직접 로그인 할 수 없습니다.

또한 /etc/sudoers몇 가지 추가 옵션을 지정할 수 있습니다. 즉, 사용자 X는 프로그램 Y 만 실행할 수 있습니다.

자주 사용하는 sudo su첫 번째 : 조합은 다음과 같이 작동합니다 sudo당신을 요청 하여 , 당신이 그렇게하도록 허용하는 경우, 암호 및 다음 명령 (호출 su슈퍼 사용자로)을. 이 ( su가) 호출 root하므로 대상 사용자의 비밀번호를 입력하지 않아도됩니다. 따라서 파일에서 sudo su수퍼 유저 액세스가 허용 된 경우 다른 사용자 (루트 포함)로 쉘을 열 수 있습니다 /etc/sudoers.


2
나는 su"사용자 전환"으로 본 적이 없지만 항상 수퍼 유저로 여겨졌습니다 . 타인의 사용자 이름이없는 기본 동작 에서 위키 피 디아 : "su 명령은 또한 수퍼 유저로 언급 [1] 1974 년 초라고도하고있다"는 현재와 연결된 계정을 변경 할 수 있기 때문에 대체 사용자 ","패러디 사용자 "또는"사용자 설정 " 터미널 (창). "
dr jimbob

5
@ dr jimbob : 당신 말이 맞지만, "사용자 전환"은 그 기능을 잘 설명하고 있습니다. 역사적으로 "슈퍼 사용자"를 의미합니다. 나는 또한 위키 백과 기사가 내 답변과 매우 유사하다는 사실을 알게되어 기쁘다.-나는 전에 기사를 본 적이 없다 :)
Sergey

11
"su"의 공식 의미는 "대체 사용자"입니다. "man su"를 참조하십시오.
Angel O'Sphere

1
@ AngelO'Sphere : 흥미롭게도 Ubuntu의 맨 페이지에는 "대체"가 전혀 언급되어 있지 않습니다. gnu.org ( gnu.org/software/coreutils/manual/html_node/su-invocation.html ) 맨 페이지 에는 실제로 "su : 대체 사용자 및 그룹 ID로 명령을 실행하십시오"라고 표시되어 있습니다. 나는 gnu.org가 정식 출처라고 생각합니다. :
Sergey

1
무엇에 대해 sudo su?
Kaz Wolfe

59

sudo루트 권한으로 자신의 사용자 계정에서 명령을 실행할 수 있습니다. su실제로 루트로 로그인하도록 사용자를 전환 할 수 있습니다.

sudo -s루트 권한으로 쉘을 실행합니다. sudo -i또한 루트 사용자 환경을 얻습니다.

의 차이를 확인하려면 susudo -s수행 cd ~하고 pwd그들 각각의 후. 첫 번째 경우, 루트이기 때문에 루트의 홈 디렉토리에있게됩니다. 두 번째 경우에는 루트 권한이 있으므로 자신의 홈 디렉토리에있게됩니다.

이 정확한 질문에 대한 자세한 내용은 여기에 있습니다 .


20
"당신은 자신이 루트 권한을 가지고 있습니다"는 실제로 일어나지 않습니다 :) 실제로, "루트 권한을 가진 자신"이 될 수 없습니다-당신은 루트이거나 자신입니다. 두 경우 모두 whoami 를 입력하십시오 . cd ~결과가 다르다는 사실 은 sudo -s가 $ HOME 환경 변수를 설정하지 않은 결과입니다.
Sergey

1
@Sergey, whoami는 'whoami'cmd를 실행 한 것처럼'root '라고 말합니다. 따라서 (명령 기간 동안) 일시적으로 루트 사용자 인 것처럼 보이지만 여전히 전체 사용자가 아닐 수 있습니다 sudoers 파일에 따른 루트 액세스.
Octopus

1
@Octopus : 내가 말하려고했던 것은 Unix에서 프로세스는 하나의 UID 만 가질 수 있으며 UID는 프로세스의 권한을 결정한다는 것입니다. 당신은 "루트 권한을 가진 자신"이 될 수 없습니다. 프로그램은 UID 또는 루트의 UID로 실행됩니다 (0).
Sergey

5
"sudoers 파일에 따라 여전히 전체 루트 액세스 권한이 없을 수 있습니다"와 관련하여 sudoers파일은 다른 사용자로 어떤 명령을 실행할 수 있는지를 제어하지만 명령이 실행되기 전에 발생합니다. 그러나 root와 같이 프로세스를 시작할 수있게되면 실행중인 프로세스에 root의 UID가 있고 시스템에 대한 전체 액세스 권한이 있으면 sudo가이를 제한 할 방법이 없습니다. 다시 말하지만, 당신은 항상 자신이나 루트입니다. "half-n-half"는 없습니다. 따라서 sudoers파일을 사용하여 쉘을 루트로 실행할 수 있으면 해당 쉘의 권한을 "일반"루트 쉘과 구별 할 수 없습니다.
Sergey

36

이 답변은이 질문에 대한 내 답변 의 속임수 입니다. 사람들이 찾을 수 있도록 정식 답변을 여기에 넣으십시오!

와의 주요 차이점은 다음 sudo -isudo -s같습니다.

  • sudo -i루트 환경을 제공합니다 ~/.bashrc. 즉, 무시됩니다.
  • sudo -s사용자에게 환경을 제공하므로 ~/.bashrc존중받습니다.

여기 예제 가 있습니다.를 통해 액세스 할 수는 있지만 액세스 할 수없는 응용 프로그램 lsl이 내 ~/.bin/디렉토리에 있음을 sudo -s알 수 있습니다 sudo -i. 또한 Bash 프롬프트는 다음과 같이 변경 sudo -i되지만 변경 되지 않습니다 sudo -s.

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

sudo -s익숙한 환경을 제공하는 것이 편리 하지만 다음 두 가지 이유로 사용하는 것이 좋습니다sudo -i .

  1. '루트'세션에 있다는 시각적 알림.
  2. 루트 환경은의 악성 라인과 같은 맬웨어에 중독 될 가능성이 훨씬 낮습니다 .bashrc.

sudo -s가 / etc / profile을 처리하지 않는 것, 또는 /etc/profile.d/.
meffect

@dotancohen- sudo -s사용자에게 친숙한 환경을 제공 한다는 것은 무엇을 의미 합니까?
동기 부여

@dotancohen-sudo -s 명령은 이미 시각적 신호를 제공하므로 sudo -i가 더 나은 옵션 인 이유에 대해 궁금합니다.
동기 부여

9

su 사용자 "root"의 비밀번호를 요청합니다.

sudo자신의 암호를 묻습니다 (또한 /etc/sudoers기본적으로 "admin"또는 "sudo"그룹에 속하는 모든 사용자 계정에 sudo를 사용할 수 있도록 구성되어있는 root로 명령을 실행할 수 있는지 확인합니다 ).

sudo -s쉘을 루트로 시작하지만 작업 디렉토리는 변경하지 않습니다. sudo -i루트 계정으로의 로그인을 시뮬레이션합니다. 작업 디렉토리는 /root이고 루트 .profile등은 로그인 할 때처럼 소스가됩니다.


1
대답은 더 완벽하게하려면 다음과 sudo -s거의 동일하다 su($ HOME은 다릅니다)와 sudo -i동일su -
DJCrashdummy

@DJCrashdummy-왜 거의 같은 말을합니까? 무엇이 다른가요?
동기

2

우분투 또는 관련 시스템에서 나는 su전통적인 수퍼 유저의 의미로 많이 사용되지 않습니다 . sudo그 사건을 훨씬 잘 처리합니다. 그러나 susudoers 구성이 어리석은 일회성 상황에서 다른 사용자가되기에 좋습니다.

예를 들어, 라이브 CD / USB에서 시스템을 복구하는 경우 종종 하드 드라이브 및 기타 필요한 것들을 chroot시스템에 마운트 합니다. 그러한 경우, 나의 첫 번째 명령은 일반적으로 다음과 같습니다.

su - myuser  # Note the '-'. It means to act as if that user had just logged in.

그렇게하면 루트가 아닌 일반 사용자로 작동하고 sudo적절하게 사용 합니다.


0
  • su 루트 암호를 묻고 루트가되어 대화 형 비 로그인 셸을 엽니 다.
  • su - 루트 암호를 묻고 루트가되어 대화식 로그인 쉘을 엽니 다.

  • sudo -s 암호를 묻고 루트가되어 대화 형 비 로그인 셸을 엽니 다.
  • sudo -i 비밀번호를 묻고 루트가되어 대화식 로그인 쉘을 엽니 다.

가장 좋은 방법은이 두 가지를 사용하는 것입니다.


  • sudo su비밀번호 su를 묻고 1 초 동안 루트가되고 루트로 실행 됩니다.
  • sudo su -비밀번호를 묻고 1 초 동안 루트가되고 루트로 실행 su -됩니다.

따라서이 경우 su사용 sudo하고 있으며 루트의 실제 비밀번호를 알 필요가 없습니다. 결과는 동일 su하고 su -.


로그인과 비 로그인 쉘의 차이점은 무엇입니까?
Pilot6

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