[Linux Command] sudo command 설명
이번 글에서는 Linux 명령어 중 sudo
명령어에 대해 알아보겠습니다.
일반 사용자에게 "root" 권한을 부여하려면 보통 root 계정의 비밀번호를 제공해야 합니다. 이후 사용자는 su
명령어를 통해 root 계정으로 로그인할 수 있습니다. root 계정은 시스템 내 모든 명령을 실행할 수 있는 강력한 권한을 가지고 있기 때문에, 신중한 관리가 필요합니다.
리눅스에 익숙하지 않은 사용자가 root 권한을 사용할 경우, 시스템 운영에 필요한 핵심 파일이 삭제되거나 권한 설정이 변경되는 등의 사고가 발생할 수 있습니다. sudo
기능을 사용하면 root 전체 권한이 아닌 특정 명령어만 일반 사용자에게 허용할 수 있어 이러한 위험을 줄일 수 있습니다.
또한, 사용 권한은 부여하되 root 비밀번호를 공개하지 않아도 된다는 점도 sudo
의 중요한 장점 중 하나입니다.
환경 : Red Hat Enterprise Linux (RHEL)
sudo command 개념
명령어 사용법을 보기 전에, sudo
명령어로 어떤 작업이 가능한지 먼저 알아보겠습니다.
일반 사용자가 /etc/shadow
파일을 열려고 하면 권한 부족으로 인해 파일을 열 수 없습니다. 아래는 실제 출력 예시입니다.
-
일반유저로 shadow파일 오픈 실패
[user1@localhost ~]$ cat /etc/shadow cat: /etc/shadow: Permission denied
또한 mount
명령어도 일반 사용자 권한으로는 실행할 수 없습니다.
-
일반 유저로 mount 명령 실패
[user1@localhost sbin]$ mount /dev/sr0 /media mount: only root can do that
이제 일반 사용자에게 mount
명령어만 sudo
를 통해 root 권한으로 실행할 수 있도록 설정해보겠습니다.
[user1@localhost ~]$ sudo mount /dev/sr0 /media [sudo] password for user1: mount: /media: WARNING: device write-protected, mounted read-only.
위와 같이 마운트가 정상적으로 수행되었습니다. 경고 메시지는 CD-ROM 장치이기 때문에 읽기 전용으로 마운트되었다는 알림이며, 무시해도 됩니다.
그렇다면 /etc/shadow
파일은 열 수 있을까요? sudo
설정에서 mount
명령만 허용했기 때문에 여전히 접근이 불가능합니다.
[user1@localhost ~]$ sudo cat /etc/shadow [sudo] password for user1: Sorry, user user1 is not allowed to execute '/bin/cat /etc/shadow' as root on localhost.localdomain.
이처럼 sudo
는 특정 명령어에 대해서만 root 권한을 부여할 수 있으며, root 비밀번호를 공유하지 않아도 되므로 실무에서 매우 유용하게 활용할 수 있습니다.
다음은 설정 방법에 대해 설명하겠습니다.
sudo command 옵션
suo
명령어에는 다양한 옵션이 존재합니다. 대표적인 옵션 두 가지를 살펴보겠습니다.
-i
, --login
: 로그인 셸 실행
이 옵션은 지정한 사용자로 로그인 셸을 실행합니다. 로그인 셸은 해당 사용자의 홈 디렉터리에 있는 .bash_profile
이나 /etc/profile
같은 환경 설정 파일을 불러오는 셸을 의미합니다.
-i 옵션 사용 예시:
sudo -i 옵션을 이용하면 root유저로 로그인 할 수 있습니다.
[user1@localhost ~]$ sudo -i [sudo] password for user1: [root@localhost ~]#
-u
, --user=<user>
: 지정한 사용자로 명령 실행
지정한 사용자 계정의 권한으로 명령을 실행할 수 있습니다. -u
옵션이 생략되면 기본적으로 root 권한으로 실행됩니다.
-u 옵션 사용 예시:
[user1@localhost ~]$ sudo -u user2 id uid=1003(user2) gid=1003(user2) groups=1003(user2)...
이 명령은 id
명령어를 user2
의 권한으로 실행한 결과입니다.
sudoers 설정
sudo
명령어를 사용하려면 설정이 필요합니다.
설정 방법은 두 가지입니다
-
/etc/sudoers
파일을 직접 수정하는 방법 -
/etc/sudoers.d/
디렉터리에 개별 파일을 생성하여 룰을 적용하는 방법
이 두 방법은 병행되어 사용되며, 최종적으로 두 설정이 합쳐져 하나의 룰로 동작합니다.
예를 들어, 앞서 보았던 user1
사용자가 mount
명령어를 root 권한으로 실행할 수 있도록 설정하려면 아래와 같이 구성할 수 있습니다.
[root@localhost ~]# cat /etc/sudoers.d/mount user1 ALL=(ALL) /usr/bin/mount ## user1이 root권한으로 mount 명령어 실행 가능
설정은 위와 같이 한 줄이면 충분합니다. /etc/sudoers.d/
디렉터리 내에 파일을 생성하고, 해당 내용을 추가하면 됩니다.
필드 설명 (공백 기준)
-
첫 번째 필드:
sudo
명령을 실행할 사용자 또는 그룹 (%
로 시작하면 그룹) -
두 번째 필드: 어떤 사용자 권한으로 실행할지를 지정 (
ALL=(ALL)
이면 모든 사용자 권한으로 실행 가능) -
세 번째 필드: 실행을 허가할 명령어 경로
여러 명령어 허용 및 전체 권한 부여
이번에는 user1
사용자가 cat
명령어를 root 권한으로 실행할 수 있도록 하는 설정 예시입니다. 이전 예제와 마찬가지로 /etc/sudoers.d/
디렉터리에 파일을 생성합니다.
[root@localhost ~]# cat /etc/sudoers.d/cat user1 ALL=(ALL) /usr/bin/cat
동일한 사용자에게 여러 명령어를 허용하고자 할 경우, 하나의 줄에 쉼표로 구분하여 명령어들을 나열할 수도 있습니다.
# cat /etc/sudoers.d/user1 user1 ALL=(ALL) /usr/bin/mount,/usr/bin/cat
모든 명령어에 대한 root 권한을 허용하는 가장 일반적인 설정은 다음과 같습니다.
[root@localhost ~]# cat /etc/sudoers.d/user1_rule user1 ALL=(ALL) ALL
위 설정은 사실상 user1
이 root 사용자와 동일한 권한을 갖게 되는 것으로, 모든 명령어를 sudo
를 통해 실행할 수 있습니다. 또한 sudo -i
명령어를 이용해 root 셸로도 진입할 수 있습니다.
[user1@localhost ~]$ sudo -i ## root 계정 로그인 [sudo] password for user1: [root@localhost ~]#
다만 이 경우에도 sudo
명령어 실행 시 입력하는 비밀번호는 root 비밀번호가 아닌 user1
의 비밀번호입니다. 따라서 sudo
는 root 비밀번호를 제공하는 방식이 아니라, 일반 사용자에게 선택적으로 권한을 위임하는 방식이라고 이해할 수 있습니다.
wheel 그룹
리눅스 시스템에는 기본적으로 sudo
설정이 포함되어 있습니다. 따라서 앞서처럼 사용자별 설정 파일을 생성하지 않아도, 기본 설정을 통해 sudo
사용이 가능합니다.
설정 내용을 확인하기 위해 /etc/sudoers
파일을 열어보면 wheel
그룹에 대한 설정이 포함되어 있습니다. 내용이 많기 때문에 grep
명령을 사용하여 wheel
관련 설정만 필터링해 보겠습니다.
[root@localhost ~]# cat /etc/sudoers | grep wheel ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL # %wheel ALL=(ALL) NOPASSWD: ALL
주석(#
)이 없는 줄만 실제로 적용되는 설정입니다. 아래의 설정은 wheel
그룹에 속한 사용자들에게 모든 명령어를 root 권한으로 실행할 수 있도록 허용하는 내용입니다.
%wheel ALL=(ALL) ALL
이 설정이 존재하기 때문에, sudo
를 사용하고 싶은 사용자를 wheel
그룹에만 추가해주면 root 권한을 획득할 수 있습니다.
“%”기호는 그룹을 의미하며, 일반 사용자와 구분됩니다.
다음은 user3
사용자를 wheel
그룹에 추가하고, sudo
명령어를 통해 root로 로그인하는 예시입니다.
[root@localhost ~]# usermod -aG wheel user3 ## wheel 그룹에 user3 유저 추가 [root@localhost ~]# su - user3 [user3@localhost ~]$ sudo -i ## user3 계정에서 root로그인 시도 [sudo] password for user3: ## user3의 패스워드 입력 [root@localhost ~]# ## 로그인 성공
sudo 패스워드 자동 입력
기본적으로 sudo
명령어를 사용할 때는 사용자 본인의 비밀번호를 입력해야 합니다. 이 비밀번호는 일시적으로 캐시되며, 기본 설정 기준으로 약 5분 동안은 추가로 입력하지 않아도 됩니다.
하지만 아예 비밀번호 입력 없이 sudo
를 사용할 수 있도록 설정할 수도 있습니다.
다시 /etc/sudoers
파일을 열어보겠습니다.
[root@localhost ~]# cat /etc/sudoers | grep wheel ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL # %wheel ALL=(ALL) NOPASSWD: ALL
이번에 볼 부분은 주석처리되어 설정이 적용되어 있지 않던 맨 마지막 줄입니다.
# %wheel ALL=(ALL) NOPASSWD: ALL
여기서 주석 처리된 마지막 줄을 보면 NOPASSWD:
라는 구문이 포함되어 있습니다. 이 설정을 적용하면 sudo
명령 실행 시에도 비밀번호를 묻지 않게 됩니다.
이 기능을 사용하려면 기존 설정을 다음과 같이 변경합니다.
/etc/sudoers의 설정은 visudo 명령으로 할 수 있습니다
[root@localhost ~]# visudo ## Allows people in group wheel to run all commands # %wheel ALL=(ALL) ALL ## 주석 처리 ## Same thing without a password %wheel ALL=(ALL) NOPASSWD: ALL ## 주석 해제
위 설정이 적용되면 wheel
그룹에 속한 사용자는 비밀번호 없이도 sudo
명령어를 실행할 수 있습니다. 단, 보안상 모든 사용자에게 이 설정을 적용하는 것은 신중하게 판단해야 합니다.
마무리
지금까지 sudo
명령어의 개념과 설정 방법에 대해 알아보았습니다.
suo
는 운영 환경에서 root 비밀번호를 공개하지 않고, 특정 사용자에게 root 권한 또는 특정 명령어 실행 권한을 위임할 수 있는 유용한 도구입니다. 실무에서는 전체 권한을 부여하기보다는, 필요한 명령어만 선별하여 설정하는 방식이 권장됩니다.
보안성과 편의성을 모두 고려한 sudo
설정을 통해 안정적인 시스템 운영을 할 수 있습니다.
댓글
댓글 쓰기