본문 바로가기

Infra/Linux

[Linux] sudo vs su

반응형

서버에서 작업을 하던 중 관리자 권한이 필요한 작업이 있었다.

 

관리자 권한을 얻기 위해서 'sudo su' 를 실행한 후 관리자 권한으로 작업을 진행했다. 그런데 명령어를 실행하니까 에러가 발생하면서 명령어가 정상적으로 동작하지 않았다. 로그상으로는 명령어가 저장된 path 를 찾지 못하는 것 같았다.

 

그래서 이번에는 'su -' 명령어로 관리자 권한을 얻은 뒤 명령어를 실행해보았다. 그러자 이번에는 정상적으로 명령어가 동작했다.

 

이 과정에서 sudo su 가 같은 동작이 아닌 내부적으로 차이가 있다는 것을 알게 되었다. 이 글에서는 이 둘을 비교하면서 내용을 정리한다.

1. sudo vs su

- su

su substitue user 의 줄임말로 다른 계정, 다른 사용자로 전환하는 명령어이다. su 뒤에 전환할 사용자를 입력하여 계정을 전환할 수 있는데, 특별하게 지정하지 않고 명령어를 실행하는 경우 기본 대상은 root 이다. 'su' 명령어를 실행하여 root 로 전환하려는 경우 root 비밀번호를 요구한다.

 

비밀번호를 입력하면 root 사용자로 전환하는데, 이때 USER, SHELL, HOME 등의 환경변수만 root 기준으로 변경되고 나머지 환경변수는 대부분 유지된다.

- sudo

sudo 는 superuser do 의 줄임말이다. sudo 는 특정 명령을 다른 사용자 권한으로 실행할 수 있도록 하는 명령어이다. 기본값은 su 와 동일하게 root 로 sudo [command] 를 실행하면 command 자리에 온 명령어를 root 권한으로 실행한다.

 

su 와는 달리 shell 을 완전히 전환하는 것이 아니기 때문에 기존 사용자의 환경을 그대로 유지한다.

2. sudo su 와 su - 차이

그렇다면 이전에 관리자 권한으로 전환하기 위해 사용하였던 'sudo su' 와 'su -' 명령어의 차이는 무엇일까?

 

'sudo su' 는 su 명령어를 실행한는데, sudo 명령어를 통해 root 권한으로 실행하는 것이다.

 

이 명령어에서 중요한 점은 그냥 su 명령어는 login shell 을 실행시키지 않기 때문에 root 계정의 모든 환경을 로드하지 않고 기존 사용자의 환경을 대부분 유지한다.

 

반면 'su -' 는 '-l' 또는 '--login' 옵션과 같은 의미로 실제 로그인 동작을 통해 root 계정으로의 전환뿐만 아니라 모든 환경변수도 root 에 맞춰서 변경된다.

 

이 과정에서 PATH 와 같은 환경변수들도 변경되는데, 이러한 이유로 권한 전환 방식에 따라 특정 명령어, 패키지에 접근하지 못하는 경우가 발생한 것이다.

 

올바르게 root 계정을 사용하기 위해서는 'su -' 를 사용하거나, 아니면 'sudo -i' 명령어를 통해 interactive login shell 을 동작시켜 root 계정으로 전환하는 것을 추천한다.

 

[References]

- https://anggeum.tistory.com/entry/Linux-%EA%B4%80%EB%A6%AC%EC%9E%90-%EA%B6%8C%ED%95%9C-sudo-vs-su

 

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

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

anggeum.tistory.com

https://man7.org/linux/man-pages/man1/su.1.html

 

su(1) - Linux manual page

 

man7.org

- https://man7.org/linux/man-pages/man8/sudo.8.html

 

sudo(8) - Linux manual page

sudo(8) — Linux manual page SUDO(8) System Manager's Manual SUDO(8) NAME         top sudo, sudoedit — execute a command as another user SYNOPSIS         top sudo -h | -K | -k | -V sudo -v [-ABkNnS] [-g group] [-h host] [-p prompt] [-u user] sud

man7.org

 

 

 

 

 

 

 

반응형