[5] SELinux – typy plików

16 marca 2022 Wyłączono przez Adam [zicherka] Nogły

Moż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