리눅스 운영체제가 채택하고 있는 파일시스템 계층 표준(Filesystem Hierarchy Standard)에서는 모든 파일과 디렉터리가 루트 디렉터리("/") 아래에 위치합니다. 하지만 보안상의 이유로 루트 디렉터리에 대한 접근은 대부분 제한되어 있습니다. 데비안(Debian)과 같은 리눅스 배포판에서는 sudo 명령어를 사용하면 SSH 환경에서도 시스템 전체에 대한 접근 권한을 얻을 수 있습니다. 이 튜토리얼에서는 사용자가 sudo 명령어를 실행할 수 있도록 Sudoers에 사용자를 추가하는 방법을 설명합니다.
슈퍼유저 또는 루트(root) 사용자로 로그인하면 시스템 전반의 설정을 변경할 수 있습니다. 또한 sudo 명령어는 다른 사용자 계정으로 전환할 때도 활용할 수 있으며, 이는 시스템 관리자나 기술자에게 종종 필요한 기능입니다.
다양한 명령어 실행이 허용된 사용자 및 사용자 그룹의 목록은 "/etc/sudoers" 파일에 저장됩니다. 따라서 시스템 관리자는 새로운 사용자에게 루트 로그인 권한을 부여하기 위해 이 파일에 해당 사용자의 이름을 추가하는 방법을 반드시 알아야 합니다. 방법은 두 가지가 있습니다. 하나는 파일을 직접 편집하는 것으로, 이 경우 루트 권한으로 실행할 수 있는 작업의 범위를 일부만 한정해서 지정해 줄 수도 있습니다. 다른 하나는 더 빠른 방법으로, 명령줄에서 해당 사용자를 "sudo" 사용자 그룹에 추가하는 것입니다.
sudo 그룹에 사용자 추가하기
다른 사용자를 sudo 그룹에 추가하려면 먼저 슈퍼유저로 로그인되어 있어야 합니다. 루트 사용자로 데비안 서버에 로그인하려면 다음과 같이 입력합니다.
ssh admin@wsxdn.com
추가하려는 사용자가 이미 시스템에 존재한다고 가정하면, 아래 명령어를 실행하면 됩니다.
usermod -aG sudo username
사용자가 그룹에 성공적으로 추가되었는지 확인하려면 다음 명령어를 입력하고 해당 사용자의 비밀번호를 입력하세요.
sudo whoami
sudo 접근 권한이 정상적으로 부여되었다면 출력 결과로 "root"가 표시됩니다. 만약 권한이 없거나 정보를 잘못 입력했다면 "user is not in the sudoers file"이라는 오류 메시지가 나타납니다.
완전히 새로운 사용자를 생성하려면 리눅스의 adduser 명령어를 사용할 수 있습니다.
adduser newusername
명령어를 실행하면 비밀번호 설정을 포함한 몇 가지 추가 정보를 입력하라는 메시지가 표시됩니다. 입력을 마치면 새 사용자의 정보가 sudoers 파일에 기록됩니다.
명령줄에서 새 사용자를 sudo 사용자 그룹에 할당하려면 usermod 또는 gpasswd 명령어를 사용할 수 있습니다. 예를 들면 다음과 같습니다.
usermod -aG sudo newusername
sudoers 파일 직접 수정하기
새로운 슈퍼유저에 대해 맞춤형 보안 정책을 설정하려면 이 방법이 더 적합합니다. sudoers 파일을 직접 편집하거나, /etc/sudoers.d 디렉터리 안에 새로운 설정 파일을 생성할 수 있습니다. 해당 디렉터리에 있는 파일들은 런타임에 sudoers 파일과 사실상 하나로 합쳐져 적용됩니다.
visudo 사용하기
sudoers 파일을 편집할 때는 반드시 "visudo" 명령어를 사용해야 합니다. visudo를 통해 에디터를 실행하면 저장하기 전에 파일의 구문 오류를 꼼꼼하게 검증해 줍니다. visudo 없이 파일을 직접 편집하면 이러한 검증 과정이 생략되는데, sudoers 파일은 시스템 운영에 매우 중요한 파일이므로 큰 위험을 초래할 수 있습니다. visudo로 /etc/sudoers.d에 저장된 파일을 편집할 수도 있으며, 이 경우 -f 옵션을 사용해 편집할 파일의 경로를 지정해야 합니다.
visudo가 실제로 사용하는 에디터는 EDITOR 환경 변수로 지정되며, 기본값은 vim입니다. 기본 에디터를 nano와 같은 다른 에디터로 변경하고 싶다면 다음과 같이 실행하면 됩니다.
EDITOR=nano visudo
권한 할당하기
sudoers 파일 어딘가에서 다음과 같은 줄을 볼 수 있습니다.
root ALL=(ALL) ALL
이것이 사용자에게 권한을 할당할 때 사용하는 기본 구문입니다. 여기서 의미는 루트 사용자가 모든(ALL) 터미널에서, 모든(ALL) 사용자로서, 모든(ALL) 명령어를 실행할 수 있다는 것입니다.
sudoers 파일에서 여러 이름에 권한 그룹을 더 쉽게 적용하기 위해 별칭(alias)이 자주 정의됩니다. 사용자 그룹, 터미널 범위, 명령어 그룹 각각에 대해 별칭을 만들 수 있습니다. 예를 들어 sudoers 파일 상단에 다음과 같이 작성할 수 있습니다.
User_Alias OPERATORS = amy, ben, chris Runas_Alias OP = root, operator Host_Alias NETWORK = 192.168.0.0/255.255.255.0 Cmnd_Alias PRINTING_CMDS = /usr/sbin/lpc, /usr/sbin/lprm
그런 다음 사용자에게 접근 권한을 부여할 때 이러한 별칭을 활용할 수 있습니다. 예를 들면 다음과 같습니다.
ben ALL = PRINTING_CMDS
이렇게 설정하면 ben은 모든 호스트에서 PRINTING_CMDS 별칭에 정의된 프린터 관련 명령어인 lpc와 lprm(/usr/sbin/ 디렉터리에 위치)을 실행할 수 있게 됩니다.
데비안에서 루트 권한은 매우 강력합니다. 그만큼 접근 제어를 무너뜨리거나 서버를 손상시키거나 데이터를 삭제할 위험도 커진다는 의미입니다. 따라서 모든 사용자에게 전체 루트 권한을 부여하는 일은 피하고, 불필요한 상황에서 슈퍼유저로 로그인하는 습관도 지양하는 것이 좋습니다.