Czy wiesz o tym, że katalog /tmp w Linuxie ma w specjalny sposób zdefiniowane uprawnienia? Owszem każdy może w tym katalogu pisać, ale wzajemna modyfikacja plików przez użytkowników z tej samej grupy nie działa. W sumie ma to sens, bo gdyby w takim /tmp każdy mógł robić wszystko, to zrobiłby się niezły bałagan.
Najpierw przyjrzyjmy się jak to działa w „normalnych katalogach”:
rafal@fermat:~$ sudo mkdir /home/shared rafal@fermat:~$ sudo chmod 777 /home/shared
Teraz „stajemy się użytkownikiem user2, który ma swoją własną grupę user2:
rafal@fermat:~$ sudo su - user2 $ id uid=1002(user2) gid=1002(user2) groups=1002(user2) $ cat >> /home/shared/test.txt my test user2 $ ls -l /home/shared/test.txt -rw-rw-r-- 1 user2 user2 14 maj 20 11:26 /home/shared/test.txt
Teraz spróbujemy ten plik zmodyfikować. Modyfikację wykona użytkownik user1, który jest też członkiem grupy user2:
rafal@fermat:~$ sudo su - user1 $ id uid=1001(user1) gid=1001(user1) groups=1001(user1),1002(user2) $ cat >> /home/shared/test.txt my test user 1 $ ls -l /home/shared/test.txt -rw-rw-r-- 1 user2 user2 29 maj 20 11:27 /home/shared/test.txt
Jak widać zmiana się udała. To teraz zobaczmy jak to zadziała w katalogu tmp z ustawionym sticky bit. Do akcji wracza znowu user2:
rafal@fermat:~$ sudo su - user2 $ cat >> /tmp/test.txt my test user2 $ ls -l /tmp/test.txt -rw-rw-r-- 1 user2 user2 14 maj 20 11:29 /tmp/test.txt $ ls -ld /tmp drwxrwxrwt 24 root root 12288 maj 20 11:29 /tmp
Teraz modyfikacje próbuje wykonać user 1 – bez sukcesu:
rafal@fermat:~$ sudo su - user1 $ cat >> /tmp/test.txt -sh: 1: cannot create /tmp/test.txt: Permission denied