포럼 내용이 있는 곳으로 건너뜀

사과나무 이야기 마당

Mac 사용자 정보 교류 마당 - AppleTree forums for Korean Mac users

로그인하지 않으셨습니다. 로그인 또는 가입해 주세요.

이곳은 Mac 관련 유용한 정보들을 모아 많은 분과 함께 공유하기 위해 운영되고 있습니다. 잠깐 들르시는 나그네라도 자유롭게 글을 올리시고 의견을 나누실 수 있습니다.

새 댓글 작성

새 댓글 작성

새 댓글을 작성합니다.

사용 가능: BBCode 이미지 그림 문자

양식을 전송하기 전에 (필수)라고 표시된 모든 항목을 입력해야만 합니다.

손님인 경우 필수로 요구되는 정보


필수 정보
글 설정 선택사항

글타래 내용 (최신 글 먼저)

1

sudo (superuser do) 명령은 OS X unix 기저에 깔려있는 매우 유용하고 강력한 기능입니다. 이것은 특정 사용자들에게 root에서 실행될 수 있는 몇몇 혹은 모든 명령들을 실행할 수 있게 하는 동시에, 여기서 실행되는 모든 명령들은 따로 기록되어지게 됨으로, 관리 차원의 참고 자료가 될 수 있는, 누가 어떤 명령을 실행했는지의 명확한 일지를 담은 기록을 제공합니다.

기본적으로 OS X에서는 시스템 관리자만이 sudo 명령을 사용할 수 있지만, sudoers 파일을 약간 수정만 하면, 특정 컴퓨터와 사용자들에게 몇몇 혹은 전체의 sudo  명령들에 접근해서 사용할 수 있도록 만들 수 있답니다.

이런, 강력한 기능을 특정 사용자들에게도 나줘주기 위해서 sudoers 파일을 수정하기 전에, 먼저 다음과 같은 명령으로 원본 파일을 따로 보관해 놓으실 것을 강조하는 바입니다:

sudo cp /etc/sudoers /etc/sudoers.bak

sudores 파일을 수정하는데는 visudo를 씁니다. 이름에서도 알 수 있듯이, 이것은 vi 편집기를 사용하는데, 파일의 동시 다중 편집을 제한하는 잠금 기능과 문법 오류 검사 기능도 같이 제공합니다.

visudo의 설명서를 살펴보면 자세한 사용법이 나와 있는데, 여러 선택자들 중에서, 우리가 사용할 항목은 -c-f 선택자들입니다. visudo -c 명령은 오로지 검사 목적으로만 실행되며, 다음과 같이 사용됩니다:

$ sudo visudo -c
/private/etc/sudoers file parsed OK

-f 선택자는 다른 sudoers 파일의 위치를 지정하는데 사용되며, 시스템에서 사용되는 실제 파일은 놔두고 다른 수정 목적의 파일을 따로 열어서 편집할 경우에 사용될 수 있습니다:

$ sudo visudo -f /etc/sudoers.working

우선, 수정을 시작하기 전에 이미 존재하는 sudoers 파일을 열어서 찬찬히 살펴보시길 바라고, 다음에는 아래에 설명되어 있는 변수들이 어떤 식으로 사용되었는지를 참고해서, 파일을 수정하는데 있을지도 모를 어떠한 오해나 오류를 미연에 방지하시기 바랍니다.

아래에 설명될 내용은, 아주 간단하 예로, 특정 사용자에게 암호를 입력할 필요없이 몇몇 mail 명령들을 실행할 수 있는 sudo 명령을 사용할 수 있도록 sudoers 파일을 수정하는 법을 보여드립니다.

사용자 집단 정의하기
여기에는 user, 혹은 system/LDAP 집단이 포함될 수 있습니다 (사용자 이름 앞의 %는 집단을 나타냄):

User_Alias    <name> =  < %LDAP GROUP> and/or < %SYSTEM GROUP > and/or < USER >

사용 예:

User_Alias     ADMIN =  %admin, %root, andrina

Runas_Alias는 명령이 실행되어질 daemon 혹은 user를 정의하는 것으로, 이것은 group 혹은 특정 user가 될 수 있습니다:

Runas_Alias    <name> = < %GROUP>

사용 예:

MAILERS = %mailman, %postfix, cyrus

machine 집단 정의하기
이것은 호스트(hosts)의 집단을 정의하는 것으로, 이름, IP 그리고 특정 형태와 일치하는 형식을 포함하고 있습니다:

Host_Alias    <name> = < MACHINE or *Pattern*>

사용 예:

Host_Alias SERVERS = 192.168.1.1, server*

(여기서는 컴퓨터의 이름이 server1, server2, server3 형식으로 되어 있다면, server*를 쓰면 이들 모두를 포함하게 됩니다.)

명령들 정의하기
집단에 소속되어질 명령들을 정의하는 것으로, 명령의 경로에는 전체 경로가 지정되어야 합니다:

Cmnd_Alias     <name> = <full path to command/script>

사용 예:

Cmnd_Alias MAIL = /usr/bin/cyrus/tools/amsmailtool, /usr/bin/cyrus/tools/mkimap, \
            /usr/sbin/postfix-watch, /usr/sbin/postfix, \
            /usr/bin/cyrus/bin/ctl_cyrusdb

줄 마지막에 있는 \는 다음 줄에도 명령이 계속 이어진다는 표시이며, 혹 이것을 빼먹는다면 sudoers 파일은 문법의 오류를 갖게 됩니다.

접근 권한 정의하기
이 곳이 실제 작업이 이루어지는 곳입니다. 이제까지 위에서 해왔던 작업은 이 순간을 위한 준비작업과도 같습니다. 이곳에 설명되어 있는 작업은 비교적 알아보기 쉬운 형태인데, 여기에는 우리가 지정해둔 사용자들로 이루어져 있는 집단이, 특정 컴퓨터에서 몇몇 배정된 명령들을 실행할 수 있도록 허용된 특정 집단에 소속되어 있는 것처럼, sudo 명령들을 실행할 수 있도록 해줍니다.

<user_alias>     <host_alias> = (<runas_alias>) <cmnd_alias>

사용 예:

ADMIN     SERVERS = (MAILERS) NOPASSWD: MAIL

위의 것은 sudoers 파일을 사용하는데 있어서 약간 억지로 고안해 낸 사용예로 보일 수도 있습니다만, 특정 상황에서는 이것이 매우 유용하게 사용될 수도 있답니다. 예를 들어, 만약 컴퓨터를 재시동할 수 있는 권한만을 특정 사용자에게 주기를 원할 때는 다음과 같이 설정해 줄 수 있습니다:

User_Alias        SUPPORT = %support_staff

Host_Alias        LABS = lab1-*, lab2-*, lab3-*, \
                lab4-*, lab5-*
                        
Cmnd_Alias        REBOOT = /sbin/reboot

SUPPORT            LABS = (root) NOPASSWD: REBOOT

위의 예에서는, 보시다시피 Runas_Alias를 지정해 주지 않았습니다. 여기서는 다른 사용자/집단/daemon 말고, 특정 사용자에게만 root 권한의 sudo 명령을 사용할 수 있도록 하기 위해서, root의 짧은 이름을 지정해 주었습니다. 이 곳에는 사용자의 짧은 이름 혹은 "ALL"이 지정될 수 있습니다. 그리고 ALL은 어떠한 설정 항목들에서도 사용될 수 있으며, 원래 파일의 root 사용자에는 다음과 같이 설정되어 있습니다:

root            ALL=(ALL) ALL

sudoers 파일에 있는 이 줄은 super-user로서의 root가 갖게 되는 모든 권한을 나태냅니다.

앞의 설명에서는 NOPASSWD 신호에 대한 언급을 아직 안했습니다만, 이름에서 알 수 있듯이 이것은 sudoers 파일에 지정되어 있는 사용자가 sudo 명령을 실행할 때, 암호 입력의 요구를 받지 않게 됩니다. 물론, 이것이 간편할 때도 있지만 각별히 유의해서 사용되어져야 할 것입니다. 특히 어떤 사용자에게 막강한 명령의 권한이 주어졌을 때, 암호를 입력하게 함으로써 지금 실행하는 명령이 정말로 실행하고자 하는 것인지를 확인해서 일깨워주는 구실도 하게 됩니다.

이제, 이렇게 해서 sudoers 파일의 편집을 마무리 했다면, 다음과 같이 원래의 파일을 따로 보관해 놓고, 새로운 파일의 권한과 소유권을 적당한 값으로 지정한 후 원래 파일을 새로운 파일로 대치합니다:

#!/bin/bash

sudo cp -i /etc/sudoers /etc/sudoers.`date +%Y%m%d_%H%M%S`
sudo cp /path/to/remote/sudoers.new /etc
sudo chmod 440 /etc/sudoers.new
sudo chown root:wheel /etc/sudoers.new
sudo mv /etc/sudoers.new /etc/sudoers

이것으로 sudoers 파일이 얼마나 유용하고 강력한지를 잘 보여주는 본보기가 되었으면 좋겠습니다. 특히, 이 파일이 잘 못 설정되어 있으면, 모든 사용자들에게 sudo 권한을 빼앗아 버릴 수도 있으므로, 지헤롭게 잘 간수하시고 수정할 때는 각별한 주의를 기울이시기 바랍니다.

따옴 - AFP548 - Essential Sudoers



Mac으로 운영됩니다