본문 바로가기
공부/Linux

일반 계정에서 sudo 사용을 위한 sudoers 설정

by CITTA 2023. 2. 23.
728x90
반응형

일반 계정에서 root 권한이 필요한 경우 sudo명령어를 통해 임시적으로 root권한을 얻는다.

하지만 root가 해당 계정에 sudo 사용 권한을 주지 않으면 불가하다. ( 적용하기 전 관리자는 충분한 검토를 해야 한다.)

1. sudo 파일에 정의된 sudo 그룹에 사용자를 추가

# Centos, Fedora 등 Redhat 기반 배포판
$ usermod -aG wheel [username]

# Debian, Ubuntu 및 파생 모델
$ usermod -aG sudo [username]

2. /etc/sudoers 에 사용자 등록

# 사용자 sudo 설정값 구성
test    ALL=(ALL)    ALL
  1      2    3       4
1. 사용자 계정
2. 접속 아이피
3. 사용할 계정
4. 실행 명령어 - 실행 시 암호 입력을 생략하려면 'NOPASSWD: ALL '처럼 NOPASSWD 추가
# 입력 시 사이 공백이 들어가야 하며 /etc/sudoers 내부의 설정 값을 복사하여 수정 후 적용 할 수도 있다.

# 사용자 세분화 설정
test    192.168.130.0/23=(root)    /usr/bin/systemctl start httpd
test    192.168.130.0/23=(root)    /usr/bin/systemctl stop httpd
test    192.168.130.0/23=(root)    /usr/bin/systemctl status httpd

test 유저가 192.168.130 대역에 속할 경우 httpd 데몬을 start/stop/status 할 수 있는 권한을 부

# 사용자가 /etc/sudoers에 등록되어 있지 않은 경우
$ su - test
$ sudo ls -l /etc

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for test:
test is not in the sudoers file.  This incident will be reported.

#1. /etc/sudoers에 등록하는 방법
# root 계정으로 진행
$ vi /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
...
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
test    ALL=(ALL)       ALL
...

:wq!

# 적용 확인
$ su - test
$ sudo ls -l /etc
[sudo] password for test:
total 1148
-rw-r--r--.  1 root root       16 Feb 20 12:58 adjtime
-rw-r--r--.  1 root root     1529 Apr 15  2020 aliases
drwxr-xr-x.  2 root root      182 Feb 20 12:57 alternatives
-rw-r--r--.  1 root root      541 Sep 30  2021 anacrontab
drwxr-xr-x   3 root root       51 Feb 20 15:47 ansible
...

#2. 암호입력 없이 권한을 주는 방법
# root 로 진행
$ vi /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
...
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
test    ALL=(ALL)       NOPASSWD: ALL
...

:wq!

# 적용 확인
$ su - test
$ sudo ls -l /etc
total 1148
-rw-r--r--.  1 root root       16 Feb 20 12:58 adjtime
-rw-r--r--.  1 root root     1529 Apr 15  2020 aliases
drwxr-xr-x.  2 root root      182 Feb 20 12:57 alternatives
-rw-r--r--.  1 root root      541 Sep 30  2021 anacrontab
drwxr-xr-x   3 root root       51 Feb 20 15:47 ansible
drwxr-x---.  4 root root      100 Feb 20 12:59 audit
drwxr-xr-x.  3 root root       46 Feb 20 12:57 authselect
...

# 암호 입력 없이 출력되는 것을 확인할 수 있음

#3.특정 명령어만 사용 가능하게 할 경우(예시 : ls 명령어만)
# root 계정으로 진행
$ vi /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
...
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
test    ALL=(ALL)       NOPASSWD: /bin/ls
...

:wq!

# 적용 확인
$ su - test
$ sudo touch test
[sudo] password for test:
Sorry, user test is not allowed to execute '/bin/touch test' as root on test-vm.
$ sudo ls -l /etc
total 1148
-rw-r--r--.  1 root root       16 Feb 20 12:58 adjtime
-rw-r--r--.  1 root root     1529 Apr 15  2020 aliases
drwxr-xr-x.  2 root root      182 Feb 20 12:57 alternatives
-rw-r--r--.  1 root root      541 Sep 30  2021 anacrontab
...

# 허가되지 않은 명령어 'touch'를 사용할 경우 암호를 물어본 후 허가 안됨 메시지가 나옴
# 허가된 명령어 'ls'를 사용할 경우 암호 입력 없이(NOPASSWD를 줬기 때문에) 실행결과 출력

3. /etc/sudoers.d/[username]

# /etc/sudoers.d/ 디렉토리에 파일을 추가하여 적용하는 방법
$ echo 'test    ALL=(ALL)    ALL' > /etc/sudoers.d/test
$ ls -l /etc/sudoers.d/test
-rw-r--r-- 1 root root 25 Feb 23 15:12 /etc/sudoers.d/test
$ su - test
$ sudo cat /etc/shadow
[sudo] password for test:
root:$6$SvDttYURG9FbiY5x$i/gPYobQ6SWmNh168LBHe2a7A.cqXqNxB9IW6.Xf/KYHGttg6PrZ8K.hrIpO28UKHWHSc2PSKCs1uKy0YFiGB.::0:99999:7:::
bin:*:18367:0:99999:7:::
daemon:*:18367:0:99999:7:::
adm:*:18367:0:99999:7:::
lp:*:18367:0:99999:7:::
sync:*:18367:0:99999:7:::
...

4. 그룹 설정

# /etc/sudoers 내용을 확인해보면
...
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
...

# 위와 같이 그룹명 앞에 %를 입력하면 되며
# /etc/sudoers.d/에도 그룹 추가시 %를 붙여 입력하면 된다.
728x90
반응형

댓글