본문으로 바로가기

리눅스는 다중 사용자 시스템(Multi-User System)이다. 즉, 한 대의 OS에 여러 사용자가 접속해서 사용하게된다. 더군다나 개인용 PC보다는 서버용 OS로 많이 사용되기 때문에 권한에 대한 관리가 매우 엄격하고, 중요하다.

하지만 리눅스의 각종 기능들을 사용하려면 Root 권한 즉, 슈퍼유저의 권한이 필요한 경우가 많다.

때문에 리눅스에서는 터미널상에서 슈퍼유저의 권한으로 명령을 실행하게 하거나, root 사용자를 포함한 다른 계정으로 전환하는 명령어를 제공한다.


상황에 따라서 sudo / su / su - 명령어를 사용하게 되는데, 비슷해 보이지만 사실 중요한 차이가 있다.




sudo


sudo는 일반 사용자가 root권한을 잠시 빌려 명령을 실행하게 하는 명령어이다.

일반적으로 다음과 같이 사용한다.


$ sudo 명령어


sudo는 권한만 잠시 빌리는 것이기 때문에 근본적으로 명령을 내리는 주체는 현재 사용이다.

때문에 생성,수정, 삭제 등 이력이 남는 작업을 했을 때 root 유저가 아닌 해당 유저의 이름이 남게 된다.



여기서 중요한게, sudo 명령어를 사용할 때는 root 사용자가 아닌 현재 로그인한 일반 사용자의 비밀번호를 요구한다는 것이다.

그렇다면 아무나 다 root 권한을 마음대로 사용할 수 있는것인가 하는 의문이 생길 것이다.

기본적으로 sudo 명령어를 사용할 수 있는 사용자 혹은 그룹은 /etc/sudoers 에 등록이 되어 있어야 한다.


sudo + 명령어로 일시적으로 슈퍼유저 권한을 사용할 수 있지만, 계속 관리자 권한이 필요한 경우에는 매번 명령어를 입력할 때마다 sudo를 붙이기 번거롭다.


$ sudo -s

$ sudo su


이럴 경우에 sudo -s 또는 sudo su 명령어를 통해 root 계정을 반영구적으로 빌릴 수 있다.



이 경우에도 역시 root 비밀번호가 아닌 현재 사용자의 비밀번호를 요구한다. sudo su도 마찬가지이다. 

root로 로그인한 상태의 쉘을 사용할 수 있지만, sudo 명령어를 통한 권한 획득은 root 사용자로의 완전한 전환이 아닌 권한을 빌린 형태인 것이다.


그렇다면 sudo -s와 sudo su의 차이는 무엇일까?



위 터미널 실행 결과를 보자.

sudo su로 root로 전환했을 때의 home 디렉터리는 /root이다. 즉, 환경변수를 root 계정의 상태로 전환하는 것이다.

하지만 sudo -s를 사용했을 때의 home 디렉터리는 현재 사용자의 홈 디렉터리이다. 즉, 현재 계정의 환경변수들을 root로 넘기는 것이다.


su

su 명령어는 현재 사용자를 로그아웃하지 않은 상태에서 다른 사용자의 계정으로 전환하는 명령어이다.

이 때, su와 su - 는 모두 로그인 하려는 대상 계정의 비밀번호를 요구한다.


$ su 계정명



su -

su - 는 다른 사용자의 계정으로 완전히 전환하고, 전환한 사용자의 환경설정을 불러온다.


$ su - 계정명



su, su - 의 차이



su 명령어는 현재 계정의 환경변수들을 유지한 채, 대상 계정으로 전환한다.

반면에 su - 명령어는 다른 사용자의 계정으로 전환하고 환경변수까지 그 계정의 상태로 완전히 전환한다.




 Other Contents 

댓글을 달아 주세요

  1. 엔솔 2022.01.20 15:34

    좋은정보 감사합니다~