RedHat 6.x / CentOS 6.x
Przy użyciu chmod poza przyznawaniem zwykłych uprawnień do odczytu, zapisu oraz egzekucji możemy określić kilka specjalnych uprawnień, zależnie od typu pliku. W systemie rezyduje spora ilość plików, które takie uprawnienia mają nadane defaultowo.
Do uprawnień o których mowa należą setUID, setGID, Restricted deletion flag lub sticky bit.
Weryfikacja uprawnień specjalnych
To czy plik lub katalog ma nadane uprawnienia specjalne widać w "długim" trybie listowania przy użyciu ls -l, lub aliasu dla komendy czyli ll.Obecność uprawnień objawia się obecnością innych niż znane nam "rwx" oznaczeń w liście atrybutów plików, np:
[root@centos67 ~]# ll -d /tmp/
drwxrwxrwt. 9 root root 4096 Sep 9 13:06 /tmp/
[root@centos67 ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
drwxrwxrwt. 9 root root 4096 Sep 9 13:06 /tmp/
[root@centos67 ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
Jak widać powyżej, w przypadku katalogu /tmp w sekcji "others" zamiast zwyczajowego x pojawia się litera t, z kolei dla pliku /usr/bin/passwd sekcja "owner" zawiera w miejscu flagi wykonalności literę s.
Poszczególne flagi oznaczają:
* s w sekcji "owner", czyli na 4 pozycji oznacza ustawioną flagę setUID (set User ID).
- Ustawiona dla pliku wykonywalnego, pozwala wszystkim użytkownikom uprawnionym do tego na wykonanie pliku z uprawnieniami użytkownika, do któego plik należy. Dobrym przykładem jest tu wspomniany wcześniej /usr/bin/passwd. Zmiana hasła użytkownika wychodzi poza jego zwykłe uprawnienia, ponieważ nie ma on dostępu do pliku /etc/shadow w którym to hasło jest przechowywane. Ustawienie flagi setUID pozwala na wykonanie tego polecenia z podwyższonymi uprawnieniami roota, który taki dostęp posiada. Oczywiście flaga ta nie zmienia ograniczeń dostępu do /etc/shadow.
- Ustawiona dla katalogu w większości systemów zostanie zignorowana.
* s w sekcji "group", czyli na 7 pozycji oznaczać będzie:
- dla pliu wykonywalnego analogicznie do sekcji owner oznacza setGID (set Group ID). Oczywiście pozwala na wykonanie polecenia z uprawnieniami grupy, do której dany plik należy. Bit ten jest np. ustawiony na pliku /usr/bin/wall, gdyż do zadziałania potrzebny jest dostęp do wszelkich terminali tty:
[root@centos67 ~]# ll /usr/bin/wall
-r-xr-sr-x. 1 root tty 15224 Jul 24 00:21 /usr/bin/wall
-r-xr-sr-x. 1 root tty 15224 Jul 24 00:21 /usr/bin/wall
- dla katalogu spowoduje, iż wszystkie elementy tworzone w takim katalogu (zarówno pliki jak i podkatalogi) będą utworzone z przynależnością grupową katalogu nadrzędnego:
[root@centos67 tmp]# ll -d test/
drwxrwsrwt. 2 test2 test2 4096 Sep 9 13:45 test/
[root@centos67 tmp]# touch test/test.txt
[root@centos67 tmp]# ll test/
total 0
-rw-r--r--. 1 root test2 0 Sep 9 13:59 test.txt
drwxrwsrwt. 2 test2 test2 4096 Sep 9 13:45 test/
[root@centos67 tmp]# touch test/test.txt
[root@centos67 tmp]# ll test/
total 0
-rw-r--r--. 1 root test2 0 Sep 9 13:59 test.txt
Jak widać pomimo utworzenia pliku przez użytkownika root, grupą pliku jest grupa test2, taka sama, jak nadrzędnego katalogu z ustawionym bitem setGID.
* t w sekcji "others", czyli na pozycji ostatniej:
- Ustawiona dla katalogu oznaczać będzie restricted deletion flag. Flaga ta ma na celu zablokowanie możliwości usunięcia lub zmiany nazwy plików w katalogu, chyba że użytkownik jest właścicielem tego pliku, lub właścicielem katalogu. Flaga ta jest stosowana w katalogach takich jak /tmp. Pliki w nim zawarte może usuwać jedynie ich właściciel lub root, jako właściciel katalogu, pomimo uprawnień do zapisu dla wszystkich użytkowników systemu.
- Ustawienie flagi dla pliku wykonywalnego w starszych wersjach systemów powodowało, iż kod tych programów po uruchomieniu był pozostawiany w partycji wymiany swap, co powodowało szybsze ładowanie się programu przy kolejnym jego wywołaniu.
W tym miejscu trzeba wspomnieć o jeszcze jednej sytuacji, którą możemy zaobserwować.
Dla niektórych plików czy katalogów, uprawnienia specjalne wyświetlane są jako małe litery, a dla niektórych jako wielkie. Sytuacja taka jest prosta do wytłumaczenia - uprawnienia specjalne wyświetlane są w miejscu bitu wykonywalności dla plików, co czyni go niewidocznym. Problem rozwiązano wyświetlając małe litery bitów specjanych dla plików, które posiadają ustawiony bit "x", a wielkie litery dla tych, które "x" nie posiadają.
Dodawanie i usuwanie uprawnień
Uprawnieniami specjalnymi zarządzamy w analogiczny sposób, co zwykłymi uprawnieniami "rwx".Mamy możliwość wybory czterech sekcji, w których dodamy uprawnienia, czyli:
* u - sekcja user
* g - sekcja group
* o - sekcja others
* a - sekcja all
Tak jak w przypadku uprawnień "rwx" możemy dodawać lub odejmować uprawnienia poprzez podanie ich symbolu (s lub t) poprzedzonego przez znak "+" lub "-".
[root@centos67 ~]# ll test.txt
-rw-r--r--. 1 root root 0 Sep 9 14:07 test.txt
[root@centos67 ~]# chmod u+s test.txt
[root@centos67 ~]# ll test.txt
-rwSr--r--. 1 root root 0 Sep 9 14:07 test.txt
[root@centos67 ~]# chmod o+t test.txt
[root@centos67 ~]# ll test.txt
-rwSr--r-T. 1 root root 0 Sep 9 14:07 test.txt
[root@centos67 ~]# chmod o-t test.txt
[root@centos67 ~]# ll test.txt
-rwSr--r--. 1 root root 0 Sep 9 14:07 test.txt
-rw-r--r--. 1 root root 0 Sep 9 14:07 test.txt
[root@centos67 ~]# chmod u+s test.txt
[root@centos67 ~]# ll test.txt
-rwSr--r--. 1 root root 0 Sep 9 14:07 test.txt
[root@centos67 ~]# chmod o+t test.txt
[root@centos67 ~]# ll test.txt
-rwSr--r-T. 1 root root 0 Sep 9 14:07 test.txt
[root@centos67 ~]# chmod o-t test.txt
[root@centos67 ~]# ll test.txt
-rwSr--r--. 1 root root 0 Sep 9 14:07 test.txt
Oczywiście możliwe jest również dodawanie bitów poprzez podanie ich wartości numerycznej. Wartość taka będzie odmiennie do zwykłych uprawnień liczbą czterocyfrową, w której to na pierwszym miejscu określamy bity specjalne, jako sumę wartości poszczególnych bitów:
* 4 - setUID
* 2 - setGID
* 1 - Restricted deletion lub Sticky bit
Wyszukiwanie plików z rozszerzonymi uprawnieniami
Niejednokrotnie użytkownicy systemu czy dostawcy aplikacji próbują przemycić pliki, które pozwolą im na zwiąkszenie uprawnień ich kont. Stwarza do spore zagrożenie dla naszego systemu, dlatego warto okresowo weryfikować, jakie pliki pozwalają na podniesienie uprawnień.Do takiej weryfikacji idealnie nadaje się polecenie find, oraz dedykowany do uprawnień przełącznik -perm.
Opierając się na sumach wartości poszczególnych bitów specjalnych wymienionych wcześniej, wyszukiwanie odbywać się może na trzy sposoby:
[test@centos67 tmp]$ find /bin -perm 4755
Dzięki poleceniu wyświetlimy wszystkie pliki z katalogu /bin, które posiadają uprawnienia równe 4755. Uprawnienia są weryfikowane dokładnie, więc pliki z jakąkolwiek inną wartością na którejkolwiek sekcji nie będą wyświetlone
[test@centos67 tmp]$ find /bin -perm -6000
W ten sposób (używając - przed wartością liczbową) wyświetlimy pliki, które posiadają ustawiony oba parametry setUID oraz setGID, bez względy na pozostałe sekcje.
[test@centos67 tmp]$ find /bin -perm /6000
Bodaj najprzydatniejszy sposób, to użycie / przed wartością. Wyświetli nam pliki, które posiadają ustawione jeden z bitów setUID lub setGID, albo oba te bity jednocześnie, bez względu na wartość pozostałych sekcji.
Jeśli chcecie rozwijać się zawodowo i szukacie dobrych kursów to polecam https://kursyzawodowe.pl/oferta/uprawnienia-sep-g1-g2-g3/g1-dozor/ sprawdźcie bo wydaje mi się, że to atrakcyjna oferta. Zapisujcie się od razu.
OdpowiedzUsuń