4.4. 관리 제어

가정용 컴퓨터를 관리시 사용자는 일부 작업을 수행하기 위해 루트 사용자로 로그인하거나 sudo나 su 명령과 같은 setuid 프로그램을 사용하여 효율적인 루트 허가를 얻어야 합니다. setuid 프로그램은 프로그램을 운영하는 사용자 대신 프로그램을 소유한 사용자 ID (UID)를 사용하여 작동하는 프로그램 중 하나입니다. 이러한 프로그램은 다음과 같은 긴 형식 목록의 사용자 부분에 소문자 s가 나타납니다:

-rwsr-xr-x    1 root     root        47324 May  1 08:09 /bin/su

그러나 기업체의 시스템 관리를 당당하는 관리자는 회사 내의 사용자가 자신의 컴퓨터에 얼마나 많은 관리 권한을 가질 수 있는지 결정하셔야 합니다. pam_console.so이라는 PAM 모듈을 사용하여 일부 관리 작업은 오직 루트 사용자만 수행할 수 있도록 설정 가능합니다. 예를 들면 컴퓨터 재부팅하기나 이동 매체를 마운팅하는 것과 같은 작업은 그 콘솔에 처음 로그인한 사용자에 의해서만 가능합니다 (pam_console.so 모듈에 대한 자세한 정보는 Red Hat Enterprise Linux 참조 가이드의 PAM (Pluggable Authentication Modules) 장을 참조하시기 바랍니다). 그러나 네트워크 설정 변경, 새 마우스 설정이나 네트워크 장치 마운트하기와 같은 중요한 시스템 관리 작업은 관리 허가 없이도 가능합니다. 따라서 시스템 관리자는 네트워크 상에서 사용자가 얼마나 많은 관리 액세스를 가질 것인지 결정하셔야 합니다.

4.4.1. 루트 액세스 허용하기

만일 기업 내의 사용자들이 신뢰할 수 있고 컴퓨터에 대한 많은 지식을 갖추고 있다면 루트 액세스를 허용해도 괜찮습니다. 사용자에게 루트 액세스를 허용하시면 개인 사용자가 장치를 추가하거나 네트워크 인터페이스를 설정하는 것과 같은 사소한 작업을 스스로 처리할 수 있게되며 시스템 관리자는 네트워크 보안과 다른 중요한 문제에 보다 많은 시간과 노력을 할애할 수 있게 됩니다.

다른 한편으로 개인 사용자에게 루트 액세스를 할당함으로서 다음과 같은 문제가 발생할 수 있습니다:

4.4.2. 루트 액세스를 허가하지 않기

만일 개인 사용자가 루트 사용자로 로그인하여 이러한 작업을 수행하는 것이 편하게 느껴지지 않으신다면, 시스템 관리자는 루트 암호를 안전한 곳에 보관하고 런레벨 1이나 단일 사용자 모드로 액세스하지 못하도록 부트로더에 암호를 설정하셔야 합니다. (부트로더 암호 설정에 대한 자세한 정보는 4.2.2 절을 참조하시기 바랍니다).

표 4-1에서는 관리자가 루트 로그인을 허가하지 않기 위해 수행할 수 있는 방법을 보여줍니다:

방법설명영향을 미치는 사항영향을 미치지 않는 사항
루트 쉘로 변경하기./etc/passwd 파일에서 쉘을 /bin/bash에서 /sbin/nologin으로 변경하십시오.

루트 쉘로 액세스를 방지하며 액세스 시도를 기록합니다.
다음 프로그램은 루트 계정에 액세스할 수 없습니다:
� login
� gdm
� kdm
� xdm
� su
� ssh
� scp
� sftp

FTP 클라이언트, 메일 클라이언트와 다수의 setuid 프로그램과 같이 쉘을 필요로 하지 않는 프로그램.
다음 프로그램은 루트 계정에 액세스 가능합니다:
� sudo
� FTP 클라이언트
� 이메일 클라이언트

콘솔 장치 (tty)를 사용하여 루트 로그인을 허가하지 않는 방법./etc/securetty 파일을 공백으로 비우시면 컴퓨터에 부착된 장치에서 루트 로그인을 방지합니다.

콘솔이나 네트워크를 통하여 루트 계정에 액세스하는 것을 방지합니다. 다음 프로그램은 루트 계정에 액세스할 수 없습니다:
� login
� gdm
� kdm
� xdm
� tty를 연 다른 네트워크 서비스

루트로 로그인하지 않고 setuid 또는 다른 메커니즘을 사용하여 관리 작업을 수행하는 프로그램.
다음 프로그램은 루트 계정에 액세스할 수 있습니다:
� su
� sudo
� ssh
� scp
� sftp

루트 계정 SSH 로그인을 허가하지 않는 방법./etc/ssh/sshd_config 파일에서 PermitRootLogin 변수값을 no로 설정하십시오.

OpenSSH 도구 모음을 사용하여 루트 로그인하는 것을 방지합니다. 다음 프로그램을 사용하여 루트 계정에 로그인하는 것이 금지됩니다:
� ssh
� scp
� sftp

OpenSSH 도구를 제외한 프로그램은 루트 로그인이 허용됩니다.

PAM을 사용하여 서비스에 루트 액세스 제한하기/etc/pam.d/ 디렉토리에서 대상 서비스에 대한 파일을 수정하십시오. 인증을 위해 pam_listfile.so이 사용되는지 확인하십시오. 자세한 정보는 4.4.2.4 절을 참조하시기 바랍니다.

PAM을 인식하는 네트워크 서비스에 루트 액세스를 허용하지 않습니다.
다음 서비스는 루트 계정에 액세스할 수 없습니다:
� FTP 클라이언트
� 이메일 클라이언트
� login
� gdm
� kdm
� xdm
� ssh
� scp
� sftp
� 다른 PAM 인식 서비스

PAM을 인식하지 않는 프로그램과 서비스.

표 4-1. 루트 계정 로그인을 허가하지 않는 방법

4.4.2.1. 루트 쉘 사용 금지하기

사용자가 루트로 바로 로그인하는 것을 방지하기 위하여 시스템 관리자는 루트 계정의 쉘을 /etc/passwd 파일에서 /sbin/nologin으로 설정하실 수 있습니다. 이렇게 하시면 su와 ssh 명령과 같이 쉘을 필요로하는 명령을 통하여 루트 계정으로 액세스하는 것을 금지합니다.

중요중요
 

이메일 클라이언트나 sudo 명령과 같이 쉘에 액세스할 필요가 없는 프로그램은 여전히 루트 계정에 액세스 가능합니다.

4.4.2.2. 루트 로그인 금지하기

루트 계정으로 액세스를 보다 제한하기 위하여 관리자는 /etc/securetty 파일을 수정하여 콘솔에서 루트 계정으로 로그인하지 못하도록 설정하실 수 있습니다. 이 파일은 루트 사용자가 로그인할 수 있는 모든 장치 목록을 담고 있습니다. 만일 이 파일이 존재하지 않는다면, 루트 사용자는 시스템 상 콘솔이나 원시 네트워크 인터페이스든 상관 없이 모든 통신 장치를 통해 로그인할 수 있게 됩니다. 이러한 경우 사용자가 루트로 시스템에 Telnet한 후 자신의 암호를 네트워크 상에서 암호화되지 않은 상태로 전송할 수 있기 때문에 위험합니다. Red Hat Enterprise Linux의 /etc/securetty 파일은 루트 사용자가 물리적 시스템 상에 부착된 콘솔에서만 로그인할 수 있도록 기본 설정되어 있습니다. 루트 사용자가 로그인하지 못하도록 설정하시려면 이 파일의 내용을 삭제하신 후 다음 명령을 입력하시기 바랍니다:

echo > /etc/securetty

경고경고
 

공백 상태인 /etc/securetty 파일은 루트 사용자가 OpenSSH 도구를 사용하여 원격적으로 로그인하는 것을 방지하지 않습니다. 그 이유는 콘솔이 인증을 마친 후 열렸기 때문입니다.

4.4.2.3. 루트 SSH 로그인 금지하기

SSH 프로토콜을 사용하여 루트 계정에 로그인하는 것을 금지하시려면 SSh 데몬의 설정 파일 (/etc/ssh/sshd_config)에서 다음 줄을:

# PermitRootLogin yes

다음과 같이 변경하십시오:

 
PermitRootLogin no

4.4.2.4. PAM을 사용한 루트 계정 로그인 금지하기

PAM의 /lib/security/pam_listfile.so 모듈을 사용하여 쉽게 특정 계정을 거부할 수 있습니다. 관리자는 이 모듈에 로그인을 허용하지 않을 사용자 목록 파일을 지정하실 수 있습니다. 다음은 /etc/pam.d/vsftpd 파일에서 vsftpd FTP 서버에 사용되는 모듈의 예시입니다 (다음 예시의 첫번째 줄에 나온 \ 기호는 지시자가 한 줄에 다 들어갈 경우 필요하지 않습니다):

auth   required   /lib/security/pam_listfile.so   item=user \
sense=deny file=/etc/vsftpd.ftpusers onerr=succeed

이 모듈은 PAM에게 /etc/vsftpd.ftpusers 파일을 참조하여 이 파일에 포함된 사용자는 서비스로 액세스할 수 없도록 설정합니다. 관리자는 이 파일의 이름을 자유롭게 변경하실 수 있으며, 각 서비스마다 별개의 목록을 만드시거나 하나의 중앙 목록을 사용하여 여러 개의 서비스에 대한 액세스를 제어하는 것도 가능합니다.

만일 여러 개의 서비스에 대한 액세스를 거부하시려면 PAM 설정 서비스, 예를 들면 메일 클라이언트의 경우 /etc/pam.d/pop과 /etc/pam.d/imap, SSH 클라이언트의 경우 /etc/pam.d/ssh 파일에 유사한 줄을 추가하시면 됩니다.

PAM과 관련된 보다 자세한 정보를 원하신다면 Red Hat Enterprise Linux 참조 가이드에서 PAM (Pluggable Authentication Modules) 장을 참조하시기 바랍니다.

4.4.3. 루트 액세스 제한하기

시스템 관리자는 루트 사용자 액세스를 완전히 거부하는 대신 su 또는 sudo와 같은 setuid 프로그램을 사용한 액세스만 허용하는 설정을 원하실 경우도 있습니다.

4.4.3.1. su 명령

su 명령을 입력하시면 루트 암호가 요청됩니다. 인증을 마치면 루트 쉘 프롬프트가 나타날 것입니다.

su 명령을 통하여 로그인하시면 사용자는 루트 사용자가 되어 완전한 시스템 관리 액세스를 갖게 됩니다. 또한 만일 사용자가 루트 권한을 갖게 되면 su 명령을 사용하여 암호를 입력할 필요가 없이 시스템 상에 다른 사용자로 변경 가능하게 됩니다.

이 명령은 매우 강력하므로, 시스템 관리자는 기업 내에서 이 명령을 사용할 수 있는 권한을 제한하시는 것이 좋습니다.

가장 쉬운 방법은 사용자를 특별 관리 그룹인 wheel에 추가하시는 것입니다. 루트로 로그인하신 후 다음 명령을 입력하십시오:

usermod -G wheel <username>

앞의 명령에서 <username> 부분을 wheel 그룹에 추가할 사용자명으로 바꾸시기 바랍니다.

사용자 관리 도구를 사용하여 이 작업을 수행하시려면 패널에서 주 메뉴 버튼 => 시스템 설정 => 사용자와 그룹을 선택하시거나 쉘 프롬프트에서 redhat-config-users 명령을 입력하시면 됩니다. 사용자 탭에 클릭하신 후 사용자 목록에서 사용자를 선택하신 후 버튼 메뉴에서 등록정보를 클릭하십시오 (또는 풀다운 메뉴에서 파일 => 등록정보를 선택하시면 됩니다).

그 후 그룹 탭을 선택하시고 그림 4-2에서 보여진 것처럼 wheel 그룹을 클릭하십시오.

그림 4-2. 그룹 창

다음으로 su에 사용되는 PAM 설정 파일 (/etc/pam.d/su)을 텍스트 편집기로 여신 후 다음 줄에서 주석 [#]를 삭제하십시오:

auth  required /lib/security/pam_wheel.so use_uid

이렇게 하시면 관리 그룹 wheel에 속한 사용자만이 프로그램을 사용할 수 있게 됩니다.

알림알림
 

루트 사용자는 기본 값으로 wheel 그룹에 속합니다.

4.4.3.2. sudo 명령

sudo 명령은 다른 방식으로 사용자에게 관리 액세스를 줍니다. 신뢰할 수 있는 사용자가 sudo와 함께 관리 작업 명령을 입력한 경우 그 사용자의 암호를 입력하도록 요청됩니다. 그 후 인증이 성공적이고 명령이 허가된다면, 관리 작업 명령은 루트 사용자가 실행한 것처럼 실행됩니다.

sudo 명령의 기본 형식은 다음과 같습니다:

sudo <command>

위의 예시에서 <command> 부분에 일반적으로 루트 사용자에 의해서만 실행 가능한 명령, 예를 들면 mount와 같은 명령을 입력하십시오.

중요중요
 

sudo 명령을 사용하신 사용자는 컴퓨터를 켜놓은 채 다른 곳에 가시기 전에 반드시 로그아웃하셔야 합니다. 그대로 두시면 누구든 5분 내에 암호를 다시 입력할 필요가 없이 sudo 명령을 사용하여 루트로 명령을 실행할 수 있게 됩니다. 이러한 설정은 /etc/sudoers 설정 파일에서 변경하실 수 있습니다.

sudo 명령은 매우 설정이 유연합니다. 예를 들면 /etc/sudoers 설정 파일에 포함된 사용자만 sudo 명령을 사용할 수 있으며 이 명령은 루트 쉘이 아닌 그 사용자의 쉘에서 실행됩니다. 즉 4.4.2.1 절에서 보여지듯이 루트 쉘을 완전히 비활성화시킬 수 있습니다.

sudo 명령은 또한 광범위한 감시 추적 기능을 제공합니다. 성공적으로 로그인한 인증 정보는 모두 /var/log/messages 파일에 기록되며 명령을 실행한 사용자의 이름은 /var/log/secure 파일에 기록됩니다.

sudo 명령을 사용하는 또 다른 이점은 관리자가 사용자마다 각자의 필요에 맞는 특정 명령을 사용할 수 있게 별개의 설정이 가능하다는 것입니다.

sudo 설정 파일인 /etc/sudoers 파일을 수정하시려면 visudo 명령을 사용하셔야 합니다.

특정 사용자에게 전체 관리 허가를 주시려면 visudo를 입력하신 후 사용자 허가 지정 부분에서 다음과 유사한 줄을 추가하십시오:

juan ALL=(ALL) ALL

이 예시에서는 juan이라는 사용자가 어느 호스트에서나 sudo를 사용하여 모든 명령을 실행 가능하도록 설정되었습니다.

다음 예시는 sudo에서 설정시 발생 가능한 문제점을 보여줍니다:

%users  localhost=/sbin/shutdown -h now

이 예시에서는 사용자가 콘솔에서 /sbin/shutdown -h now 명령을 실행할 수 있다는 사실을 보여줍니다.

sudoers의 메뉴얼 페이지를 보시면 이 파일에 사용 가능한 자세한 옵션 목록을 보실 수 있습니다.