Linuxin käyttöoikeudet
Perusoikeudet
Linuxissa tiedostojen ja hakemistojen perusoikeudet jakautuvat käyttäjälle (omistaja), ryhmälle ja muille. Oikeustyyppejä ovat luku (read), kirjoitus (write) ja suoritus (execute). Oikeuksia voidaan muokata chmod-komennolla antamalla oikeudet joko numeraalina arvona tai määritteenä.

Asetetaan käyttäjälle kaikki oikeudet 7 (4+2+1), ryhmälle luku- ja suoritusoikeudet 5 (4+1), ja muille ei mitään oikeuksia 0.
Oikeuksia voidaan muokata myös määritteinä u (käyttäjä), g (ryhmä), o (muut) ja a (all), jossa + lisää, - poistaa ja = määrittelee oikeudet uudelleen.
ls -l -komennolla näkyviin tuleva tulosteen ensimmäinen arvo voi olla -, b, c, d, l, p tai s.
- tarkoittaa tavallista tiedostoa, b lohkolaitetta, c merkkilaitetta, d hakemistoa,
l symbolista linkkiä, p nimettyä putkea ja s socketia.
antti@centos $ chmod 750 tiedosto antti@centos $ ls -l total 0 -rwxr-x--- 1 antti antti 0 Nov 25 12:57 tiedosto antti@centos $ chmod g+w tiedosto antti@centos $ ls -l total 0 -rwxrwx--- 1 antti antti 0 Nov 25 12:57 tiedosto antti@centos $ chmod o+r,u-r tiedosto antti@centos $ ls -l total 0 --wxrwxr-- 1 antti antti 0 Nov 25 12:57 tiedosto
Yksi huomioitava asia Linuxissa on kansioiden mahdollistamat tietyt oikeudet. root luo käyttäjän kotikansioon tiedoston, minkä omistajaksi ja ryhmäksi tulee root. Vaikka käyttäjä ei voi muokata tiedostoa tai sen oikeuksia, niin tämä ei kuitenkaan estä kotihakemiston omistajaa poistamasta tiedostoa.
root@centos # pwd /home/antti root@centos # ls -ld drwx------ 3 antti antti 116 Nov 26 17:52 . root@centos # touch tiedosto root@centos # ls -l -rw-r--r-- 1 root root 0 Nov 27 11:51 tiedosto antti@centos $ rm tiedosto rm: remove write-protected regular empty file ‘tiedosto’? y
Erikoisoikeudet
Linuxissa muutama erikoisoikeus. Set user ID, set group ID ja sticky bit. SUID:llä voidaan antaa käyttäjälle omistajan oikeudet suoritettaessa tiedostoa/ohjelmaa/komentoa. SGID toimii samalla periaatteella kuin SUID, mutta SGID:llä voidaan asettaa myös oikeuksien periytyminen kansiossa. SGID on oleellinen asetus asetettaessa quota-rajoituksia ryhmälle. Jos SGID:tä ei ole asetettu, niin quota-rajat eivät toimi. Sticky bitillä voidaan antaa kaikille käyttäjille oikeudet hakemistoon, mutta vain tiedoston/hakemiston omistaja/root voivat poistaa tiedoston tai hakemiston. Esimerkiksi /tmp -hakemistoon on asetettu sticky bit. Oikeudet voidaan antaa chmod -kommenolla joko määritteenä (chmod u+s) tai käyttämällä neljättä lukuarvoa (chmod 4750)

Jos sticky bit ja SU(G)ID näkyy isona (T/S), niin tiedostossa ei ole suoritusoikeutta käyttäjälle tai ryhmälle.
antti@centos $ ls -l total 0 -rwxr----- 1 antti antti 0 Nov 25 12:57 tiedosto antti@centos $ chmod 3740 tiedosto antti@centos $ ls -l total 0 -rwxr-S--T 1 antti antti 0 Nov 25 12:57 tiedosto antti@centos $ chmod 3751 tiedosto antti@centos $ ls -l total 0 -rwxr-s--t 1 antti antti 0 Nov 25 12:57 tiedosto
Käyttäjät antti ja heikki kuuluvat sales-ryhmään ja heille on luotu sales-kansio, jonka omistaja on antti ja ryhmä sales. Kansiossa on kaikki oikeudet käyttäjälle ja ryhmälle. Kun heikki luo kansioon tiedoston, tiedoston omistajaksi ja ryhmäksi tulee heikki. Asetetaan sales-kansioon SGID ja luodaan tiedosto2, jolloin luotu tiedosto perii sales-kansion mukaisen ryhmän.
heikki@centos $ ls -l total 0 drwxrwxr-x 2 antti sales 0 Nov 25 10:55 sales heikki@centos $ touch sales/tiedosto heikki@centos $ ls -l sales/ total 0 -rw-rw-r-- 1 heikki heikki 0 Nov 27 11:06 tiedosto antti@centos $ chmod 2775 sales/ antti@centos $ ls -l total 0 drwxrwsr-x 2 antti sales 21 Nov 27 11:06 sales heikki@centos $ touch sales/tiedosto2 heikki@centos $ ls -l sales/ total 0 -rw-rw-r-- 1 heikki heikki 0 Nov 27 11:06 tiedosto -rw-rw-r-- 1 heikki sales 0 Nov 27 11:11 tiedosto2
/tmp -hakemistossa näkyy sticky bit kaikkien oikeuksissa. passwd -komento on esimerkki SUID:stä. Tavallisella käyttäjällä ei ole oikeutta /etc/shadow -tiedostoon, mutta käyttäjä tarvitsee oikeudet salasanan vaihtoon ja tämän vuoksi passwd -komento ajetaan root-oikeuksilla.
antti@centos $ ls -ld /tmp/ drwxrwxrwt. 8 root root 4096 Nov 26 12:32 /tmp/ antti@centos $ ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
Linuxissa umask määrittelee oletusoikeudet luodessa uusia tiedostoja. Linux ei oletuksena aseta suoritusoikeuksia (eikä erikoisoikeuksia) tiedostoille (0777-0111=0666), joten oikeudet muodostuu vähentämällä luku- ja kirjoitusoikeuksista umask. Esimerkiksi käyttäjällä (0666-0002=0664)
root@centos # umask 0022 antti@centos $ umask 0002 antti@centos $ touch tiedosto antti@centos $ ls -l total 4 -rw-rw-r-- 1 antti antti 0 Nov 27 12:18 tiedosto
Pääsylistat
Pääsylistoilla, Access Control List (ACL) voidaan asettaa oikeuksia useille eri ryhmille ja käyttäjille. ACL on tiedostojärjestelmäriippuvainen, eikä kaikki tiedostojärjestelmät tue pääsylistoja. ls -komento ei ymmärrä pääsylistoja. Tulosteen viimeinen + -merkki kertoo erikoisoikeuksista, jolloin oikeudet voi tarkastaa getfacl -komennolla. setfacl -komennnolla voidaan muuttaa oikeuksia. Muokataan pääsylistaa niin, että data-ryhmä saa kaikki oikeudet jako -kansioon ja alihakemistoihin. Oikeuksien muokkauksen jälkeen ls -komento näyttää ryhmälle kaikkia oikeuksia, mutta getfacl osoittaa, että ryhmällä on vain luku- ja suoritusoikeudet, mutta data-ryhmällä kaikki oikeudet.
root@centos # ls -ld jako drwxr-xr-- 4 root sales 29 Nov 27 18:49 jako root@centos # setfacl -R -m g:data:rwx jako root@centos # ls -ld jako drwxrwxr--+ 2 root sales 6 Nov 26 12:09 jako root@centos # getfacl jako # file: jako # owner: root # group: sales user::rwx group::r-x group:data:rwx mask::rwx other::r--
Käyttäjät antti ja heikki kuuluvat kumpikin sales-ryhmään, mutta vain heikki kuuluu data-ryhmään. Vaikka jako-kansion ryhmä on sales, niin vain data-ryhmällä on kaikki oikeudet kansioon.
heikki@centos $ id heikki uid=1001(heikki) gid=1003(heikki) groups=1003(heikki),1002(consult),1004(sales),1005(data) heikki@centos $ touch tiedosto antti@centos $ id antti uid=1000(antti) gid=1000(antti) groups=1000(antti),1001(staff),1004(sales) antti@centos $ touch tiedosto2 touch: cannot touch ‘tiedosto2’: Permission denied
Yksi huomioitava asia on x ja X asetusten ero. x asettaa suoritusoikeuden myös tiedostoille, kun taas X asettaa suoritusoikeuden vain kansioille. Suoritusoikeus tiedostoille oletuksena on huono idea, mutta kansiolle usein hyödyllinen, koska sisällönlistaus on riippuinen kansion suoritusoikeudesta. Esimerkissä sticky bit näkyy # flags -kentässä.
root@centos # ls -l total 0 drwxrwsr-x 2 heikki heikki 6 Nov 28 12:16 kansio -rw-rw-r-- 1 heikki heikki 0 Nov 28 12:13 tiedosto root@centos # setfacl -R -m g::rwX . root@centos # getfacl tiedosto # file: tiedosto # owner: heikki # group: sales user::rw- group::rw- other::r-- root@centos # getfacl kansio # file: kansio # owner: heikki # group: sales # flags: -s- user::rwx group::rwx other::r-x root@centos # setfacl -R -m g::rwx . root@centos # getfacl tiedosto # file: tiedosto # owner: heikki # group: sales user::rw- group::rwx other::r-- root@centos # getfacl kansio # file: kansio # owner: heikki # group: sales # flags: -s- user::rwx group::rwx other::r-x
d -optio asettaa oletusoikeudet kansiolle ja -nb -optio poistaa pääsylistat.
root@centos # setfacl -R -d -m o:rwx kansio root@centos # mkdir kansio/3 root@centos # getfacl kansio/3 # file: kansio/3 # owner: root # group: sales # flags: -s- user::rwx group::rwx other::rwx default:user::rwx default:group::rwx default:other::rwx root@centos # setfacl -nb kansio/3 # file: kansio/3 # owner: root # group: sales # flags: -s- user::rwx group::rwx other::rwx