개요

최소 권한 규칙에 의거하여 root 로 로그인하는 것은 차단하고 root 권한이 필요할 경우에만 sudo 명령어를 사용하여 제한적으로 실행하는 것이 시스템의 안정성과 보안 측면에서 좋은 습관입니다.


이 때문에 우분투나 아마존 리눅스등은 설치 과정에서 생성하는 일반 사용자에 대해 sudo 명령어 실행할수 있는 권한을 부여하고 있습니다.


sudo 를 사용할 수 있는 사용자와 권한 설정은 /etc/sudoers 파일에 지정하며 보안을 위해 이 파일은 루트만 읽을 수 있고 루트도 쓸수 없도록 되어 있습니다. 


visudo 사용법

sudoers 파일을 편집하기 위해 chmod 명령로 쓰기 권한을 주는 것은 실수로 root 외의 사용자에게도 쓰기 권한을 줄 수 있으므로 보안상 좋은 방법이 아니며 편집 전용 명령어인 visudo 를 사용하는 것이 권장하는 방법입니다.

일반 편집기로 /etc/sudoers 파일을 편집할 경우 실수로 잘못된 구문이 있을 경우 sudo 로 권한 상승이 불가능합니다. visudo 는 저장시 구문 검사를 수행하므로 잘못된 구문으로 인한 문제를 해결할 수 있습니다.


visudo 를 제대로 사용하려면 에디터 환경 변수를 지정해 주어야 합니다. 다음 명령어로 사용할 에디터를 지정하거나 또는 쉘의 초기화 파일(예: .bash_profile, .zshrc)에 넣고 source 명령어로 쉘 초기화 파일을 로딩해 주세요.

$ export EDITOR=vim
CODE

우분투 리눅스의 경우 다음 명령어로 visudo 에 사용할 EDITOR 를 설정합니다.

sudo update-alternatives --config editor
CODE

이제 sudo visudo 명령으로 /etc/sudoers 파일을 열어 봅시다.


sudoers 형식

sudoers 파일의 형식은 다음과 같습니다.

계정명 호스트명=(실행 계정명) [NOPASSWD:] 명령어
CODE

예를 들어 ec2-user 만 shutdown 을 허용할 경우 아래와 같은 내용을 추가합니다.


다음은 ec2-user 에게 root 계정의 권한이 필요한 모든 명령어 실행을 허용하는 예입니다.

그룹일 경우 그룹명 앞에 %를 붙여서 설정하면 이 경우 해당 그룹에 속한 사용자는 모두 root 권한으로 명령어를 실행할 수 있게 되며 아래는 wheel 그룹을 대상으로 권한을 부여하는 예제입니다.


다음은 아마존 클라우드에서 생성한 우분투 인스턴스의 sudoers 파일입니다.


위 설정은 root 는 모든 명령이 가능하고 %sudo 그룹에 속한 사용자는 sudo 로 모든 명령어를 실행할 수 있음을 나타냅니다.

어떤 그룹이 sudo 실행 권한이 있는지는 배포판마다 조금씩 다르며 우분투는 sudo,  아마존 리눅스와 CentOS 의 경우 wheel 그룹에 속한 사용자여야 합니다.


CentOS 의 경우 설치시 처음 생성한 계정이 wheel 그룹이 아니기 때문에 sudo 권한이 없으므로 다음과 같은 방법으로 사용자에게 권한을 부여해야 합니다.


1. 사용자를 wheel 그룹에 포함

sudo 를 부여할 사용자(예: ec2-user ) 의 추가 그룹을 wheel 로 변경합니다.

$ sudo usermod -a -G wheel ec2-user
CODE

이제 해당 사용자는 로그 오프하고 다시 로그인하면 sudo 명령어를 사용할 수 있습니다.


2. sudoers 에 사용자를 지정

sudo visudo 명령어로 파일을 열은 후에 아래와 같이 권한을 부여할 사용자의 id 와 부여할 권한(여기서는 모든 권한)을 적어주면 됩니다.

ec2-user ALL=(ALL:ALL)ALL
CODE


이제 root 로 로그인하지 말고 일반 사용자로 로그인해서 작업후 root 권한이 필요한 경우에만 sudo 명령어를 사용하도록 관리 습관을 들이는 것을 권장합니다.