서버에서 작업을 하던 중 관리자 권한이 필요한 작업이 있었다.
관리자 권한을 얻기 위해서 '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
'Infra > Linux' 카테고리의 다른 글
| [Linux] CRLF vs LF (0) | 2025.05.08 |
|---|---|
| [Linux] systemd, service, systemctl (0) | 2025.03.27 |
| [Linux] 디스크 마운트 (fdisk, mkfs, mount, df) (0) | 2023.11.30 |
| [Linux] 사용자 권한 (sudo, sudoers, chmod, chown) (2) | 2023.11.28 |
| [Linux] 사용자 계정 생성 (adduser, useradd) (1) | 2023.11.26 |