SELinux의 기본 작업을 연구 중이며 거부를 유발하는 것이 유용하다는 것을 알았습니다. 내 테스트 시스템은 CentOS 7을 실행 중이며 추가 서비스가없는 기본 서버 설치이며 getenforce 상태는 ‘강제’입니다. 그래서 나는 / root를 읽을 수있게 만들고 권한이없는 사용자로서 파일을 읽으려고 시도하면 트릭을 할 것이라고 확신했습니다. 그러나 운이 없다! 누구나 빠른 테스트를 제안 할 수 있습니까? 경로 액세스 또는 포트 열기 등
이상적으로는 DAC가 제한하지 않은 간단한 셸 명령을 찾고 있지만 MAC은 알아 채고 거부합니다. 따라서 저는 맞춤형 프로그램을 컴파일하거나 웹 서버와 같은 특정 서비스를 설치하여이를 달성하려고하지 않습니다. 이것은 SELinux가 실제로 작동하는 것을 볼 수있는 일반적이고 명확한 방법을 제공하기 때문에 유용합니다.
DAC (예 : 파일 시스템 권한)를 수정하여 기본적으로 테스트의 일부보다 덜 제한적으로 만드는 데 아무런 문제가 없습니다.
답변
타사 / 자신의 개발자 코드에 대한 버그 탐지 에서 SELinux의 유틸리티를 시연하기 위해 메모리 보호 테스트가 있습니다 ( 여기 에서 첫 번째 코드 예제 수정 ).
#include <fcntl.h>
#include <stdio.h>
#include <sys/mman.h>
int main (void) {
// open file read-write, get a memory-mapped pointer with private access, write permission
int fd = open ("file_to_test", O_RDWR);
char *p = mmap (NULL, 42, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
p[0] = 'a'; // put something
// Update protection mode; SELinux response depends on sebool: allow_execmod
int r = mprotect (p, 42, PROT_READ | PROT_EXEC);
// Display mprotect result
printf ("mprotect = %d\n", r);
close(fd);
return 0;
}
컴파일 및 기본값 표시 (포착되지 않음)
$ echo "test data" > file_to_test
$ gcc execmod.c
$ ./a.out
mprotect = 0
$ sudo aureport -a
AVC Report
========================================================
# date time comm subj syscall class permission obj event
========================================================
<no events of interest were found>
부울을 변경하여 문제를 포착하십시오.
$ sudo getsebool allow_execmod
allow_execmod --> on
$ sudo setsebool allow_execmod 0
$ ./a.out
mprotect = -1
$ sudo aureport -a
AVC Report
========================================================
# date time comm subj syscall class permission obj event
========================================================
1. 04/30/2015 12:26:41 a.out unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 10 file execmod unconfined_u:object_r:user_home_t:s0 denied 3612
답변
이것은 CentOS 7의 기본 설치에서 동등한 DAC를 우회 할 수있는 MAC 정책을 분명히 보여줍니다.
-
권한이없는 비 시스템 사용자는 기본적으로 (쓰기 당시 CentOS에서) ‘unconfined_u’역할로 로그인됩니다. 그러나 권한이없는 사용자 ‘alice’가 대신 ‘user_u’역할에 배치되도록 시스템을 변경할 수 있습니다. 적은 양의 추가 구성으로이 역할을 명확하게 제한하도록 기본 정책을 만들 수 있습니다.
[root]# echo "alice:user_u:s0-s0:c0.c1023" >> /etc/selinux/targeted/seusers
-
이제 이들 사용자가 홈 디렉토리 및 / tmp에있는 파일을 실행하는 기능을 해제하십시오. 다시 한번, 기본값은이 동작을 허용하는 것입니다. 이 명령을 완료하는 데 약간의 시간이 걸릴 수 있습니다 .
[root]# setsebool -P user_exec_content off
-
이제 (권한이없는 사용자와 함께) 우리는 로그인하고 이러한 이동하지 않는 영역 중 하나에서 무언가를 실행하려고 시도 할 수 있습니다. 보시다시피 우리는 거부당했습니다.
[alice]$ cp /bin/ls /tmp/ [alice]$ /tmp/ls -bash: /tmp/ls: Permission denied
-
마지막으로 ALinux 로그를보고 SELinux 거부를 확인할 수 있습니다.
[root]# aureport -a AVC Report ======================================================== # date time comm subj syscall class permission obj event ======================================================== 1. 02/05/15 21:08:33 bash user_u:user_r:user_t:s0 59 file execute user_u:object_r:user_tmp_t:s0 denied 693
답변
system-config-selinux의 부울 탭 (또는 / etc / selinux / policy)에서 정책을 변경하지 않은 경우 기본값은 다음에 응답해야합니다 (NB, 심층적 인 다이빙을 위해 setroubleshoot를 설치할 수도 있습니다) :
mkdir -m 755 -p / install / ks
cp /root/anaconda-ks.cfg / install / ks
chmod 644 /install/ks/anaconda-ks.cfg
그런 다음 웹 서버를 다시 시작하고 웹 브라우저로 http : // localhost / ks 에 액세스 하십시오 . “금지”메시지가 나타납니다. 테일링 /var/log/audit/audit.log
을 실행 하거나을 실행 ausearch -m avc -ts recent
하면 다음 메시지가 표시됩니다.type=AVC msg=audit(1391277951.222:266): avc: denied { read } for pid=1731 comm="httpd" name="ks" dev=sda1 ino=22351 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined u:object r:default t:s0 tclass=dir
그런 다음 SELinux chcon -Rv --reference /var/www/html /install/ks
를 사용하지 않으려 고하지만 자원에 액세스 할 수 있으면 SELinux 컨텍스트를 변경할 수 있습니다 .
편집 : 죄송합니다, 당신은 “웹 서버가 아니라”고 말하지 않았습니다. chcon -u fake_u <filename>
시스템 파일에서 권한이없는 계정을 사용해보십시오 .
답변
두 개의 작은 패키지 설치-종속성 없음
yum install -y vsftpd lftp
FTP 서버를 시작하십시오
systemctl start vsftpd
루트의 집에 파일을 만들다
touch ~/tux.tch
루트의 홈에서 FTP 디렉토리로 이동하십시오.
참고 : 이동, 복사하지 않거나 파일의 fcontext가 변경됩니다
mv ~/tux.tch /var/ftp/pub
FTP 클라이언트 사용자로 FTP 서버에 로그인하고 새 파일에 액세스하십시오.
참고 : 탭 자동 완성은 여기에서 작동하지 않습니다
lftp localhost
ls pub/tux.tch
exit
원시 로그에서 거부를 봅니다.
grep AVC /var/log/audit/audit.log
또는 setroubleshoot*
설치 한 경우
grep sealert /var/log/messages