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ä.

Oikeudet

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)

Oikeudet

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