{"id":242,"date":"2017-03-13T19:36:00","date_gmt":"2017-03-13T18:36:00","guid":{"rendered":"http:\/\/miroslaw.borodziuk.eu\/?p=242"},"modified":"2017-06-15T17:11:20","modified_gmt":"2017-06-15T15:11:20","slug":"uprawnienia-specjalne","status":"publish","type":"post","link":"http:\/\/miro.borodziuk.eu\/index.php\/2017\/03\/13\/uprawnienia-specjalne\/","title":{"rendered":"Uprawnienia specjalne (setuid, setgid, sticky bit)"},"content":{"rendered":"<p>Linux oferuje trzy typy specjalnych uprawnie\u0144 bitowych, kt\u00f3re mog\u0105 by\u0107 ustawione na plikach i katalogach:<!--more--><\/p>\n<table style=\"width: 546px; height: 44px;\">\n<tbody>\n<tr>\n<td style=\"width: 84px;\"><code># setuid<\/code><\/td>\n<td style=\"width: 42px; text-align: center;\"><em><span style=\"color: #ff0000;\">4<\/span><\/em><\/td>\n<td style=\"width: 214.283px;\"><span style=\"color: #008000;\">set user identifier bit<\/span><\/td>\n<td style=\"width: 279.717px;\"><span style=\"color: #000000;\">bit identyfikatora u\u017cytkownika<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 84px;\"><code># setgid<\/code><\/td>\n<td style=\"width: 42px; text-align: center;\"><em><span style=\"color: #ff0000;\">\u00a02<\/span><\/em><\/td>\n<td style=\"width: 214.283px;\"><span style=\"color: #008000;\">set group identifier bit <\/span><\/td>\n<td style=\"width: 279.717px;\"><span style=\"color: #000000;\">bit identyfikatora grupy<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 84px;\"><code># sticky<\/code><\/td>\n<td style=\"width: 42px; text-align: center;\"><em><span style=\"color: #ff0000;\">\u00a01<\/span><\/em><\/td>\n<td style=\"width: 214.283px;\"><span style=\"color: #008000;\">sticky bit <\/span><\/td>\n<td style=\"width: 279.717px;\"><span style=\"color: #000000;\">klej\u0105cy bit<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Bit setuid na plikach wykonywalnych<\/span><\/p>\n<p>Flaga <em>setuid<\/em> jest ustawiana na plikach wykonywalnych na poziomie w\u0142a\u015bciciela pliku. Plik wykonywalny z ustawionym bitem <em>setuid<\/em> jest wykonywany przez zwyk\u0142ych u\u017cytkownik\u00f3w z takimi przywilejami jakie posiada w\u0142a\u015bciciel pliku. Najcz\u0119\u015bciej spotykanym przyk\u0142adem jest komenda <em>su<\/em>, kt\u00f3rej w\u0142a\u015bcicielem jest root. Komenda ta ma domy\u015blnie ustawiony bit <em>setuid<\/em>.<\/p>\n<pre># ll \/usr\/bin\/su \r\n-rwsr-xr-x. 1 root root 32072 2016-08-02\u00a0 \/usr\/bin\/su<\/pre>\n<p>Gdy zwyk\u0142y u\u017cytkownika wykonuje t\u0105 komend\u0119 zostania ona uruchomiona tak jak gdyby root (w\u0142a\u015bciciel) j\u0105 uruchomi\u0142.<\/p>\n<p>Komenda <em>su<\/em> (switch user) pozwala u\u017cytkownikowi na prze\u0142\u0105czenie si\u0119 na konto innego u\u017cytkownika pod warunkiem, \u017ce zna on has\u0142o tego innego u\u017cytkownika.<\/p>\n<p>Usu\u0144my bit setuid z polecenia su:<\/p>\n<pre># chmod u-s \/usr\/bin\/su \r\n# ll \/usr\/bin\/su \r\n-rwxr-xr-x. 1 root root 32072 2016-08-02\u00a0 \/usr\/bin\/su<\/pre>\n<p>Plik jest wci\u0105\u017c wykonywalny ale nie ma bitu setuid (s), b\u0119dzie to zapobiega\u0107 przed prze\u0142\u0105czaniem si\u0119 zwyk\u0142ych u\u017cytkownik\u00f3w na konta innych u\u017cytkownik\u00f3w tak jakby utracili specjalne uprawnienia:<\/p>\n<pre><code> $ su \u2013<\/code> <code>Password:<\/code> <code>su: Authentication failure<\/code><\/pre>\n<p>U\u017cytkownik otrzymuje komunikat o braku mo\u017cliwo\u015bci autentykacji pomimo, \u017ce wpisa\u0142 prawid\u0142owe has\u0142o.<\/p>\n<p>Zresetujmy teraz bit setuid na komendzie <em>su<\/em>:<\/p>\n<pre># chmod 4755 \/usr\/bin\/su \r\n# ll \/usr\/bin\/su \r\n-rwsr-xr-x. 1 root root 32072 2016-08-02\u00a0 \/usr\/bin\/su<\/pre>\n<p>Mo\u017cemy to zrobi\u0107 korzystaj\u0105c tak\u017ce z notacji symbolicznej:<\/p>\n<pre> # chmod u+s \/usr\/bin\/su<\/pre>\n<p>Mo\u017cemy przeszuka\u0107 wszystkie pliki naszego systemu w poszukiwaniu plik\u00f3w posiadaj\u0105cych ustawiony bit <em>setuid<\/em>:<\/p>\n<pre># find \/ \u2013perm \u20134000 \r\n\/usr\/bin\/fusermount \r\n\/usr\/bin\/umount \r\n\/usr\/bin\/mount \r\n\/usr\/bin\/chage \r\n\/usr\/bin\/gpasswd \r\n\/usr\/bin\/newgrp \r\n\/usr\/bin\/chfn \r\n\/usr\/bin\/chsh \r\n\/usr\/bin\/su \r\n\/usr\/bin\/pkexec \r\n\/usr\/bin\/crontab \r\n. . .<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Bit setgid na plikach wykonywalnych<\/span><\/p>\n<p>Bit setgid ustawiany jest na plikach wykonywalnych na poziomie grupy. Z ustawionym bitem setgid plik jest wykonywany przez u\u017cytkownik\u00f3w, kt\u00f3rzy nie s\u0105 jego w\u0142a\u015bcicielami, z przywilejami u\u017cytkownik\u00f3w nale\u017c\u0105cych do grupy.<\/p>\n<p>Przyk\u0142adem programu z ustawionym bitem<em> setgid<\/em> jest <em>wall<\/em>, kt\u00f3rego w\u0142a\u015bcicielem jest root a grupa, do kt\u00f3rej nale\u017cy to<em> tty<\/em>.<\/p>\n<pre># ll \/usr\/bin\/wall \r\n-r-xr-sr-x. 1 root tty 15344 Jan 27 2014 \/usr\/bin\/wall<\/pre>\n<p>Wall to program, kt\u00f3ry rozg\u0142asza komunikaty wszystkim zalogowanym u\u017cytkownikom i drukuje je na terminalach u\u017cytkownik\u00f3w.<\/p>\n<pre> $ wall Hello, this is to test the setgid flag on the wall command Broadcast message from user1@host1.example.com (pts\/0) (Mon Dec 1 11:26:24 2014): Hello, this is to test the setgid flag on the wall command<\/pre>\n<p>Usu\u0144my bit setgid z<code> \/usr\/bin\/wall<\/code>:<\/p>\n<pre># chmod g-s \/usr\/bin\/wall \r\n-r-xr-xr-x. 1 root tty 15344 Jan 27 2014 \/usr\/bin\/wall<\/pre>\n<p>U\u017cytkownicy, kt\u00f3rzy nie s\u0105 w\u0142a\u015bcicielem programu <em>wall<\/em> (wszyscy poza rootem) utracili teraz przywilej rozg\u0142aszania komunikat\u00f3w.<\/p>\n<p>Przypiszmy z powrotem bit setgid:<\/p>\n<pre># chmod 2555 \/usr\/bin\/wall \r\n# ll \/usr\/bin\/wall -r-xr-sr-x. 1 root tty 15344 Jan 27 2014 \/usr\/bin\/wall<\/pre>\n<p>lub notacja symboliczna:<\/p>\n<pre> # chmod g+s \/usr\/bin\/wall<\/pre>\n<p>Przeszukajmy nasz system w poszukiwaniu plik\u00f3w z ustawionym bitem setgid:<\/p>\n<pre># find \/ \u2013perm \u20132000 \r\n\/run\/log\/journal \r\n\/run\/log\/journal\/03858cff4a7b482e8b70a7cea28585b5 \r\n\/usr\/bin\/wall \r\n\/usr\/bin\/write \r\n\/usr\/bin\/ssh-agent \r\n\/usr\/bin\/locate \r\n\/usr\/sbin\/netreport \r\n...<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Bit setgid na wsp\u00f3\u0142dzielonych katalogach<\/span><\/p>\n<p>Bit setgid mo\u017ce by\u0107 ustawiany na katalogach wsp\u00f3\u0142dzielonych przez grup\u0119 aby pliki i podkatalogi automatycznie dziedziczy\u0142y grup\u0119 przypisan\u0105 do katalogu. Cz\u0142onkowie grupy, kt\u00f3ra wsp\u00f3\u0142dzieli dany katalog nie musz\u0105 dzi\u0119ki temu r\u0119cznie\u00a0 zmienia\u0107 grupy na ka\u017cdym nowo utworzonym pliku lub katalogu.<\/p>\n<p>&nbsp;<\/p>\n<p>\u0106wiczenie.<\/p>\n<p>1. Dodaj grup\u0119 <em>sdatagrp<\/em> z GID 9999 :<\/p>\n<pre># groupadd \u2013g 9999 sdatagrp<\/pre>\n<p>2. Uczy\u0144 u\u017cytkownik\u00f3w <em>user100<\/em> i <em>user200<\/em> cz\u0142onkami grupy <em>sdatagrp<\/em>:<\/p>\n<pre># usermod \u2013G sdatagrp user100\r\n# usermod \u2013G sdatagrp user200<\/pre>\n<p>3. Utw\u00f3rz katalog<code> \/sdata<\/code>:<\/p>\n<pre># mkdir \/sdata<\/pre>\n<p>4. Dla katalogu<code> \/sdata<\/code> w\u0142a\u015bcicielem ma by\u0107 root a grup\u0105 <em>sdatagrp<\/em>:<\/p>\n<pre># chown root:sdatagrp \/sdata \u2013v\r\nchanged ownership of \u2018\/sdata\u2019 from root:root to root:sdatagrp<\/pre>\n<p>5. Ustaw bit <em>setgid<\/em> na katalogu <code>\/sdata<\/code>:<\/p>\n<pre><code># chmod g+s \/sdata \u2013v\r\nmode of \u2018\/sdata\u2019 changed from 0755 (rwxr-xr-x) to 2755 (rwxr-sr-x<\/code><\/pre>\n<p>6. Zweryfikuj atrybuty ustawione w powy\u017cszych krokach:<\/p>\n<pre><code># ll \u2013d \/sdata\r\ndrwxrws---. 2 root sdatagrp 18 Dec 1 14:06 \/sdata<\/code><\/pre>\n<p>7. Prze\u0142\u0105cz si\u0119 lub zaloguj jako <em>user100<\/em> i wejd\u017a do katalogu <code>\/sdata<\/code>:<\/p>\n<pre><code># su \u2013 user100 ; cd \/sdata<\/code><\/pre>\n<p>8. Utw\u00f3rz plik i wylistuj go:<\/p>\n<pre># touch file1\r\n# ls \u2013l file1\r\n-rw-rw-r--. 1 user100 sdatagrp 0 Dec 1 14:06 file1<\/pre>\n<p>Obaj cz\u0142onkowie grupy mog\u0105 teraz tworzy\u0107 i modyfikowa\u0107 pliki w katalogu <code>\/sdata<\/code>. B\u0119d\u0105 oni w\u0142a\u015bcicielami plik\u00f3w ale b\u0119d\u0105 one przynale\u017ce\u0107 do grupy sdatagrp.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Klej\u0105cy bit w katalogach dost\u0119pnych publicznie<\/span><\/p>\n<p>Klej\u0105cy bit ustawiany jest w katalogach, w kt\u00f3rych wszyscy u\u017cytkownicy mog\u0105 zapisywa\u0107 dane aby zabezpieczy\u0107 pliki i podkatalogi nale\u017c\u0105ce do zwyk\u0142ych u\u017cytkownik\u00f3w przed skasowaniem lub przeniesieniem przez innych u\u017cytkownik\u00f3w.<\/p>\n<p>Ten atrybut ustawiony jest na katalogu <code>\/tmp<\/code> i <code>\/var\/tmp<\/code>:<\/p>\n<pre># ll -d \/tmp \/var\/tmp\r\n drwxrwxrwt. 12 root root 4096 03-13 21:29 \/tmp\r\n drwxrwxrwt.\u00a0 6 root root 4096 03-13 21:29 \/var\/tmp<\/pre>\n<p>Do ustawiania tego atrybutu mo\u017cna u\u017cywa\u0107 polecenia <em>chmod<\/em>:<\/p>\n<pre># ll -d \/var \r\ndrwxr-xr-x. 24 root root 4096 03-12 03:52 \/var # chmod 1755 \/var -v uprawnienia do \u201e\/var\u201d zmienione z 0755 (rwxr-xr-x) na 1755 (rwxr-xr-t) # ll -d \/var drwxr-xr-t. 24 root root 4096 03-12 03:52 \/var<\/pre>\n<p>Notacja symboliczna:<\/p>\n<pre># chmod o+t \/var<\/pre>\n<p>Usuwanie klej\u0105cego bitu:<\/p>\n<pre><code>#<\/code>chmod 755 \/var mode of \u2018\/var\u2019 changed from 1755 (rwxr-xr-t) to 0755 (rwxr-xr-x) # chmod o-t \/var<\/pre>\n<p>Wyszukiwanie w systemie plik\u00f3w z ustawionym klej\u0105cym bitem:<\/p>\n<pre># find \/ \u2013type d \u2013perm \u20131000 \r\n\/dev\/mqueue \r\n\/dev\/shm \r\n\/tmp \r\n\/tmp\/.X11-unix \r\n\/tmp\/.ICE-unix \r\n\/tmp\/.XIM-unix \r\n\/tmp\/.font-unix \r\n\/tmp\/.Test-unix \r\n\/tmp\/systemd-private-vPX96e\r\n\/tmp \r\n...<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Linux oferuje trzy typy specjalnych uprawnie\u0144 bitowych, kt\u00f3re mog\u0105 by\u0107 ustawione na plikach i katalogach:<\/p>\n","protected":false},"author":1,"featured_media":269,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30],"tags":[],"_links":{"self":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/242"}],"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=242"}],"version-history":[{"count":25,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/242\/revisions"}],"predecessor-version":[{"id":1394,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/242\/revisions\/1394"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media\/269"}],"wp:attachment":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media?parent=242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/categories?post=242"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/tags?post=242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}