{"id":1339,"date":"2017-06-13T13:23:17","date_gmt":"2017-06-13T11:23:17","guid":{"rendered":"http:\/\/miroslaw.borodziuk.eu\/?p=1339"},"modified":"2017-08-01T09:52:21","modified_gmt":"2017-08-01T07:52:21","slug":"selinux","status":"publish","type":"post","link":"http:\/\/miro.borodziuk.eu\/index.php\/2017\/06\/13\/selinux\/","title":{"rendered":"SELinux"},"content":{"rendered":"<p style=\"padding-left: 30px;\">Security Enhanced Linux (SELinux) jest implementacj\u0105 architektury MAC (Mandatory Access Control &#8211; Obligatoryjna Kontrola Dost\u0119pu) stworzon\u0105 przez ameryka\u0144skie NSA i spo\u0142eczno\u015b\u0107 Linuxa. SELinux jest zintegrowany z j\u0105drem Linuxa jako zbi\u00f3r \u0142at, wykorzystuj\u0105cy framework LSM (Linux Security Modules), kt\u00f3ry zreszt\u0105 wspiera wiele rozwi\u0105za\u0144 security. MAC zapewnia dodatkow\u0105 wzgl\u0119dem standardowej architektury DAC (Discretionary Access Control) warstw\u0119 ochrony. Ogranicza on mo\u017cliwo\u015b\u0107 podmiotu (subject) dost\u0119pu do obiektu (object) aby wyeliminowa\u0107 lub zredukowa\u0107 potencjalne uszkodzenie systemu jakie mo\u017ce spowodowa\u0107 podmiot je\u017celi nast\u0105pi w\u0142amanie do systemu.<!--more--><\/p>\n<p><span style=\"color: #3366ff;\">Kluczowe terminy.<\/span><\/p>\n<table style=\"width: 736.133px;\">\n<tbody>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">Subject<\/span> (<span style=\"color: #808080;\">podmiot<\/span>)<\/td>\n<td style=\"width: 569.133px;\">U\u017cytkownik lub proces, kt\u00f3ry pr\u00f3buje uzyska\u0107 dost\u0119p do obiektu.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">Object <\/span><span style=\"color: #000000;\">(<span style=\"color: #808080;\">obiekt<\/span>)<\/span><\/td>\n<td style=\"width: 569.133px;\">Zas\u00f3b taki jak plik, katalog, urz\u0105dzenie, karta sieciowa, port, strumie\u0144 lub gniazdo.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">Policy<\/span> (<span style=\"color: #808080;\">polityka<\/span>)<\/td>\n<td style=\"width: 569.133px;\">Zbi\u00f3r zasad, kt\u00f3ry definiuje jakie \u017ar\u00f3d\u0142a maj\u0105 dost\u0119p do cel\u00f3w.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">Source domain<\/span> (<span style=\"color: #808080;\">domena \u017ar\u00f3d\u0142owa<\/span>)<\/td>\n<td style=\"width: 569.133px;\">Obiekt, kt\u00f3ry pr\u00f3buje uzyska\u0107 dost\u0119p do celu. zazwyczaj u\u017cytkownik lub proces.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">Target domain<\/span> (<span style=\"color: #808080;\">domena docelowa<\/span>)<\/td>\n<td style=\"width: 569.133px;\">Zas\u00f3b, do kt\u00f3rego domena \u017ar\u00f3d\u0142owa pr\u00f3buje uzyska\u0107 dost\u0119p. Zazwyczaj plik lub port.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">Context<\/span> (<span style=\"color: #808080;\">kontekst<\/span>)<\/td>\n<td style=\"width: 569.133px;\">\u00a0Etykieta bezpiecze\u0144stwa u\u017cywana do podzielenia obiekt\u00f3w na kategorie.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">Rule<\/span> (<span style=\"color: #808080;\">zasada<\/span>)<\/td>\n<td style=\"width: 569.133px;\">Okre\u015blona cz\u0119\u015b\u0107 polityki, kt\u00f3ra okre\u015bla jaka domena \u017ar\u00f3d\u0142owa ma jakie prawa dost\u0119pu do jakiej domeny docelowej.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">Labels<\/span> (<span style=\"color: #808080;\">etykiety<\/span>)<\/td>\n<td style=\"width: 569.133px;\">\u00a0To\u017csame z etykiet\u0105 kontekstu, definiuje jakie domeny \u017ar\u00f3d\u0142owe maj\u0105 dost\u0119p do jakich domen docelowych.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">Labeling<\/span> (<span style=\"color: #808080;\">etykietowanie<\/span>)<\/td>\n<td style=\"width: 569.133px;\">Mapowanie pomi\u0119dzy plikami w systemie plik\u00f3w a ich kontekstem.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">SELinux user <span style=\"color: #000000;\">(<span style=\"color: #808080;\">u\u017cytkownik SELinux<\/span>)<\/span><\/span><\/td>\n<td style=\"width: 569.133px;\">Predefiniowana to\u017csamo\u015b\u0107 w SELinux, kt\u00f3ra jest autoryzowana do okre\u015blonej roli.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">Role<\/span> (<span style=\"color: #808080;\">rola<\/span>)<\/td>\n<td style=\"width: 569.133px;\">Atrybut modelu bezpiecze\u0144stwa RBAC (Role-Based Access Control). Definiuje jakie podmiot ma pozwolenie na dost\u0119p do konkretnych domen lub typ\u00f3w. U\u017cytkownicy SELinux s\u0105 autoryzowani do do r\u00f3l, a role s\u0105 autoryzowane do domen lub typ\u00f3w.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">Type Enforcement<\/span> (<span style=\"color: #808080;\">typ egzekwowania<\/span>)<\/td>\n<td style=\"width: 569.133px;\">Ogranicza mo\u017cliwo\u015b\u0107 podmiotu do uzyskania dost\u0119pu do obiekt\u00f3w.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 148px;\"><span style=\"color: #008000;\">Level<\/span> (<span style=\"color: #808080;\">poziom<\/span>)<\/td>\n<td style=\"width: 569.133px;\">Atrybut MLS (Multi-Level Security) i MCS (Multi-Category Security). To para warto\u015bci czu\u0142o\u015b\u0107:kategoria, kt\u00f3ra definiuje poziom bezpiecze\u0144stwa w kontek\u015bcie.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Zarz\u0105dzanie SELinux.<\/span><\/p>\n<table style=\"width: 723px;\">\n<tbody>\n<tr>\n<td style=\"width: 706px; text-align: center;\" colspan=\"2\"><span style=\"color: #808080;\"><em>Zarz\u0105dzanie kontekstem<\/em><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>semanage<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">Modyfikuje kontekst na plikach i zarz\u0105dza polityk\u0105. Modyfikacje przetrwaj\u0105 ponowne nadawanie etykiet.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>chcon<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">Modyfikuje kontekst na plikach. Modyfikacje nie przetrwaj\u0105 ponownego nadawania etykiet.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>restorecon<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">Przywraca domy\u015blny kontekst na plikach przez odniesienie si\u0119 do katalogu<code>  \/etc\/selinux\/targeted\/contexts\/files<\/code> .<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>matchpathcon<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">Por\u00f3wnuje aktualny kontekst pliku z domy\u015blnym i raportuje to.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 706px; text-align: center;\" colspan=\"2\"><span style=\"color: #808080;\"><em>Zarz\u0105dzanie trybem<\/em><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>setenforce<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">\u00a0Ustawia tryb egzekwowania na enforcing lub permissive.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>getenforce<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">Wy\u015bwietla aktualny tryb egzekwowania.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>sestatus<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">Wy\u015bwietla status SELinux.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 706px; text-align: center;\" colspan=\"2\"><span style=\"color: #808080;\"><em>Zarz\u0105dzanie polityk\u0105<\/em><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>seinfo<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">Dostarcza informacji o komponentach polityki.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>sesearch<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">Wyszukuje regu\u0142y polityki.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px; text-align: center;\" colspan=\"2\"><span style=\"color: #808080;\"><em>Zarz\u0105dzanie Boolean<\/em><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>getsebool<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">Wy\u015bwietla zmienne booleans i ich ustawienia.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>setsebool<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">Modyfikuje warto\u015bci zmiennych boolean.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px; text-align: center;\" colspan=\"2\"><span style=\"color: #808080;\"><em>Rozwi\u0105zywanie problem\u00f3w<\/em><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>sealert<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">Graficzne narz\u0119dzie do rozwi\u0105zywania problem\u00f3w<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px; text-align: center;\" colspan=\"2\"><span style=\"color: #808080;\"><em>Zarz\u0105dzanie graficzne<\/em><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 121.933px;\"><span style=\"color: #008000;\"><code>system-config-selinux<\/code><\/span><\/td>\n<td style=\"width: 584.067px;\">Graficzne narz\u0119dzie do administrowania SELiuxem.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Tryby egzekwowania.<\/span><\/p>\n<p>SELinux mo\u017ce funkcjonowa\u0107 w trzech trybach:<\/p>\n<ul>\n<li><span style=\"color: #008000;\">permissive<\/span> \u2013 SElinux ostrzega o przekroczeniu polityki bezpiecze\u0144stwa ale zezwala na wykonanie zadania. Tryb przydatny do rozwi\u0105zywania problem\u00f3w. Aktywowanie komend\u0105:\n<pre># setenforce 0<\/pre>\n<\/li>\n<li><span style=\"color: #008000;\">enforcing<\/span> \u2013 SElinux blokuje wszystkie niedozwolone dzia\u0142ania. Aktywowanie komend\u0105:\n<pre># setenforce 1<\/pre>\n<\/li>\n<li><span style=\"color: #008000;\">disabled<\/span> \u2013 system SElinux jest wy\u0142\u0105czony.<\/li>\n<\/ul>\n<p>Tryb <em>disabled<\/em> mo\u017ce by\u0107 tylko aktywowany w czasie startu systemu przez odpowiednie wpisy w pliku <code>\/etc\/sysconfig\/selinux<\/code>:<\/p>\n<pre class=\"lang:sh decode:true \"># This file controls the state of SELinux on the system.\r\n# SELINUX= can take one of these three values:\r\n# enforcing - SELinux security policy is enforced.\r\n# permissive - SELinux prints warnings instead of enforcing.\r\n# disabled - No SELinux policy is loaded.\r\nSELINUX=disabled\r\n# SELINUXTYPE= can take one of three two values:\r\n# targeted - Targeted processes are protected,\r\n# minimum - Modification of targeted policy. Only selected processes are protected.\r\n# mls - Multi Level Security protection.\r\nSELINUXTYPE=targeted<\/pre>\n<p>&nbsp;<\/p>\n<p>W pliku tym mo\u017cemy tak\u017ce ustawia\u0107 <span id=\"Polityki_pracy_SElinux\"><span style=\"color: #3366ff;\">polityki pracy SELinux<\/span>:<\/span><\/p>\n<ul>\n<li><span style=\"color: #008000;\">targeted<\/span> \u2013 SElinux chroni wybrane elementy systemu.<\/li>\n<li><span style=\"color: #008000;\">strict<\/span> \u2013 SELinux chroni ca\u0142y system.<\/li>\n<\/ul>\n<p>Ustawiony tryb egzekwowania mo\u017cemy sprawdzi\u0107 komend\u0105:<\/p>\n<pre class=\"\"># getenforce\r\nEnforcing<\/pre>\n<p>Dok\u0142adne informacje o stanie SELinux uzyskamy po wpisaniu komendy:<\/p>\n<pre class=\"lang:default decode:true \"># sestatus -v\r\nSELinux status: enabled\r\nSELinuxfs mount: \/sys\/fs\/selinux\r\nSELinux root directory: \/etc\/selinux\r\nLoaded policy name: targeted\r\nCurrent mode: enforcing\r\nMode from config file: enforcing\r\nPolicy MLS status: enabled\r\nPolicy deny_unknown status: allowed\r\nMax kernel policy version: 28\r\n\r\nProcess contexts:\r\nCurrent context: unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023\r\nInit context: system_u:system_r:init_t:s0\r\n\/usr\/sbin\/sshd system_u:system_r:sshd_t:s0-s0:c0.c1023\r\n\r\nFile contexts:\r\nControlling terminal: unconfined_u:object_r:user_devpts_t:s0\r\n\/etc\/passwd system_u:object_r:passwd_file_t:s0\r\n\/etc\/shadow system_u:object_r:shadow_t:s0\r\n\/bin\/bash system_u:object_r:shell_exec_t:s0\r\n\/bin\/login system_u:object_r:login_exec_t:s0\r\n\/bin\/sh system_u:object_r:bin_t:s0 -&gt; system_u:object_r:shell_exec_t:s0\r\n\/sbin\/agetty system_u:object_r:getty_exec_t:s0\r\n\/sbin\/init system_u:object_r:bin_t:s0 -&gt; system_u:object_r:init_exec_t:s0\r\n\/usr\/sbin\/sshd system_u:object_r:sshd_exec_t:s0<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Kontekst SELinux dla plik\u00f3w.<\/span><\/p>\n<p>Wy\u015bwietlanie kontekstu dla pliku:<\/p>\n<pre class=\"\"># ll \u2013Z \/etc\/passwd\r\n-rw-r--r--. root root system_u:object_r:passwd_file_t:s0 \/etc\/passwd<\/pre>\n<p>Wy\u015bwietlono cztery atrybuty pliku:\u00a0 podmiot (<em>system_u<\/em>), obiekt (<em>object_r<\/em>), typ (<em>passwd_file_t<\/em>) i poziom bezpiecze\u0144stwa (<em>s0<\/em>). Domy\u015blny kontekst dla wielu plik\u00f3w sk\u0142adowany jest w pliku <i>\/etc\/selinux\/targeted\/contexts\/files\/file_contexts. <\/i>Kontekst dla nowo utworzonych plik\u00f3w i katalog\u00f3w sk\u0142adowany jest w pliku<i> file_contexts.local.<br \/>\n<\/i><\/p>\n<ul>\n<li>Je\u017celi tworzony jest nowy plik, to dziedziczy on kontekst od katalogu nadrz\u0119dnego.<\/li>\n<li>Je\u017celi plik jest kopiowany do innego katalogu (co r\u00f3wnoznaczne jest z utworzeniem nowego pliku) to dziedziczy on kontekst od tego nowego katalogu.<\/li>\n<li>Je\u017celi plik jest przenoszony lub kopiowany z zachowaniem w\u0142a\u015bciwo\u015bci (<code>cp -a<\/code>) to zachowany jest oryginalny stary kontekst dla pliku.<\/li>\n<li>Je\u017celi plik jest archiwizowany komend\u0105 <code>tar<\/code> mo\u017cna u\u017cy\u0107 opcji <code>--selinux<\/code> aby zachowa\u0107 kontekst.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>\u0106wiczenie 1. Modyfikowanie kontekstu dla katalogu.<\/p>\n<p>1. Aby zmieni\u0107 kontekst dla katalogu lub pliku najpierw potrzebujemy znale\u017a\u0107 odpowiedni kontekst na jaki b\u0119dziemy chcieli zmieni\u0107. Za\u0142\u00f3\u017cmy, \u017ce chcemy aby serwer www, kt\u00f3ry aktualnie korzysta ze starego katalogu<code> \/var\/www<\/code> m\u00f3g\u0142 korzysta\u0107 teraz z nowego katalogu<code> \/mydir<\/code><em>.<\/em><\/p>\n<pre class=\"\"> # ls -Z \/var\/www\r\ndrwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0\r\ncgi-bin\r\ndrwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html<\/pre>\n<p>lub<\/p>\n<pre class=\"\"># semanage fcontext -l | grep \/var\/www\r\n\/var\/www(\/.*)? all files system_u:object_r:httpd_sys_content_t:s0\r\n\/var\/www(\/.*)?\/logs(\/.*)? all files system_u:object_r:httpd_log_t:s0\r\n\/var\/www\/[^\/]*\/cgi-bin(\/.*)? all files system_u:object_r:httpd_sys_script_exec_t:s0\r\n\/var\/www\/svn(\/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0<\/pre>\n<p>2. W\u0142a\u015bciwy kontekst dla pliku<code> \/var\/www\/html<\/code> to<code> httpd_sys_content_t<\/code>, a zatem zapisujemy zmian\u0119 do polityki:<\/p>\n<pre># semanage fcontext -a -t httpd_sys_content_t \"\/mydir(\/.*)?\"<\/pre>\n<p>3. Zmiana te\u017c musi by\u0107 zapisana do systemu\u00a0 plik\u00f3w:<\/p>\n<pre>#  restorecon -R -v \/mydir<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0106wiczenie 2.\u00a0 Ponowne nadawanie etykiet plikom komend\u0105 <em>restorecon<\/em>.<\/p>\n<p>1.\u00a0 Sprawdzenie kontekstu dla piku.<\/p>\n<pre class=\"\"># ls -Z \/etc\/hosts\r\n-rw-r--r--. root root unconfined_u:object_r:net_conf_t:s0 \/etc\/hosts<\/pre>\n<p>2. Kopiowanie pliku do katalogu domowego i sprawdzenie kontekstu.<\/p>\n<pre class=\"\"># cp \/etc\/hosts ~ \r\n# ls -Z ~\/hosts\r\n-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 \/root\/hosts<\/pre>\n<p>Kontekst si\u0119 zmieni\u0142 na <code>admin_home_t<\/code>.<\/p>\n<p>4. Przeniesienie pliku <code>hosts<\/code> z katalogu domowego i sprawdzenie kontekstu.<\/p>\n<pre class=\"\"># mv ~\/hosts \/etc\r\nmv: zamaza\u0107 \u201e\/etc\/hosts\u201d? y\r\n# ls -Z \/etc\/hosts\r\n<strong>-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 \/etc\/hosts\r\n<\/strong><\/pre>\n<p>Kontekst pozosta\u0142 niezmieniony.<\/p>\n<p>5. Przywr\u00f3cenie prawid\u0142owego kontekstu.<\/p>\n<pre class=\"\"># restorecon -v \/etc\/hosts\r\nrestorecon reset \/etc\/hosts context unconfined_u:object_r:admin_home_t:s0-&gt;unconfined_u:object_r:net_conf_t:s0\r\n# ls -Z \/etc\/hosts\r\n-rw-r--r--. root root unconfined_u:object_r:net_conf_t:s0 \/etc\/hosts<\/pre>\n<p>Prawid\u0142owy kontekst zosta\u0142 przywr\u00f3cony.<\/p>\n<p>6. Zamiast <em>restorecon<\/em> mo\u017cna nada\u0107 prawid\u0142owe etykiety ca\u0142emu systemowi plik\u00f3w.<\/p>\n<pre># touch \/.autorelabel\r\n# systemctl reboot<\/pre>\n<p>W czasie restartowania systemu naciskamy klawisz Escape aby widzie\u0107 komunikaty bootowania. System plik\u00f3w b\u0119dzie mia\u0142 nadawane ponownie etykiety SELinux.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Kontekst SELinux dla port\u00f3w.<\/span><\/p>\n<p>Domy\u015blnie SELinux pozwala us\u0142ugom nas\u0142uchiwa\u0107 tylko na ograniczonym zbiorze port\u00f3w. Wy\u015bwietlanie kontekstu dla port\u00f3w:<\/p>\n<pre># semanage port -l \r\n\r\nTyp portu SELinuksa Protok\u00f3\u0142 Numer portu\r\nafs3_callback_port_t tcp 7001\r\nafs3_callback_port_t udp 7001\r\nafs_bos_port_t udp 7007\r\nafs_fs_port_t tcp 2040\r\nafs_fs_port_t udp 7000, 7005\r\nafs_ka_port_t udp 7004\r\nafs_pt_port_t tcp 7002\r\nafs_pt_port_t udp 7002\r\nafs_vl_port_t udp 7003\r\nagentx_port_t tcp 705\r\nagentx_port_t udp 705\r\namanda_port_t tcp 10080-10083<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0106wiczenie 3. Dodawanie nie standardowego portu do polityki SELinux.<\/p>\n<p>1. Listowanie <em>(\u2013l<\/em>) port\u00f3w na jakich nas\u0142uchuje <em>httpd<\/em>:<\/p>\n<pre># semanage port \u2013l | grep http_port\r\nhttp_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000<\/pre>\n<p>2. Dodanie (\u2013a) portu 8010 z typem http_port_t (\u2013t) i protoko\u0142em (\u2013p) tcp do polityki:<\/p>\n<pre># semanage port \u2013a \u2013t http_port_t \u2013p tcp 8010<\/pre>\n<p>3. Sprawdzenie:<\/p>\n<pre># semanage port -l | grep http_port\r\nhttp_port_t tcp 8010, 80, 81, 443, 488, 8008, 8009, 8443, 9000<\/pre>\n<p>4. Wykasowanie (\u2013d) portu 8010 z polityki i sprawdzenie:<\/p>\n<pre># semanage port \u2013d \u2013t http_port_t \u2013p tcp 8010\r\n# semanage port \u2013l | grep http_port\r\nhttp_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000<\/pre>\n<p>Teraz mo\u017cna skonfigurowa\u0107 Apache do korzystania z nowego portu zamiast starego.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Kontekst SELinux dla u\u017cytkownik\u00f3w.<\/span><\/p>\n<p>Wy\u015bwietlenie\u00a0 kontekstu dla u\u017cytkownika:<\/p>\n<pre># id -Z\r\nunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023<\/pre>\n<p>Z powy\u017cszego wynika, \u017ce na u\u017cytkownika nie s\u0105 na\u0142o\u017cone \u017cadne restrykcje z perspektywy SELinux. Dla u\u017cytkownik\u00f3w innych ni\u017c root tak\u017ce otrzymamy taki wynik. Domy\u015blnie wszyscy u\u017cytkownicy Linuxa u\u017cytkuj\u0105 system bez \u017cadnych restrykcji.<\/p>\n<p>Wy\u015bwietlanie wszystkich dost\u0119pnych u\u017cytkownik\u00f3w SELinux:<\/p>\n<pre># seinfo -u\r\n\r\nUsers: 8\r\n sysadm_u\r\n system_u\r\n xguest_u\r\n root\r\n guest_u\r\n staff_u\r\n user_u\r\n unconfined_u<\/pre>\n<p>W systemie jest zatem o\u015bmiu predefiniowanych u\u017cytkownik\u00f3w SELinux.<\/p>\n<p>Wy\u015bwietlenie mapowania u\u017cytkownik\u00f3w systemu na u\u017cytkownik\u00f3w SELinux:<\/p>\n<pre># semanage login -l\r\n\r\nLogin U\u017cytkownik SELinuksa Zakres MLS\/MCS Us\u0142uga\r\n\r\n__default__ unconfined_u s0-s0:c0.c1023 *\r\nroot unconfined_u s0-s0:c0.c1023 *\r\nsystem_u system_u s0-s0:c0.c1023 *<\/pre>\n<p>Trzecia kolumna reprezentuje poziom bezpiecze\u0144stwa a czwarta us\u0142ug\u0119 (gwiazdka oznacza wszystkie us\u0142ugi).\u00a0 Domy\u015blnie wszyscy standardowi u\u017cytkownicy s\u0105 reprezentowani jako <em>__default__<\/em> i s\u0105 mapowani na polityk\u0119 u\u017cytkownika <em>unconfined_u.<\/em><\/p>\n<p>&nbsp;<\/p>\n<p>\u0106wiczenie. Modyfikacja kontekstu SELinux dla u\u017cytkownik\u00f3w.<\/p>\n<p>1. Tworzenie konta u\u017cytkownika user5 i zmapowanie go do u\u017cytkownika SELinux staff_u.<\/p>\n<pre># useradd \u2013Z staff_u user5\r\n# passwd user5<\/pre>\n<p>2. Weryfikacja mapowania pami\u0119dzy user5 i staff_u.<\/p>\n<pre># semanage login \u2013l | grep user5\r\nuser5 staff_u s0-s0:c0.c1023 *<\/pre>\n<p>3. Zalogowanie do systemu jako user5 i potwierdzenie mapowania komend\u0105 id:<\/p>\n<pre>$ id \u2013Z\r\nstaff_u:staff_r:staff_t:s0-s0:c0.c1023<\/pre>\n<p>4. Mapowanie u\u017cytkownika <em>user4<\/em> na u\u017cytkownika SELinux <em>user_u.<\/em><\/p>\n<pre># semanage login \u2013a \u2013s user_u user4\r\n# semanage login \u2013l | grep user4\r\nuser4 user_u s0 *<\/pre>\n<p>5. Modyfikacja polityki SELinux w taki spos\u00f3b aby nowi u\u017cytkownicy systemu w czasie zak\u0142adania konta byli automatycznie mapowani do staff_u.<\/p>\n<pre># semanage login \u2013m \u2013S targeted \u2013s staff_u \u2013r s0 __default__\r\n# semanage login \u2013l | grep default\r\n__default__ staff_u s0 *<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Kontekst SELinux dla proces\u00f3w.<\/span><\/p>\n<p>Wy\u015bwietlanie kontekstu dla proces\u00f3w:<\/p>\n<pre># ps -eZ\r\n\r\nLABEL PID TTY TIME CMD\r\nsystem_u:system_r:init_t:s0 1 ? 00:00:50 systemd\r\nsystem_u:system_r:kernel_t:s0 2 ? 00:00:00 kthreadd\r\nsystem_u:system_r:kernel_t:s0 3 ? 00:00:00 ksoftirqd\/0\r\nsystem_u:system_r:kernel_t:s0 5 ? 00:00:00 kworker\/0:0H\r\nsystem_u:system_r:kernel_t:s0 7 ? 00:00:00 migration\/0\r\nsystem_u:system_r:kernel_t:s0 8 ? 00:00:00 rcu_bh\r\n...<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Zmienne SELinux boolean.<\/span><\/p>\n<p>Zmienne boolean to prze\u0142\u0105czniki w\u0142\u0105cz\/wy\u0142\u0105cz u\u017cywane przez SELinux do okre\u015blania czy dane zdarzenie powinno by\u0107 dozwolone. Zmienne te pozwalaj\u0105 na natychmiastow\u0105 aktywacj\u0119 lub dezaktywacj\u0119 okre\u015blonej zasady (regu\u0142y) w polityce SELinux bez potrzeby rekompilacji czy prze\u0142adowania SELinux. Warto\u015bci zmiennych boolean sk\u0142adowane s\u0105 w katalogu <code> <i>\/sys\/fs\/selinux\/booleans<\/i><\/code>.<\/p>\n<pre> # ll \/sys\/fs\/selinux\/booleans\r\n-rw-r--r--. 1 root root 0 Nov 11 19:47 abrt_anon_write\r\n-rw-r--r--. 1 root root 0 Nov 11 19:47 abrt_handle_event\r\n-rw-r--r--. 1 root root 0 Nov 11 19:47 abrt_upload_watch_anon_write\r\n.....<\/pre>\n<p>Wy\u015bwietlanie warto\u015bci zmiennych boolean:<\/p>\n<pre># getsebool -a\r\n\r\nabrt_anon_write --&gt; off\r\nabrt_handle_event --&gt; off\r\nabrt_upload_watch_anon_write --&gt; on\r\nantivirus_can_scan_system --&gt; off\r\nantivirus_use_jit --&gt; off\r\n.......<\/pre>\n<p>lub<\/p>\n<pre># sestatus \u2013b\r\n....\r\nPolicy booleans:\r\nabrt_anon_write off\r\nabrt_handle_event off\r\nabrt_upload_watch_anon_write on\r\n....<\/pre>\n<p>lub<\/p>\n<pre># semanage boolean -l \r\n\r\nZmienna logiczna SELinuksa Stan Domy\u015blnie Opis\r\nprivoxy_connect_any (w\u0142\u0105czone,w\u0142\u0105czone) Aby ustali\u0107, czy privoxy mo\u017ce \u0142\u0105czy\u0107 ze wszystkimi portami TCP.\r\nsmartmon_3ware (wy\u0142\u0105czone,wy\u0142\u0105czone) Aby ustali\u0107, czy smartmon mo\u017ce obs\u0142ugiwa\u0107 urz\u0105dzenia na kontrolerach 3ware.\r\nmpd_enable_homedirs (wy\u0142\u0105czone,wy\u0142\u0105czone) Aby ustali\u0107, czy mpd mo\u017ce przeszukiwa\u0107 katalogi domowe u\u017cytkownik\u00f3w.\r\nxdm_sysadm_login (wy\u0142\u0105czone,wy\u0142\u0105czone) Aby zezwoli\u0107 programowi logowania graficznego na logowanie bezpo\u015brednio jako sysa\r\ndm_r:sysadm_t<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0106wiczenie. Zmiana warto\u015bci zmiennych boolean.<\/p>\n<p>1. Sprawdzenie warto\u015bci zmiennych boolean zwi\u0105zanych z ftp.<\/p>\n<pre># getsebool -a | grep ftp.<\/pre>\n<p>Zmienna, kt\u00f3ra zwi\u0105zana jest z anonimowym zapisem ftp:<code> ftpd_anon_write<\/code><br \/>\njest ustawiona na off.<\/p>\n<p>2. Prze\u0142\u0105czenie zmiennej.<\/p>\n<pre># setsebool ftpd_anon_write on<\/pre>\n<p>3. Sprawdzenie zmiennej.<\/p>\n<pre># getsebool ftpd_anon_write<\/pre>\n<p>lub<\/p>\n<pre class=\"\"># semanage boolean -l | grep ftpd_anon\r\nftpd_anon_write (w\u0142\u0105czone,wy\u0142\u0105czone) Allow ftpd to anon write<\/pre>\n<p>Zmienna ustawiona jest na <em>on<\/em> ale takie ustawienie nie jest permanentne, domy\u015blne.<\/p>\n<p>4. Ustawienie domy\u015blne na <em>on<\/em>.<\/p>\n<pre># setsebool -P ftpd_anon_write on<\/pre>\n<p>5. Sprawdzenie.<\/p>\n<pre class=\"\"># semanage boolean -l | grep ftpd_anon\r\nftpd_anon_write (w\u0142\u0105czone,w\u0142\u0105czone) Allow ftpd to anon write<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Przegl\u0105danie i analizowanie log\u00f3w SELinux.<\/span><\/p>\n<p>SELinux generuje alerty zar\u00f3wno w trybie <em>enforcing<\/em> jak i <em>permissive<\/em>. Je\u017celi demon auditd jest uruchomiony logi\u00a0 zapisywane s\u0105 do pliku <i>\/var\/log\/audit\/audit.log. <\/i>Je\u017celi demon nie jest uruchomiony to logi trafiaj\u0105 do pliku <i>\/var\/log\/messages.<\/i> Logi zwi\u0105zane z odmow\u0105 wykonania jakiej\u015b akcji maj\u0105 etykiet\u0119 AVC (Access Vector Cache).<\/p>\n<p>Przyk\u0142ad logu\u00a0 <i>\/var\/log\/audit\/audit.log <\/i>z odmow\u0105 wykonania akcji przez SELinux:<\/p>\n<pre>type=AVC msg=audit(1415936299.844:2602): avc: denied { create } for pid=22320 comm=\"passwd\" name=\"nshadow\"\r\nscontext=unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:etc_t:s0 tclass=file<\/pre>\n<p>Koresponduj\u0105cy log\u00a0 <i>\/var\/log\/messages<\/i>:<\/p>\n<pre>messages:Nov 13 22:38:21 server1 setroubleshoot: SELinux is preventing \/usr\/bin\/passwd from create access on the file. For\r\ncomplete SELinux messages. run sealert -l 7720f534-79c4-488f-9e8a-56645f070ca1<\/pre>\n<p>Komunikat sugeruje skorzystanie z komendy <em>sealert<\/em> aby uzyska\u0107 bardziej szczeg\u00f3\u0142owe informacje.<\/p>\n<pre># sealert \u2013l 7720f534-79c4-488f-9e8a-56645f070ca1\r\nSELinux is preventing \/usr\/bin\/passwd from create access on the file.\r\n***** Plugin catchall_labels (83.8 confidence) suggests *******************\r\nIf you want to allow passwd to have create access on the file, then you need to change the label on $FIX_TARGET_PATH\r\nDo\r\n# semanage fcontext -a -t FILE_TYPE '$FIX_TARGET_PATH'\r\nwhere FILE_TYPE is one of the following: faillog_t, krb5_host_rcache_t, lastlog_t, passwd_file_t, shadow_t.\r\nThen execute:\r\nrestorecon -v '$FIX_TARGET_PATH'\r\n***** Plugin catchall (17.1 confidence) suggests **************************\r\nIf you believe that passwd should be allowed create access on the file by default. Then you should report this as a bug. You can\r\ngenerate a local policy module to allow this access. Do allow this access for now by executing:\r\n# grep passwd \/var\/log\/audit\/audit.log | audit2allow -M mypol\r\n# semodule -i mypol.pp\r\nAdditional Information:\r\nSource Context unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023\r\nTarget Context system_u:object_r:etc_t:s0\r\nTarget Objects [ file ]\r\nSource passwd\r\nSource Path \/usr\/bin\/passwd\r\nPort &lt;Unknown&gt;\r\nHost &lt;Unknown&gt;\r\nSource RPM Packages passwd-0.79-4.el7.x86_64\r\n....<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Instalacja wi\u0119kszej ilo\u015bci dokumentacji zwi\u0105zanej z SELinux.<\/span><\/p>\n<p>1. Wpisz:<\/p>\n<pre># man -k _selinux.<\/pre>\n<p>Zobaczysz najprawdopodobniej jedn\u0105 lub dwie dokumentacje man.<\/p>\n<p>2. Wyszukanie pakiet\u00f3w RPM, kt\u00f3re zawieraj\u0105 binarki sepolicy.<\/p>\n<pre># yum whatprovides *\/sepolicy.<\/pre>\n<p>Znaleziono: <em>policycoreutils-devel<\/em>.<\/p>\n<p>3. Instalacja tego pakietu.<\/p>\n<pre># yum -y install policycoreutils-devel<\/pre>\n<p>4. Instalacja dokumentacji man.<\/p>\n<pre># sepolicy manpage -a -p \/usr\/share\/man\/man8<\/pre>\n<p>5. Na razie brak zmian.<\/p>\n<pre># man -k _selinux<\/pre>\n<p>6. Aktualizacja bazy dokumentacji man.<\/p>\n<pre># mandb<\/pre>\n<p>7. Teraz dokumentacji odno\u015bnie SELinux jest wi\u0119cej.<\/p>\n<pre># man -k _selinux<\/pre>\n<p>8. Wyszukanie dokumentacji man odno\u015bnie np. SELinux i us\u0142ugi httpd.<\/p>\n<pre># man -k _selinux | grep http<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Security Enhanced Linux (SELinux) jest implementacj\u0105 architektury MAC (Mandatory Access Control &#8211; Obligatoryjna Kontrola Dost\u0119pu) stworzon\u0105 przez ameryka\u0144skie NSA i spo\u0142eczno\u015b\u0107 Linuxa. SELinux jest zintegrowany z j\u0105drem Linuxa jako zbi\u00f3r \u0142at, wykorzystuj\u0105cy framework LSM (Linux Security Modules), kt\u00f3ry zreszt\u0105 wspiera wiele rozwi\u0105za\u0144 security. MAC zapewnia dodatkow\u0105 wzgl\u0119dem standardowej architektury DAC (Discretionary Access Control) warstw\u0119 ochrony. &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/miro.borodziuk.eu\/index.php\/2017\/06\/13\/selinux\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;SELinux&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1336,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[46,49],"tags":[],"_links":{"self":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/1339"}],"collection":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1339"}],"version-history":[{"count":52,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/1339\/revisions"}],"predecessor-version":[{"id":1442,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/1339\/revisions\/1442"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media\/1336"}],"wp:attachment":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/categories?post=1339"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/tags?post=1339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}