사용자는 확장 권한 정책을 사용하여 응용 프로그램에서 기본 권한을 제거할 수 있습니다. 정책은 응용 프로그램이 액세스하면 안되는 디렉토리에 대한 액세스를 금지합니다.
이 예에서는 사용자가 보호된 환경에서 Firefox 브라우저를 실행할 수 있는 방법을 보여줍니다. 이 구성에서는 사용자의 Documents 디렉토리가 Firefox에서 숨겨집니다.
사용자는 다음 명령을 사용하여 /usr/bin/firefox 명령에서 기본 권한을 제거합니다. ppriv -r 명령에 대한 확장 권한 인수는 브라우저에서 사용자가 지정한 디렉토리만 읽고 쓸 수 있도록 제한합니다. –e 옵션 및 해당 인수는 확장 권한 정책으로 브라우저를 엽니다.
% ppriv -r "\ {file_read}:/dev/*,\ {file_read}:/etc/*,\ {file_read}:/lib/*,\ {file_read}:/usr/*,\ {file_read}:/var/*,\ {file_read}:/proc,\ {file_read}:/proc/*,\ {file_read}:/system/volatile/*,\ {file_write}:$HOME,\ {file_read}:$HOME/.*,\ {file_read,file_write}:$HOME/.mozill*,\ {file_read,file_write}:$HOME/.gnome*,\ {file_read,file_write}:$HOME/Downloa*,\ {file_read,file_write}:/tmp,\ {file_read,file_write}:/tmp/*,\ {file_read,file_write}:/var/tmp,\ {file_read,file_write}:/var/tmp/*,\ {proc_exec}:/usr/*\ " -e /usr/bin/firefox file:///$HOME/Desktop
확장 정책에서 file_read 및 file_write 권한이 사용되는 경우 읽거나 써야 하는 모든 파일에 대한 명시적 액세스를 부여해야 합니다. 이러한 정책에는 와일드카드 문자 *를 사용해야 합니다.
자동 마운트된 홈 디렉토리를 처리하기 위해 사용자가 자동 마운트 경로에 대한 명시적 항목을 추가합니다. 예를 들면 다음과 같습니다.
{file_read,file_write}:/export/home/$USER
사이트에서 automount 기능을 사용하지 않는 경우 보호된 디렉토리의 초기 목록이면 충분합니다.
사용자는 셸 스크립트를 만들어 이 명령줄로 보호된 브라우저를 자동 마운트할 수 있습니다. 그런 다음 브라우저를 실행하기 위해 사용자는 /usr/bin/firefox 명령이 아니라 스크립트를 호출합니다.
예 4-5 응용 프로그램 프로세스에서 시스템의 디렉토리 보호이 예에서는 일반 사용자가 셸 스크립트 래퍼를 사용하여 응용 프로그램에 대한 sandbox를 만듭니다. 스크립트의 첫번째 부분은 응용 프로그램을 특정 디렉토리로 제한합니다. Firefox 등의 예외는 스크립트의 뒷부분에서 처리됩니다. 스크립트 뒤에는 스크립트 요소에 대한 설명이 나옵니다.
1 #!/bin/bash 2 3 # Using bash because ksh misinterprets extended policy syntax 4 5 PATH=/usr/bin:/usr/sbin:/usr/gnu/bin 6 7 DENY=file_read,file_write,proc_exec,proc_info 8 9 SANDBOX="\ 10 {file_read}:/dev/*,\ 11 {file_read}:/etc/*,\ 12 {file_read}:/lib/*,\ 13 {file_read,file_write}:/usr/*,\ 14 {file_read}:/proc,\ 15 {file_read,file_write}:/proc/*,\ 16 {file_read}:/system/volatile/*,\ 17 {file_read,file_write}:/tmp,\ 18 {file_read,file_write}:/tmp/*,\ 19 {file_read,file_write}:/var/*,\ 20 {file_write}:$HOME,\ 21 {file_read}:$HOME/.*,\ 22 {file_read,file_write}:$PWD,\ 23 {file_read,file_write}:$PWD/*,\ 24 {proc_exec}:/usr/*\ 25 " 26 27 # Default program is restricted bash shell 28 29 if [[ ! -n $1 ]]; then 30 program="/usr/bin/bash --login --noprofile --restricted" 31 else 32 program="$@" 33 fi 34 35 36 # Firefox needs more file and network access 37 if [[ "$program" =~ firefox ]]; then 38 SANDBOX+=",\ 39 {file_read,file_write}:$HOME/.gnome*,\ 40 {file_read,file_write}:$HOME/.mozill*,\ 41 {file_read,file_write}:$HOME/.dbu*,\ 42 {file_read,file_write}:$HOME/.puls*\ 43 " 44 45 else 46 DENY+=",net_access" 47 fi 48 49 echo Starting $program in sandbox 50 ppriv -s I-$DENY -r $SANDBOX -De $program
특정 응용 프로그램에 더 많거나 적은 액세스를 허용하도록 정책을 조정할 수 있습니다. 하나의 조정은 라인 38-42에 있으며, 사용자의 홈 디렉토리에서 세션 정보를 유지 관리하는 여러 dot 파일에 대한 쓰기 액세스가 Firefox에 부여됩니다. 또한 Firefox에는 네트워크 액세스를 제거하는 라인 46이 적용되지 않습니다. 그러나 Firefox는 사용자의 홈 디렉토리에서 임의 파일을 읽을 수 없도록 제한되며 현재 디렉토리에만 파일을 저장할 수 있습니다.
추가 레벨의 보호를 위해 라인 30의 기본 프로그램은 제한된 Bash 셸입니다. 제한된 셸은 현재 디렉토리를 변경하거나 사용자의 dot 파일을 실행할 수 없습니다. 따라서 이 셸에서 시작된 모든 명령은 유사하게 sandbox에 잠깁니다.
스크립트의 최종 라인에서는 ppriv 명령에 $DENY 및 $SANDBOX의 권한 세트 2개가 셸 변수로 전달됩니다.
첫번째 세트인 $DENY는 프로세스에서 파일 읽기 또는 쓰기, 하위 프로세스 실행, 다른 사용자의 프로세스 관찰 및 (조건부) 네트워크 액세스를 수행하지 못하도록 금지합니다. 이러한 제한은 너무 엄격하므로 두번째 세트인 $SANDBOX에서 읽고 쓰고 실행할 수 있는 디렉토리를 열거하여 정책을 세분화합니다.
또한 라인 50에서 디버그 옵션 –D가 지정됩니다. 액세스 실패는 터미널 창에 실시간으로 표시되며 명명된 객체 및 성공에 필요한 해당 권한을 포함합니다. 이 디버깅 정보는 사용자가 다른 응용 프로그램에 대한 정책을 사용자 정의하는 데 유용할 수 있습니다.