탐색 링크 건너뛰기 | |
인쇄 보기 종료 | |
Oracle Solaris 11.1 관리: 보안 서비스 Oracle Solaris 11.1 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-33 사용자 - 직접 지정된 권한 확인
이 예에서는 사용자에게 proc_clock_highres 권한이 직접 지정되므로 사용자가 소유하는 모든 프로세스에서 권한을 사용할 수 있습니다.
% 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-34 역할 - 직접 지정된 권한 확인
다음 예에서 realtime 역할은 날짜 및 시간 프로그램을 처리하기 위해 권한이 직접 지정되었습니다.
% su - realtime Password: <Type realtime password> $ 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-35 역할의 권한 있는 명령 확인
이 예에서 사용자가 지정된 역할을 맡고 권한 프로파일 중 하나에 포함된 명령을 나열합니다.
% 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-36 역할의 권한 있는 명령 실행
이 예에서 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> $ 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 [-v] pid
프로세스 번호입니다. 부모 셸의 프로세스 번호를 명령에 전달하려면 이중 달러 기호($$)를 사용합니다.
권한 이름의 상세 정보 목록을 제공합니다.
예 9-37 현재 셸의 권한 확인
다음 예에서 사용자의 셸 프로세스에서 부모 프로세스의 권한이 나열됩니다. 두번째 예에서 권한의 전체 이름이 나열됩니다. 출력의 단문자는 다음 권한 세트를 가리킵니다.
유효 권한 세트입니다.
상속 가능한 권한 세트입니다.
허가된 권한 세트입니다.
제한 권한 세트입니다.
% 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-38 사용자가 맡을 수 있는 역할의 권한 확인
다음 예에서 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-39 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-40 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-41 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
NTP(Network Time Protocol) 서비스는 udp 트래픽에 대해 권한 있는 포트 123을 사용합니다. 이 절차에서는 이 포트에 지정된 권한을 얻었을 수도 있는 악의적인 사용자가 다른 포트에 액세스하지 못하도록 보호합니다.
다음 /lib/svc/manifest/network/ntp.xml 항목에서 net_privaddr, proc_lock_memory 및 sys_time 권한은 다른 프로세스에서 사용할 수 있습니다.
privileges='basic,!file_link_any,!proc_info,!proc_session, net_privaddr,proc_lock_memory,sys_time'
제거된 권한은 서비스가 다른 프로세스를 관측하거나 신호를 보낼 수 없도록 방지하고 파일 이름 바꾸기 방식으로 하드 링크를 만들지 못하도록 방지합니다.
즉, 서비스로 시작된 프로세스는 다른 권한 있는 포트가 아니라 특정 포트인 123에만 바인딩할 수 있습니다. 해커가 서비스를 악용해서 다른 프로세스를 시작할 수 있는 경우 하위 프로세스가 다른 권한 있는 포트에 바인딩할 수 없습니다.
다음 요약본에서 강조 표시된 확장 권한 정책은 이 서비스가 다른 권한 있는 포트에 액세스하지 못하도록 방지합니다.
privileges='basic,!file_link_any,!proc_info,!proc_session, {net_privaddr}:123/udp,proc_lock_memory,sys_time'
권한이 필요한 명령을 실행하는 셸 스크립트를 만들 때 적절한 권한 프로파일에 지정된 권한을 가진 명령을 포함해야 합니다.
시작하기 전에
root 역할을 맡아야 합니다. 자세한 내용은 지정된 관리 권한을 사용하는 방법을 참조하십시오.
#!/bin/pfsh # Copyright (c) 2012 by Oracle
% ppriv -eD script-full-path
자세한 내용은 지정된 관리 권한을 사용하는 방법을 참조하십시오.
셸 스크립트와 셸 스크립트의 명령을 필요한 보안 속성으로 권한 프로파일에 추가합니다. 단계는 권한 프로파일을 만드는 방법을 참조하십시오.
스크립트를 실행하려면 사용자가 역할을 맡고 역할의 프로파일 셸에서 스크립트를 실행합니다.
권한 프로파일을 역할에 추가하려면 역할의 보안 속성을 변경하는 방법을 참조하십시오.
사용자에게 역할을 지정하려면 사용자의 보안 속성을 변경하는 방법을 참조하십시오.