본문 바로가기
IT Security/LINUX Basic

12. Linux - Sudo 명령어 및 sudoers 파일

by Rosmary 2019. 12. 5.
728x90
반응형

리눅스는 관리자 권한이 탈취되면 컴퓨터 내의 모든 정보가 접근 권한이 없는 사용자에게 무방비로 노출될 수 있다. 따라서, 리눅스를 체계적으로 관리하는 조직이라면 일반적으로 root 계정을 이용한 직접 접속은 잘 진행하지 않는다. 접속 과정에서 주변의 누군가에게 계정 비밀번호가 노출될 수도 있기 때문이다.

 

root 계정으로의 직접 접속을 피하기 위해, 일반 사용자 계정의 UID를 0번으로 지정하는 방법이 있긴 하지만, 완전한 해결책이라고 보기는 어렵다. 이전 포스팅에서 살펴보았다시피, UID를 0번으로 되돌린 일반 사용자 계정도 비밀번호가 노출되는 순간 컴퓨터 내의 모든 정보가 순식간에 탈탈 털리는 것은 너무나도 자명한 일이라...

 

그렇다면, 일반 사용자가 리눅스를 사용하면서 root 권한이 필요한 작업을 진행해야 하는 경우, 어떤 방식을 이용해야 할까? 흔히 두 가지 방식을 이용하는데, 하나는 root 권한이 필요한 폴더나 파일의 그룹 소유자를 따로 지정한 뒤, 해당 폴더와 파일을 사용할 수 있는 사용자를 그 그룹에 포함시켜주는 방법이 있고, 다른 하나는 이번 포스팅에서 설명할 sudo 명령어를 사용하는 방법이다(그룹 관리는 바로 다음 포스팅에서 작성할 내용이다).

 

sudo 명령어를 사용하기 전에, 파일 하나를 설정해주어야 하는데, 이 파일의 이름이 바로 sudoer다.

 

 

 

1. sudo 명령어

 

sudo 명령어는 자신에게 실행 권한이 없는 파일이나 폴더에 접근하고자 할 때, root 권한을 잠깐 빌려 해당 작업을 진행할 때 사용한다. SetUID와는 조금 다른 것이, SetUID의 경우, 파일과 폴더의 소유자 권한을 빌리는 것이며, sudo는 관리자인 root 권한을 빌린다는 차이가 있다. root 계정은 자신 소유의 파일이 아니더라도 컴퓨터 내의 모든 파일과 폴더에 접근할 수 있는 권한을 가지고 있기 때문에(Super User라고 한다. su라는 명령어를 입력하면 root 계정 로그인을 시도하는 생각해보자), SetUID와는 다른 개념으로 이해해야 한다.

 

sudo 명령어의 사용법은 매우 간단하다. 포맷은 다음과 같다.

 

============================

sudo {사용할 명령어}

============================

 

일반적으로 사용하는 명령어 앞에 sudo 만 붙여주면 된다.

 

하지만 일반 사용자 아무나 root 권한을 빌리게 되면 이런저런 문제가 발생할 가능성이 커진다. 가령, 누군가가 리눅스의 설정 파일을 변경한다던가 하면... 따라서 sudo 권한을 사용할 수 있는 계정을 따로 설정해야할 필요성이 있는데, 이를 수행하는 설정파일이 바로 sudoers 파일이다.

 

 

 

2.  sudoer 파일

 

sudoer 파일은 sudo 명령어를 사용할 수 있는 계정을 관리하는 설정 파일이다. 설정 파일이기 때문에, 다른 설정 파일들이 그러하듯이, 위치는 /etc 폴더 아래에 존재한다. 

 

 

이 파일은 root 계정에 모든 권한이 걸려있을 뿐더러, SetUID나 SetGID가 걸려있지 않은 파일이라, 일반 사용자가 이 파일을 읽는 것은 아예 불가능하다. 파일 내의 내용을 알아야만 해당 설정을 진행할 수 있기 때문에, su 명령어를 이용해 root 계정으로 전환한 뒤, 이 파일을 vi 편집기로 열어야한다(w 권한이 없어서 수정은 불가능하다. 수정하기 위해서는 visudo 명령어를 이용하거나 chmod 명령어로 파일 권한을 변경해야한다).

 

*** 주의!! sudoers 파일은 권한을 777로 할당할 경우, 다시 chmod 명령어를 사용하여 권한을 변경하는 것이 불가능해진다. 복구할 수 없는 것은 아니지만 매우 귀찮은 과정을 거쳐야 되며, 되도록이면 전체에게 rwx를 모두 부여하는 것은 금지해야한다.

 

 

리눅스의 종류마다 조금씩 다르겠지만, 해당 파일의 90번 째 줄 언저리에 sudo를 사용할 수 있는 계정을 부여하는 문구가 있다. 

 

 

100번째 줄에 "root   ALL=(ALL)   ALL"이라는 문구가 보이는데, 이는 root 계정이 모든(ALL) 컴퓨터에서 접근이 가능하며, 모든 컴퓨터에서 모든 명령 "=(ALL)"이 가능함을 의미한다. 마지막의 ALL은 sudoer 계정 추가 시, 기타 옵션에 대해 모두 부여하겠다는 의미다. 해당 줄에 대한 포맷은 위 사진의 95번째 줄에 작성되어 있으니 이를 참고하면 된다. 그러나 MACHINE과 COMMANDS에 들어가는 옵션과 추가 옵션에 대한 설명이 제대로 나와있지 않아 여기에 대해 부연 설명을 추가하려고 한다.

 

(1) MACHINE

 

MACHINE은 말 그대로 어떤 컴퓨터를 통해 sudo를 사용할 수 있는지를 결정하는 옵션이라고 보면 된다. 이 옵션에는 ALL, localhost 그리고 sudo를 허용할 컴퓨터 이름을 명시해주면 된다.

 

필자는 user2라는 계정에게 localhost로만, user3에게는 SwordofDemon이라는 컴퓨터로만 sudo 권한을 주고, user1, user2, user3에서 sudo 명령어 사용 시 어떤 차이점이 있는지 확인해보려고 한다. 

 

우선 sudoer 파일 편집을 진행하기 위해 visudo 명령어를 사용한다.

 

 

 

저장 후, 각 계정으로 로그인 한 뒤, sudo 명령어를 실행하면 다음과 같이 나타난다.

 

 

 

 

 

sudoers 파일에서 설정했듯이, user2만이 localhost에서 sudo를 사용하는 것이 허락되었으므로, user2만 sudo 명령어가 잘 작동하는 것을 확인할 수 있었다. 만약 user3의 SwordofDemon이라는 컴퓨터 명으로도 작동하고 싶게 만들고자 한다면, 리눅스의 hostname을 변경하면 된다. hostname의 변경 방법은 hostname 명령어 이후, {컴퓨터이름}.{도메인이름}을 작성해주면 되며, 영구적으로 변경하고 싶다면 /etc/hostname 파일 내용을 변경 후 재부팅하면 된다.

 

 

리눅스의 기본 컴퓨터 이름이 localhost이기 때문에, 되도록이면 리눅스 컴퓨터 이름을 영구적으로 변경한 뒤, sudoer 파일 설정을 변경하는 것이 보안상으로 훨씬 안전하다. 필자는 VMware로 구동중이라 별 정보가 없어서 localhost로 돌리고 있기 때문에 굳이 변경하지 않고 사용하고 있지만...

 

 

(2) Command

 

Command는 별 것 없다. sudo를 사용해서 사용 가능한 명령어를 "절대 경로"로 나열해주면 되며, sudoer에 추가된 일반 사용자는 sudo 명령어를 이용하여 해당 명령어 외에는 사용을 할 수 없다. user3를 예로 들어보자. 

 

 

sudoers 파일에 추가한 user3 계정에게 sudo를 사용하여 쓸 수 있는 명령어를 cat만 부여해 준 상태다. 이제, user3로 다시 로그인 한 뒤, 이전처럼 vi 편집기를 sudo로 실행하여 /etc/sudoers 파일을 열 수 있는지 확인해보면...

 

 

위와 같은 문구가 뜨며, 실행이 되지 않는 것을 확인할 수 있다. 이 상황에서는 cat 명령어를 제외한 어떠한 명령어도 sudo를 사용하여 root 파일과 관련된 어떠한 작업도 진행할 수 없게 된다.

 

 

 

 

FIN.

반응형

댓글