Engineering/Linux

[Linux] 관리자 권한 sudo vs su 차이점

[앙금빵] 2022. 3. 20.

 

su(substitute user)는 대리 유저의 의미로 시스템에 로그인되어 있는 상태에서 다른 사용자의 권한으로 Shell을 실행할 수 있도록 전환하는 명령어다. 

 

사용자 전환: su

다른 사용자로 전환(로그인)하는 명령어이다

su 명령어의 필요성

대부분 리눅스 배포판에서는 원격에서 접속할 때 직접적으로 root 계정으로 로그인이 불가능하도록 설정되어 있다. 따라서 관리자라고 하더라도 일반 사용자로 로그인 한 뒤 root로 전환해야 하는데 이때 필요한 명령어가 su 이다.

💡 su [option] [username]
· 사용자명을 입력하지 않으면 root로 사용자 전환을 한다.
· 사용자 전환 시 해당 사용자의 패스워드를 입력해야 한다.
· root에서 다른 사용자로 전환 시 별도로 패스워드를 묻지 않는다. · 다른 사용자로 전환 후 원래 사용자로 돌아가려면 exit을 입력하면 된다.

 

su : root 권한 + 기존 사용자 환경변수

  • root 사용자로 전환한다. root로 권한을 가지지만 환경 변수 등은 기존 사용자의 환경으로 적용되며 완전한 root 권한이 아닌 어느정도 제약이 따른다.

 

su - : root 권한 + root 환경변수

  • root 사용자로 전환한다. 실제 root로 로그인한 것 처럼 모든 환경이 root의 상태가 된다.

 

su root -c “tail -f /var/log” : 일회성으로 root 권한을 빌려 명령어 실행

  • 사용자를 전환하지 않고 일회성으로 명령을 내릴 때 -c 옵션을 사용한다.

 

 

Sudo (substitute user do)

다른 사용자의 권한을 이용하여 명령을 실행하도록 하는 명령어이다. sudo [command] 는 root 권한으로 명령어를 실행하는 것을 의미한다. /etc/sudoers 파일에 지정되어 있는 사용자만 sudo 명령어 사용이 가능하다.

 

sudo: root 권한 Only 

  • root 계정으로 로그인 없이 명령어 실행
  • root 계정 패스워드 필요

 

sudo su: Interactive Non-Login Shell(대화형 비로그인 쉘) 동작

  • 비로그인 쉘을 실행시키기 위한 시동파일 실행 (~/.bashrc, /etc/bashrc)을 읽어들임
  • 현재 계정 Shell 유지 (현재 디렉토리 유지)
  • 현재 계정 패스워드 필요

 

sudo -s: Interactive Non-Login Shell(대화형 비로그인 쉘) 동작

  • 비로그인 쉘을 실행시키기 위한 시동파일 실행 (~/.bashrc, /etc/bashrc) 을 읽어들임
  • 현재 계정 Shell 유지 (현재 디렉토리 유지)
  • root 계정 패스워드 필요

 

sudo -i: Interactive Login Shell(대화형 로그인 쉘) 동작

  • 로그인 쉘을 실행시키기 위한 시동 파일 실행 (/etc/profile & ~/.profile & (~/.bashrc or ~/.login))
  • root 쉘 실행("/root"로 디렉토리 변경)
  • root 계정 패스워드 필요

 

 

sudo -i vs sudo su -

sudo su -sudo -i  모두 로그인 쉘로서 실행이 된다. -i 옵션은 2004년에 추가가 되었고 sudo su - 는 sudo -i 와 동일한 역할을 수행하기 위한 템플릿의 일종이었다고 한다. 그래서 둘은 거의 비슷하다고 볼 수있으며, 차별화 하여 사용할 필요는 없다고 한다.

참조: https://unix.stackexchange.com/questions/218169/is-there-ever-a-good-reason-to-run-sudo-su

 

Is there ever a good reason to run sudo su?

To launch a root shell on machines where the root account is disabled, you can run one of: sudo -i : run an interactive login shell (reads /root/.bashrc and /root/.profile) sudo -s : run a non-login

unix.stackexchange.com

 


참조

댓글