sudo 설정하기

|

sudo의 필요성

Linux 환경에서 sudo는 root계정으로 로그인하지 않은 상태로 sudoers의 설정에 따라 특정 명령을 사용할 수 있도록 해줍니다.
이에 따라 서버 관리자들이 root계정 사용을 최소화 하고 sudo를 이용하여 작업함으로써 누가 어떤 커맨드를 사용했는지 추적이 가능해집니다.

[acct 미설치시]
$ dpkg -l | grep acct
$ sudo apt-get install acct
[사용자 커맨드 추적]
$ lastcomm -u {사용자ID}

설정 수정방법

/etc/sudoers 에 각 사용자별 사용 가능한 설정이 포함되어 있으나 vi로 직접 수정하기 보다는 visudo 명령으로 수정하기를 권장합니다.

$ visudo

visudo edit

사용자 설정

특정 사용자에게 명령 권한을 설정할 때는 아래와 같이 설정 할 수 있습니다.

(user) (host)=(runUser[:runGroup])  [option:](command)

# User privilege specification
root    ALL=(ALL:ALL) ALL
# kimjh 사용자는 password입력없이 모든 명령을 실행 할 수 있습니다.
kimjh   ALL=(ALL) NOPASSWD:ALL
# docker 계정은 localhost에서 vi명령어를 admin그룹의 kimjh 계정의 권한으로 실행할 수 있습니다.
docker  localhost=(kimjh:admin) /usr/bin/vi

그룹 설정

특정 그룹에 명령 권한을 설정할 때는 아래와 같이 설정 할 수 있습니다.

%(group) (host)=(runUser[:runGroup])  [option:](command)

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# docker 그룹에 속한 계정은 localhost에서 vi명령어를 admin그룹의 kimjh 계정의 권한으로 실행할 수 있습니다.
%docker  localhost=(kimjh:admin) /usr/bin/vi

Alias 설정

Alias는 특정 호스트나 유저, 커맨드등을 하나로 묶어 Alias형태로 제공하고 아래와 같은 형식으로 정의합니다.

Alias_Type NAME = item1, item2 ....
Alias_Type NAME1 = item1, item2 .... : NAME2 = item3, item4 ....
  • Alias_Type은 User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias를 사용할 수 있습니다.
  • NAME은 대문자 영문, 숫자, 언더바(_)문자를 사용합니다.
  • 같은 Alias_Type을 두번째 예시와 같이 세미콜론(:)을 이용하여 여러개의 이름을 지정할 수 있습니다.

User_Alias

특정 계정이나 그룹을 Alias로 지정하여 할 수 있으며 해당 Alias를 이용하여 여러 사용자의 권한을 제어할 수 있습니다.

User_Alias NAME = user1, user2 ....

user정보는 아래와 같이 사용 가능합니다.

  • userName
  • #uid
  • %groupName
  • %#gid
  • Other_User_Alias
  • ! (해당 계정이 아닌 사용자)

    # 계정명이 kimjh, uid가 1000, 그룹명이 docker, gid가 899이거나 # 계정명이 guest, uid가 1001이 아닌 계정 User_Alias MANAGER = kimjh, #1000, %docker, %#899, !guest, !#1001 # 계정명이 agent이거나 MANAGER Alias에 속한 계정 User_Alias AGENT = agent, MANAGER

또한 user정보에 특수문자가 포함되거나 공백이 포함될 경우 더블쿼터(“)로 묶어 사용하거나 백슬래쉬()를 이용할 수 있습니다.

Runas_Alias

어떤 계정의 권한으로 명령을 실행 할 지에 대한 Alias설정을 지정합니다.
아래 예제와 같이 설정 된 상태에서 docker계정으로 vi명령을 실행 할 경우 Runas_Alias에 설정된 계정으로 실행되게 됩니다.

[/etc/sudoers]
# User privilege specification
docker ALL=(R_ROOT) NOPASSWD:/usr/bin/vi

docker@kimjh:$ sudo vi test
docker@kimjh:$ ls -atrl test
-rw-r--r-- 1 root root 22  2월 24 11:28 test

문법은 User_Alias와 동일하게 사용합니다.

Host_Alias

특정 실행권한에 대한 host를 Alias로 설정하여 허용되지 않은 사용자가 원격 접속하여 실행하는 것을 방지하기 위해 지정합니다.
아래 예제와 같이 설정 된 상태에서 docker계정은 211.63.24.9번 IP나 kimjh 호스트 서버에서만 vi명령을 실행 할 수 있습니다.

[/etc/sudoers]
# Host alias specification
Host_Alias H_LOCAL = 211.63.24.9, kimjh

# User privilege specification
docker H_LOCAL=(ALL) NOPASSWD:/usr/bin/vi

Cmnd_Alias

실행 명령어를 Alias로 지정할 수 있습니다.
아래 예제와 같이 설정 된 상태에서 docker계정은 vi명령과 vim명령을 실행 할 수 있습니다.

# Cmnd alias specification
Cmnd_Alias CMD_VIM = /usr/bin/vi, /usr/bin/vim

# User privilege specification
docker    ALL=(ALL:ALL) CMD_VIM

참고

sudo 사용의 필요성
Linux/Unix로그 파일
sudoers 파일
sudoers(5) - Linux man page
How To Edit the Sudoers File on Ubuntu and CentOS

Comments