Moduuli 3 · 3.1
Käyttäjät, ryhmät ja tiedosto-oikeudet
Moduuli 3: Käyttäjät, oikeudet ja sudo · Lukuaika: 12 minuuttia
Tavoite: Tämän oppitunnin jälkeen osaat luoda ja tarkastella käyttäjiä ja ryhmiä, lukea tiedoston tai kansion oikeudet ls -l-tulosteesta sekä asettaa ne oikein chmod- ja chown-komennoilla avaamatta kaikkea kaikille.
Keskeiset käsitteet: root (UID 0), tavallinen käyttäjä, järjestelmäkäyttäjä, /etc/passwd, /etc/shadow, ryhmä, adduser, id, rwx, omistaja, ryhmä, muut, oktaaliluku (644, 755, 600), chmod, chown, umask, setuid, 777
Jokainen on numero
Linux on alusta asti rakennettu usealle käyttäjälle samalla koneella. Jokainen käynnissä oleva prosessi toimii jonkin käyttäjän nimissä, ja jokaisella tiedostolla on omistaja. Järjestelmälle käyttäjä on ennen kaikkea numero, UID:
- root on UID 0. Root saa tehdä kaiken: lukea ja muuttaa mitä tahansa tiedostoa, pysäyttää minkä tahansa palvelun ja luoda minkä tahansa käyttäjän. Mitään "oletko varma?" -kysymystä ei tule.
- Tavalliset käyttäjät, kuten
anna, saavat Debianissa ja Ubuntussa UID:n 1000:sta ylöspäin. He saavat kirjoittaa omaan kotikansioonsa, mutta muuten vain vähän. - Järjestelmäkäyttäjillä on pieni numero, eikä heillä yleensä ole salasanaa eikä komentotulkkia. Palvelut toimivat tällaisen käyttäjän alla: nginx käyttäjänä
www-data, PostgreSQL käyttäjänäpostgres. Jos tällainen palvelu murretaan, tunkeutujalla on vain kyseisen käyttäjän oikeudet, ei rootin.
Kuka olet, näet komennolla id:
anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)Annan UID on 1000, hänellä on oma ryhmä anna, ja hän kuuluu myös ryhmiin sudo ja users.
Missä käyttäjät ovat
Käyttäjäluettelo on tiedostossa /etc/passwd, yksi rivi käyttäjää kohden:
anna@web1:~$ grep -E '^(root|www-data|anna):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
anna:x:1000:1000:Anna,,,:/home/anna:/bin/bashKentät kaksoispisteillä erotettuina: nimi, x (salasana on muualla), UID, pääryhmä, kuvaus, kotikansio ja komentotulkki. Käyttäjällä www-data komentotulkkina on /usr/sbin/nologin: kirjautuminen ei onnistu.
Itse salasanat ovat salattuina (tiivistettyinä) tiedostossa /etc/shadow. Vain root voi lukea sitä. ! tai * salasanakentän alussa tarkoittaa, että salasanalla ei voi kirjautua. Näin root on Ubuntussa oletuksena lukittu, samoin Debianissa, jos et antanut asennuksessa root-salasanaa.
Käyttäjien ja ryhmien luominen
Debianissa ja Ubuntussa käytät helppokäyttöistä adduser-komentoa:
root@web1:~# adduser anna
info: Adding user `anna' ...
info: Adding new group `anna' (1000) ...
info: Adding new user `anna' (1000) with group `anna (1000)' ...
info: Creating home directory `/home/anna' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
...adduser luo käyttäjän, samannimisen oman ryhmän ja kotikansion ja kysyy salasanaa. Alemman tason useradd on myös olemassa (ja AlmaLinuxissa ja Rocky Linuxissa se on tavallinen komento), mutta ilman valitsimia se tekee vähemmän: ei salasanaa, ja joissain järjestelmissä ei kotikansiota.
Ryhmällä annat oikeuksia usealle käyttäjälle kerralla. Käyttäjän lisääminen ryhmään:
root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna # sama, toimii kaikkiallaHuomaa -a komennossa usermod: ilman -a:ta korvaat käyttäjän kaikki lisäryhmät pelkällä tällä yhdellä. Uusi ryhmä tulee voimaan vasta, kun kirjaudut uudelleen.
Tilin sulkeminen poistamatta sitä (esimerkiksi entisen työkaverin):
root@web1:~# usermod -L -e 1 jan-L lukitsee salasanan, -e 1 asettaa tilin vanhentuneeksi. Huomaa: lukittu salasana ei aina estä SSH-avaimella kirjautumista. Poista siis myös avaimet tiedostosta /home/jan/.ssh/authorized_keys (oppitunti 2.3). Vanhentuneen tilin (-e 1) sshd kyllä torjuu.
Oikeuksien lukeminen
anna@web1:~$ ls -l /var/www/example.com
total 12
-rw-r--r-- 1 anna www-data 1520 Nov 9 10:12 index.html
-rw-r----- 1 anna www-data 412 Nov 9 10:14 config.php
drwxr-xr-x 2 anna www-data 4096 Nov 9 10:15 images
drwxrwxr-x 2 www-data www-data 4096 Nov 9 10:20 uploadsEnsimmäinen kymmenen merkin lohko on avain kaikkeen:
- Merkki 1: tyyppi.
-on tavallinen tiedosto,dkansio (hakemisto),lpikalinkki (symlink). - Merkit 2-4: mitä omistaja saa tehdä.
- Merkit 5-7: mitä ryhmä saa tehdä.
- Merkit 8-10: mitä muut (kaikki muut) saavat tehdä.
Sen jälkeen tulevat linkkien määrä, omistaja, ryhmä, koko ja päivämäärä.
Kirjaimet tarkoittavat tiedostolla:
| Kirjain | Merkitys tiedostolla |
|---|---|
r | lukeminen |
w | muuttaminen |
x | suorittaminen ohjelmana tai skriptinä |
Ja kansiolla vähän eri asiaa:
| Kirjain | Merkitys kansiolla |
|---|---|
r | kansion tiedostojen nimien listaaminen |
w | tiedostojen luominen, uudelleennimeäminen ja poistaminen kansiossa |
x | kansioon siirtyminen ja sen tiedostojen avaaminen |
Viimeinen yllättää monet. Ilman kansion x-oikeutta et pääse sen tiedostoihin, vaikka ne itse olisivat luettavissa. Ja jolla on w-oikeus kansioon, voi poistaa siitä tiedostoja, vaikka ne kuuluisivat jollekulle toiselle.
Esimerkissä: index.html on kaikkien luettavissa. config.php (jossa on tietokannan salasana) on Annan luettavissa ja muutettavissa, ryhmä www-data (siis verkkopalvelin) voi vain lukea sitä, eikä muilla ole mitään oikeuksia. Kansioon uploads verkkopalvelin saa kirjoittaa, koska sinne tulevat kävijöiden lataamat tiedostot.
Oikeudet numeroina
Oikeudet kirjoitetaan usein kolmena numerona, oktaalilukuna. Jokaisella kirjaimella on arvo: r = 4, w = 2, x = 1. Laske yhteen kunkin ryhmän osalta:
| Oikeudet | Numero | Käyttö |
|---|---|---|
rw-r--r-- | 644 | tavallinen tiedosto, jota kaikki saavat lukea |
rw-r----- | 640 | tiedosto omistajalle ja ryhmälle, kuten salasanan sisältävä asetustiedosto |
rw------- | 600 | salainen tiedosto, kuten authorized_keys tai yksityinen avain |
rwxr-xr-x | 755 | kansio tai ohjelma, jota kaikki saavat käyttää |
rwx------ | 700 | yksityinen kansio, kuten ~/.ssh |
Oikeuksien muuttaminen: chmod ja chown
anna@web1:~$ chmod 640 /var/www/example.com/config.php
anna@web1:~$ chmod g+w /var/www/example.com/uploads
root@web1:~# chown anna:www-data /var/www/example.com/config.phpchmod muuttaa oikeuksia numerolla tai kirjaimilla (u, g, o omistajalle, ryhmälle ja muille; + tai - ja kirjain). chown eigenaar:groep muuttaa omistajaa ja ryhmää, ja sen saa tehdä vain root. -R-valitsimella molemmat toimivat koko kansioon, ja siinä menee usein pieleen: chmod -R 644 kansioon tekee kaikista alikansioista käyttökelvottomia, koska kansiot tarvitsevat x-oikeuden. Käytä koko puuhun mieluummin find-komentoa:
root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +Ei koskaan 777
"Se ei toiminut, joten laitoin siihen 777." 777 tarkoittaa, että kuka tahansa palvelimella saa lukea, muuttaa ja suorittaa tätä. Jos yksikin palvelu tai sivusto palvelimellasi joskus murretaan, tunkeutuja voi kirjoittaa kaikkialle, missä on 777, myös PHP-tiedostoihisi. Todellinen ongelma on lähes aina omistaja tai ryhmä: anna verkkopalvelimelle ryhmän kautta juuri se oikeus, jota se tarvitsee, ja vain siihen kansioon, jossa sitä tarvitaan.
Oletusoikeudet ja erikoisbitit
Uudet tiedostot saavat oikeutensa umaskin kautta. Tavallisella umaskilla 022 uusista tiedostoista tulee 644 ja uusista kansioista 755. Näet umaskisi komennolla umask.
Joskus näet s:n x:n paikalla, kuten ohjelmassa /usr/bin/passwd (-rwsr-xr-x). Se on setuid-bitti: ohjelma toimii omistajansa (rootin) oikeuksin, vaikka tavallinen käyttäjä käynnistäisi sen. Sitä tarvitaan muutamassa järjestelmäohjelmassa, mutta älä koskaan aseta sitä itse skriptille. Odottamaton setuid-tiedosto on tunnettu merkki murrosta; komennolla find / -perm -4000 -type f 2>/dev/null näet ne kaikki.
AlmaLinuxissa ja Rocky Linuxissa
adduser on niissä toinen nimi komennolle useradd; käytä komentoa useradd -m anna ja sitten passwd anna. Ryhmiä lisätään komennolla usermod -aG. SELinux tuo tämän oppitunnin oikeuksien rinnalle ylimääräisen kerroksen: tiedosto, jolla on oikeat oikeudet, voidaan silti torjua, jos siinä on väärä SELinux-nimiö (ls -Z näyttää sen).
Yhteenveto
- Jokaisella käyttäjällä on UID. Root (0) saa tehdä kaiken, ja palvelut toimivat omina järjestelmäkäyttäjinään ilman komentotulkkia.
- Käyttäjät ovat tiedostossa
/etc/passwd, salasanatiivisteet tiedostossa/etc/shadow. Luo käyttäjiä komennollaadduserja lisää ryhmiä komennollausermod -aG. ls -lnäyttää tyypin, omistajan, ryhmän ja muiden oikeudet sekä sen jälkeen omistajan ja ryhmän. Kansiollaxtarkoittaa sisään siirtymistä jawtiedostojen luomista ja poistamista.- Tavalliset numerot: 644 ja 755 julkiselle, 640 salaisuuksia sisältäville asetuksille, 600 ja 700 yksityiselle. Ei koskaan 777.
- Käytä
find-komentoa, kun asetat oikeudet koko puuhun, ja pidä silmällä setuid-tiedostoja.
Tietovisa (quiz)
Tehtävä
Tehtävä Z3.1: Oikeuksien lukeminen. Avaa esimerkkitiedosto rechten-1.txt: siinä on id-komennon tuloste kolmelle käyttäjälle ja ls -l-komennon tuloste verkkokansiosta. Vastaa jokaiseen kysymykseen, kuka saa tehdä mitä (esimerkiksi: "voiko verkkopalvelin muuttaa tiedostoa config.php?", "missä tiedostossa on liian laajat oikeudet?", "mikä numero vastaa merkintää .env?"). Ohjelma vertaa vastauksiasi kiinteään avaimeen ja selittää jokaisen kysymyksen kohdalla, miksi.
Lue lisää
Näiden artikkelien vaiheet koskevat WebOkén webhotellipaketteja ja VPS-palvelimia; muilla palveluntarjoajilla ne toimivat samaan tapaan.
- Kielletty (403): Sinulla ei ole käyttöoikeutta kohteeseen / tällä palvelimella
- Kirjautuminen VPS:llesi SSH:lla (ja SSH-avaimen luominen)
- WordPress-kurssilla: oppitunti 7.4 "Sivuston koventaminen: oikeudet, otsakkeet ja tietoturvalisäosat"
- Debianin ohjesivu adduser: https://manpages.debian.org/trixie/adduser/adduser.8.en.html
- Debianin ohjesivu chmod: https://manpages.debian.org/trixie/coreutils/chmod.1.en.html
