탐색 링크 건너뛰기 | |
인쇄 보기 종료 | |
Oracle Solaris 관리: 보안 서비스 Oracle Solaris 11 Information Library (한국어) |
다음 작업 맵은 시스템에서 권한을 관리하고 사용하기 위한 단계별 지침을 가리킵니다.
|
사용자가 권한에 직접 할당된 경우 권한은 모든 셸에서 유효합니다. 사용자에게 직접 권한이 지정되지 않은 경우 사용자가 프로파일 셸을 열어야 합니다. 예를 들어 지정된 권한을 가진 명령이 사용자의 권한 프로파일 목록에 있는 권한 프로파일에 있는 경우 사용자가 프로파일 셸에서 명령을 실행해야 합니다.
다음 작업 맵은 내게 할당된 권한을 보기 위한 절차를 가리킵니다
|
다음 절차는 권한 이름 및 정의를 보는 방법을 보여줍니다.
% man privileges Standards, Environments, and Macros privileges(5) NAME privileges - process privilege model ... The defined privileges are: PRIV_CONTRACT_EVENT Allow a process to request reliable delivery of events to an event endpoint. Allow a process to include events in the critical event set term of a template which could be generated in volume by the user. ...
이 권한 형식은 개발자가 사용합니다.
% ppriv -lv | more contract_event Allows a process to request critical events without limitation. Allows a process to request reliable delivery of all events on any event queue. ... win_upgrade_sl Allows a process to set the sensitivity label of a window resource to a sensitivity label that dominates the existing sensitivity label. This privilege is interpreted only if the system is configured with Trusted Extensions.
이 권한 형식은 useradd, roleadd, usermod , rolemod 명령을 사용하여 사용자 및 역할에 권한을 할당하고 profiles 명령을 사용하여 권한 프로파일에 권한을 할당할 수 있습니다.
다음 절차는 권한이 직접 할당되었는지 확인하는 방법을 보여줍니다.
절차는 프로세스의 권한을 확인하는 방법을 참조하십시오.
유효 세트에 나열된 권한은 세션 전체 동안 유효합니다. 기본 세트와 더불어 권한이 직접 할당된 경우 해당 권한이 유효 세트에 나열됩니다.
예 9-30 사용자 - 직접 지정된 권한 확인
사용자에게 직접 권한이 지정된 경우 해당 사용자의 기본 세트에는 원래 제공되는 기본 세트보다 더 많은 권한이 포함되어 있습니다. 이 예에서 사용자는 항상 proc_clock_highres 권한에 액세스할 수 있습니다.
% /usr/bin/whoami jdoe % ppriv -v $$ 1800: pfksh flags = <none> E: file_link_any,…,proc_clock_highres,proc_session I: file_link_any,…,proc_clock_highres,proc_session P: file_link_any,…,proc_clock_highres,proc_session L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,…,sys_time % ppriv -vl proc_clock_highres Allows a process to use high resolution timers.
예 9-31 역할 - 직접 지정된 권한 확인
역할은 관리 셸 또는 프로파일 셸을 사용합니다. 역할을 맡은 사용자는 역할의 셸을 사용하여 역할에 직접 할당된 권한을 나열할 수 있습니다. 다음 예에서 realtime 역할은 날짜 및 시간 프로그램을 처리하기 위해 권한이 직접 할당되었습니다.
% su - realtime Password: <Type realtime password> $ /usr/bin/whoami realtime $ ppriv -v $$ 1600: pfksh flags = <none> E: file_link_any,…,proc_clock_highres,proc_session,sys_time I: file_link_any,…,proc_clock_highres,proc_session,sys_time P: file_link_any,…,proc_clock_highres,proc_session,sys_time L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,…,sys_time
사용자가 직접 할당된 권한이 아닌 경우 권한 프로파일을 통해 권한 있는 명령에 액세스를 얻습니다. 권한 프로파일의 명령은 프로파일 셸에서 실행해야 합니다.
% profiles Audit Review Console User Suspend To RAM Suspend To Disk Brightness CPU Power Management Network Autoconf Desktop Print Management Network Wifi Info Desktop Removable Media User Basic Solaris User All
profiles -l Audit Review solaris.audit.read /usr/sbin/auditreduce euid=0 /usr/sbin/auditstat euid=0 /usr/sbin/praudit euid=0
Audit Review 권한 프로파일을 통해 auditreduce, auditstat, praudit 명령을 유효 UID 0으로 실행하고 solaris.audit.read 권한 부여를 할당할 수 있습니다.
예 9-32 역할의 권한 있는 명령 확인
이 예에서 사용자가 할당된 역할을 맡고 권한 프로파일 중 하나에 포함된 명령을 나열합니다.
% roles devadmin % su - devadmin Password: Type devadmin password $ profiles -l Device Security /usr/bin/kbd uid=0;gid=sys /usr/sbin/add_allocatable euid=0 /usr/sbin/add_drv uid=0 /usr/sbin/devfsadm uid=0 /usr/sbin/eeprom uid=0 /usr/sbin/list_devices euid=0 /usr/sbin/rem_drv uid=0 /usr/sbin/remove_allocatable euid=0 /usr/sbin/strace euid=0 /usr/sbin/update_drv uid=0
예 9-33 역할의 권한 있는 명령 실행
이 예에서 admin 역할이 useful.script 파일에 대한 사용 권한을 변경할 수 있습니다.
% whoami jdoe % ls -l useful.script -rwxr-xr-- 1 elsee eng 262 Apr 2 10:52 useful.script chgrp admin useful.script chgrp: useful.script: Not owner % su - admin Password: <Type admin password> $ /usr/bin/whoami admin $ chgrp admin useful.script $ chown admin useful.script $ ls -l useful.script -rwxr-xr-- 1 admin admin 262 Apr 2 10:53 useful.script
사용자 및 역할에 대한 권한을 관리하는 가장 안전한 방법은 권한 프로파일의 명령에 권한을 사용하도록 구성하는 것입니다. 그러면 권한 프로파일이 역할에 포함됩니다. 역할이 사용자에 할당됩니다. 사용자가 할당된 역할을 맡을 때 프로파일 셸에서 실행되도록 권한 있는 명령을 사용할 수 있습니다. 다음 절차는 권한을 할당하고 권한을 제거하고 권한 사용을 디버그하는 방법을 보여줍니다.
다음 작업 맵은 권한을 할당, 제거, 디버그하고 권한 있는 명령이 포함된 스크립트를 실행하기 위한 절차를 가리킵니다.
|
이 절차는 프로세스에 사용 가능한 권한을 확인하는 방법을 보여줍니다. 특정 명령에 할당된 권한은 목록에 포함되지 않습니다.
% ppriv pid $ ppriv -v pid
프로세스 번호입니다. 부모 셸의 프로세스 번호를 명령에 전달하려면 이중 달러 기호($$)를 사용합니다.
권한 이름의 상세 정보 목록을 제공합니다.
예 9-34 현재 셸의 권한 확인
다음 예에서 사용자의 셸 프로세스에서 부모 프로세스의 권한이 나열됩니다. 두번째 예에서 권한의 전체 이름이 나열됩니다. 출력의 단문자는 다음 권한 세트를 가리킵니다.
유효 권한 세트입니다.
상속 가능한 권한 세트입니다.
허가된 권한 세트입니다.
제한 권한 세트입니다.
% ppriv $$ 1200: -csh flags = <none> E: basic I: basic P: basic L: all % ppriv -v $$ 1200: -csh flags = <none> E: file_link_any,net_access,proc_exec,proc_fork,proc_info,proc_session I: file_link_any,net_access,proc_exec,proc_fork,proc_info,proc_session P: file_link_any,net_access,proc_exec,proc_fork,proc_info,proc_session L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,…,sys_time
예 9-35 사용자가 맡을 수 있는 역할의 권한 확인
역할은 관리 셸 또는 프로파일 셸을 사용합니다. 역할을 맡고 역할의 셸을 사용하여 역할에 직접 할당된 권한을 나열해야 합니다. 다음 예에서 sysadmin 역할에 직접 할당된 권한이 없습니다.
% su - sysadmin Password: <Type sysadmin password> $ /usr/bin/whoami sysadmin $ ppriv -v $$ 1400: pfksh flags = <none> E: file_link_any,file_read,file_write,net_access,proc_exec,proc_fork, proc_info,proc_session I: file_link_any,file_read,file_write,net_access,proc_exec,proc_fork, proc_info,proc_session P: file_link_any,file_read,file_write,net_access,proc_exec,proc_fork, proc_info,proc_session L: cpc_cpu,dtrace_kernel,dtrace_proc,dtrace_user,…,win_upgrade_sl
이 절차는 명령이나 프로세스를 성공하는 데 필요한 권한을 확인합니다.
시작하기 전에
이 디버깅 절차가 작동하려면 명령이나 프로세스를 실패해야 합니다.
% ppriv -eD touch /etc/acct/yearly touch[5245]: missing privilege "file_dac_write" (euid = 130, syscall = 224) needed at zfs_zaccess+0x258 touch: cannot create /etc/acct/yearly: Permission denied
% grep 224 /etc/name_to_sysnum creat64 224
예 9-36 truss 명령을 사용하여 권한 사용 조사
truss 명령은 일반 셸에서 권한 사용을 디버그할 수 있습니다. 예를 들어, 다음 명령은 실패하는 touch 프로세스를 디버그합니다.
% truss -t creat touch /etc/acct/yearly creat64("/etc/acct/yearly", 0666) Err#13 EACCES [file_dac_write] touch: /etc/acct/yearly cannot create
확장된 /proc 인터페이스가 truss 출력에 오류 코드 뒤에 누락된 권한을 보고합니다.
예 9-37 ppriv 명령을 사용하여 프로파일 셸의 권한 사용 조사
ppriv 명령은 프로파일 셸에서 권한 사용을 디버그할 수 있습니다. 권한 프로파일을 사용자에 할당하고 권한 프로파일에 권한 포함 명령이 포함된 경우 프로파일 셸에 명령을 입력해야 합니다. 권한 있는 명령을 일반 셸에 입력하면 명령이 권한으로 실행되지 않습니다.
이 예에서 jdoe 사용자는 objadmin 역할을 맡을 수 있습니다. objadmin 역할에는 Object Access Management 권한 프로파일이 포함됩니다. 이 권한 프로파일을 통해 objadmin 역할은 objadmin이 소유하지 않은 파일에 대한 사용 권한을 변경할 수 있습니다.
다음 발췌 부분에서 jdoe가 useful.script 파일에 대한 사용 권한 변경을 실패합니다.
jdoe% ls -l useful.script -rw-r--r-- 1 aloe staff 2303 Apr 10 10:10 useful.script jdoe% chown objadmin useful.script chown: useful.script: Not owner jdoe% ppriv -eD chown objadmin useful.script chown[11444]: missing privilege "file_chown" (euid = 130, syscall = 16) needed at zfs_zaccess+0x258 chown: useful.script: Not owner
jdoe가 objadmin 역할을 맡을 때 파일에 대한 사용 권한이 변경됩니다.
jdoe% su - objadmin Password: <Type objadmin password> $ ls -l useful.script -rw-r--r-- 1 aloe staff 2303 Apr 10 10:10 useful.script $ chown objadmin useful.script $ ls -l useful.script -rw-r--r-- 1 objadmin staff 2303 Apr 10 10:10 useful.script $ chgrp admin useful.script $ ls -l objadmin.script -rw-r--r-- 1 objadmin admin 2303 Apr 10 10:11 useful.script
예 9-38 root 사용자가 소유한 파일 변경
이 예는 권한 에스컬레이션에 대한 보호 조치를 보여줍니다. 설명은 권한 에스컬레이션 금지를 참조하십시오. 파일은 root 사용자가 소유합니다. 비교적 덜 강력한 역할인 objadmin이 파일 소유권을 변경하려면 모든 권한이 필요하므로 작업을 실패합니다.
jdoe% su - objadmin Password: <Type objadmin password> $ cd /etc; ls -l system -rw-r--r-- 1 root sys 1883 Oct 10 10:20 system $ chown objadmin system chown: system: Not owner $ ppriv -eD chown objadmin system chown[11481]: missing privilege "ALL" (euid = 101, syscall = 16) needed at zfs_zaccess+0x258 chown: system: Not owner
주 - 권한이 필요한 명령을 실행하는 셸 스크립트를 만들 때 적절한 권한 프로파일에 할당된 권한을 가진 명령을 포함해야 합니다.
시작하기 전에
root 역할을 가진 사용자여야 합니다.
#!/bin/pfsh # Copyright (c) 2011 by Oracle
% ppriv -eD script-full-path
자세한 내용은 관리 권한을 얻는 방법을 참조하십시오.
셸 스크립트와 셸 스크립트의 명령을 필요한 보안 속성으로 권한 프로파일에 추가해야 합니다. 단계는 감사 프로파일을 만들거나 변경하는 방법을 참조하십시오.
스크립트를 실행하려면 사용자가 역할을 맡고 역할의 프로파일 셸에서 스크립트를 실행합니다.
권한 프로파일을 역할에 추가하려면 역할의 보안 속성을 변경하는 방법을 참조하십시오.
사용자에게 역할을 지정하려면 예 9-20을 참조하십시오.