$ su ubuntu # ubuntu 계정으로 로그인
$ cd /var/log
$ ls -al
/var/log 내부의 파일들을 살펴보면 chrony라는 디렉터리가 있다. chrony 디렉터리의 소유자와 소유 그룹이 _chrony이다. 그리고 권한 정보(rwxr-x---)를 보니 _chrony를 제외한 사용자는 아무런 접근 권한이 없다. 정말 그런지 테스트 해보자.
$ ls chrony # chrony 디렉터리 내부를 조회
Permission denied 에러 메시지가 뜨면서 접근을 할 수 없다. 그럼 이번에는 root 사용자로 접근해보자.
$ sudo su # root 사용자로 전환
$ ls chrony
이번에는 Permission denied 에러가 뜨지 않았다. 명령어를 입력했는데 아무것도 출력되지 않은 이유는 chrony 디렉터리 내부에 아무 파일도 존재하지 않기 때문이다.
root 사용자는 분명 _chrony 사용자가 아닌데 왜 접근을 할 수 있었던 걸까?
root 사용자는 슈퍼 사용자로 설정되어 있기 때문이다. 이전에 슈퍼 사용자는 시스템의 모든 권한을 가진 계정이라고 설명했었다. 슈퍼 사용자는 파일에 설정된 권한과 별개로 모든 권한을 가지고 있기 때문에 어떠한 조작이든 전부 다 가능하다.
일반 사용자가 슈퍼 사용자처럼 명령어를 실행하거나 파일에 접근할 수 있는 방법이 있다. 바로 sudo라는 명령어이다.
$ su ubuntu # ubuntu 사용자로 전환
# sudo [실행하고자 하는 명령어]
$ sudo ls chrony # Permission denied 에러가 안 뜸
또 다른 파일로 테스트해보자.
$ cd /etc
$ ls -l # sudoers라는 파일의 권한 조회
root 이외의 사용자는 파일에 대한 어떠한 권한도 없다는 걸 알 수 있다. 정말 그런지 테스트해보자.
$ cat sudoers # sudoers라는 파일의 내부 내용 출력
sudoers라는 파일의 내용을 출력하려고 했는데 역시나 권한이 없어서 에러가 떴다. 그럼 sudo를 붙이면 권한과 상관없이 파일 내용을 출력하는 지 확인해보자.
$ sudo cat sudoers # (sudo를 활용해 명령어 실행)
sudo 명령어를 활용했더니 권한이 없는데도 불구하고 잘 작동했다.
✅ root 사용자로 로그인 vs sudo 명령어 활용
어떤 명령어를 실행시켰을 때Permission denied라는 에러 메시지를 만났다면 권한이 부족하다는 뜻이라는 걸 알았다. 이를 쉽게 해결하는 방법으로 크게 2가지를 배웠다.
슈퍼 사용자(root 사용자)로 접근해서 명령어 실행
$ sudo su # root 사용자로 전환
명령어 앞에 sudo를 붙여서 명령어 실행
$ sudo [실행시키고자 하는 명령어]
첫 번째 방법이 root 사용자로 아예 전환해서 명령어를 실행시키는 것이기 때문에, 명령어를 입력할 때마다sudo를 붙이지 않아도 된다는 편리함이 있다. 두 번째 방법은 권한이 필요할 때마다 sudo를 매번 붙여야 된다는 게 불편하다. 그래서 첫 번째 방법이 편해보인다.
하지만 root 사용자로 아예 전환해서 명령어를 조작하다보면 실수로 시스템에 치명적인 명령어를 입력해 시스템이 손상될 수도 있다. 그래서 일반 사용자로 명령어를 입력하다가, 정말 권한이 필요한 명령어에 한해서만 sudo를 붙여 사용하는 방식을 권장한다.