[5] SELinux – typy plików
16 marca 2022Możliwe jest zmodyfikowanie ustawień kontroli dostępu w celu zmiany typu pliku bez zmiany wartości logicznej.
Ten przykład jest oparty na [tergeted] środowisku zasad.
[1] Ustawienia domyślnych kontekstów SELinux są umieszczone w [(policy directory)/contexts/files] jak poniżej.
[root@vlsr01 ~]# ll /etc/selinux/targeted/contexts/files/ razem 988 -rw-r--r--. 1 root root 399092 03-15 15:41 file_contexts -rw-r--r--. 1 root root 562610 03-15 15:41 file_contexts.bin -rw-r--r--. 1 root root 13835 03-15 15:41 file_contexts.homedirs -rw-r--r--. 1 root root 19028 03-15 15:41 file_contexts.homedirs.bin -rw-r--r--. 1 root root 0 02-27 08:12 file_contexts.local -rw-r--r--. 1 root root 0 02-27 08:12 file_contexts.subs -rw-r--r--. 1 root root 597 02-27 08:12 file_contexts.subs_dist -rw-r--r--. 1 root root 139 02-27 08:11 media [root@vlsr01 ~]# head /etc/selinux/targeted/contexts/files/file_contexts /.* system_u:object_r:default_t:s0 /[^/]+ -- system_u:object_r:etc_runtime_t:s0 /a?quota\.(user|group) -- system_u:object_r:quota_db_t:s0 /nsr(/.*)? system_u:object_r:var_t:s0 /sys(/.*)? system_u:object_r:sysfs_t:s0 /xen(/.*)? system_u:object_r:xen_image_t:s0 /mnt(/[^/]*)? -d system_u:object_r:mnt_t:s0 /mnt(/[^/]*)? -l system_u:object_r:mnt_t:s0 /bin/.* system_u:object_r:bin_t:s0 /dev/.* system_u:object_r:device_t:s0
[2] Na przykład zmodyfikuj typ pliku, aby używać CGI na httpd.
Konfiguracja CGI@httpd – patrz tutaj.
Wartość logiczna używania CGI na httpd jest domyślnie ustawiona na [on], więc możliwe jest uruchomienie CGI w domyślnym katalogu [/var/www/cgi-bin/] na ustawieniach httpd z domyślnymi ustawieniami SELinux.
[root@vlsr01 ~]# semanage boolean -l | grep httpd_enable_cgi httpd_enable_cgi (włączone,włączone) Allow httpd to enable cgi [root@vlsr01 ~]# grep "cgi" /etc/selinux/targeted/contexts/files/file_contexts | grep "httpd" /opt/.*\.cgi -- system_u:object_r:httpd_sys_script_exec_t:s0 /usr/.*\.cgi -- system_u:object_r:httpd_sys_script_exec_t:s0 /var/www/[^/]*/cgi-bin(/.*)? system_u:object_r:httpd_sys_script_exec_t:s0 /var/www/html/[^/]*/cgi-bin(/.*)? system_u:object_r:httpd_sys_script_exec_t:s0 /usr/lib/cgi-bin(/.*)? system_u:object_r:httpd_sys_script_exec_t:s0 /var/www/cgi-bin(/.*)? system_u:object_r:httpd_sys_script_exec_t:s0 /var/run/fcgiwrap(/.*)? system_u:object_r:httpd_var_run_t:s0 /usr/lib/cgi-bin/(nph-)?cgiwrap(d)? -- system_u:object_r:httpd_suexec_exec_t:s0 /var/log/cgiwrap\.log.* -- system_u:object_r:httpd_log_t:s0 # utwórz skrypt testowy i uzyskaj do niego dostęp, jeśli uzyskasz dostęp jest OK [root@vlsr01 ~]# curl localhost/cgi-bin/index.cgi CGI Script Test Page
Jeśli jednak chcesz użyć CGI w innym katalogu, dostęp jest odmawiany, jak poniżej, nawet jeśli ustawienia httpd są poprawne.
[root@vlsr01 ~]# curl localhost/cgi-enabled/index.cgi <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>500 Internal Server Error</title> </head><body> <h1>Internal Server Error</h1> <p>The server encountered an internal error or misconfiguration and was unable to complete your request.</p> # [httpd_sys_content_t] jest przypisany [root@vlsr01 ~]# ls -lZ /var/www/html/cgi-enabled razem 8 -rwxr-xr-x. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 110 03-15 17:05 index.cgi -rwxr-xr-x. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 110 03-15 17:05 index.py
W takim przypadku należy zmienić typ pliku na taki, który umożliwia SELinux CGI.
[3] Zmień typ pliku w następujący sposób.
Ale bądź ostrożny, ta zmiana z poleceniem [chcon] zostanie przywrócona, gdy użyjesz polecenia [restorecon] lub zmienisz etykietę na system plików.
[root@vlsr01 ~]# chcon -t httpd_sys_script_exec_t /var/www/html/cgi-enabled/index.cgi [root@vlsr01 ~]# ls -lZ /var/www/html/cgi-enabled razem 8 -rwxr-xr-x. 1 root root unconfined_u:object_r:httpd_sys_script_exec_t:s0 110 03-15 17:05 index.cgi -rwxr-xr-x. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 110 03-15 17:05 index.py [root@vlsr01 ~]# curl localhost/cgi-enabled/index.cgi CGI Script Test Page @ CGI-ENABLED # jest dostęp
[4] Jeśli chcesz zmienić Typy na stałe, ustaw jak poniżej.
[root@vlsr01 ~]# semanage fcontext -a -t httpd_sys_script_exec_t /var/www/html/cgi-enabled/index.cgi [root@vlsr01 ~]# grep "cgi-enabled" /etc/selinux/targeted/contexts/files/file_contexts.local /var/www/html/cgi-enabled/index.cgi system_u:object_r:httpd_sys_script_exec_t:s0 # zapisano jako domyślny kontekst [root@vlsr01 ~]# ls -lZ /var/www/html/cgi-enabled razem 8 -rwxr-xr-x. 1 root root unconfined_u:object_r:httpd_sys_script_exec_t:s0 110 03-15 17:05 index.cgi -rwxr-xr-x. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 110 03-15 17:05 index.py # zresetuj używając [restorecon] [root@vlsr01 ~]# restorecon /var/www/html/cgi-enabled/index.py [root@vlsr01 ~]# ls -lZ /var/www/html/cgi-enabled razem 8 -rwxr-xr-x. 1 root root unconfined_u:object_r:httpd_sys_script_exec_t:s0 110 03-15 17:05 index.cgi -rwxr-xr-x. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 110 03-15 17:05 index.py # zresetowano [root@vlsr01 ~]# curl localhost/cgi-enabled/index.cgi CGI Script Test Page @ CGI-ENABLED