Luento 3
Tiedostojen ominaisuuksista
- ls -l tulostaa:
- -rw-r--r--. 1 mailkang users 0 Mar 12 13:50 hauki
- Normaali tiedosto (-)
- Omistajalla luku- ja kirjoitusoikeudet (rw-)
- Ryhmällä vain lukuoikeus (r--), samoin muilla (r--)
- SELinux käytössä (.); voi olla myös + jos acl käytössä
- Yksi inode
- Omistaja mailkang, ryhmä users, koko 0 tavua
Tiedostojen ominaisuuksista
- ls -l tulostaa:
- drwxr-xr-x 2 mailkang users 19 Mar 12 13:50 kala
- Hakemisto, omistajalla kaikki oikeudet, ryhmällä ja muilla luku- ja suoritusoikeus. Hakemiston suoritusoikeus = oikeus lukea sen alla olevia tiedostoja, lukuoikeus = oikeus listata hakemiston sisältö (tiedostonimet)
Tiedostojen ominaisuuksista
- ls -ld /tmp tulostaa:
- drwxrwxrwt 7 root root 140 Mar 12 13:17 /tmp
- Hakemisto, kaikilla kaikki oikeudet mutta sticky-bit päällä: vain tiedoston omistaja (tai root) voi poistaa sen tai muuttaa sitä. Pieni t = sticky bit + execute bit, iso T = pelkkä sticky bit. Normaaleilla tiedostoilla sticky bitillä ei ole yleistä merkitystä.
Tiedostojen ominaisuuksista
- ls -l tulostaa:
- lrwxrwxrwx 1 mailkang users 4 Mar 12 13:51 fish -> kala
- Symbolinen linkki: viittaukset kohdistuvat nimettyyn tiedostoon, oikeudetkin tulevat sieltä, itse linkin oikeuksilla ei vaikutusta. Vain jotkin harvat komennot osaavat käsitellä itse linkkiä. Luonti: ln -s
Tiedostojen ominaisuuksista
- ls -l
- -rw-rw-r-- 2 mailkang mailkang 5 Mar 12 15:36 bird
- -rw-rw-r-- 2 mailkang mailkang 5 Mar 12 15:36 lintu
- ls -li
- 22544411 -rw-rw-r-- 2 mailkang mailkang 5 Mar 12 15:36 bird
- 22544411 -rw-rw-r-- 2 mailkang mailkang 5 Mar 12 15:36 lintu
- ”hard link”: sama tiedosto, kaksi hakemistoentryä. Luonti: ln (ei -s:ää)
Tiedostojen ominaisuuksista
- ls -l tulostaa:
- -rwsr-xr-x 1 root root 32096 Feb 8 2017 su
- Normaali tiedosto, omistajalla kaikki oikeudet, ryhmällä ja muilla suoritus- ja lukuoikeus, suid-bitti päällä: ajettaessa suoritetaan tiedoston omistajan oikeuksilla (tässä root). Pieni s = suid + execute bitit päällä, iso S = pelkkä suid-bitti päällä. Ei yleistä merkitystä hakemistoille.
- Esim: ping, passwd
Tiedostojen ominaisuuksista
- ls -l tulostaa:
- ---x--s--x 1 root nobody 306360 Mar 1 2017 ssh-agent
- Normaali tiedosto, kaikilla suoritusoikeus (eikä muuta), sgid-bitti päällä: suoritetaan tiedoston ryhmän oikeuksilla (tässä kuten suorittaja olisi nobody-ryhmässä). Hakemistolla sgid-bitti aiheuttaa sen oikeuksien periytymisen sen alle luotuihin tiedostoihin ja hakemistoihin.
Tiedostojen ominaisuuksista
- ls -l tulostaa:
- brw-rw---- 1 root disk 8, 0 Mar 6 14:02 sda
- crw-rw-rw- 1 root tty 5, 0 Mar 7 22:00 tty
- prw------- 1 root root 0 Mar 6 14:02 fifo
- srw------- 1 root root 0 Mar 6 14:02 control
- Laitetiedostoja, putkia, soketteja… muitakin erikoistapauksia voi olla. Laitetiedoston koon edellä pilkulla erotettuna laitetyypin (ajurin) tunniste.
Tiedostojen aikaleimat
- mtime (modification time)
- ls -lt [--full-time]
- touch -m [-t [CC]YYMMDDhhmm[.ss]]
- find … -mtime ...
Tiedostojen aikaleimat
- atime (access time)
- ls -lu
- touch -a …
- find … -atime …
Tiedostojen aikaleimat
- ctime (status change time, creation time)
Levy täyttyy: miksi
- df
- du [-s] dir... [ | sort -n]
- find dir -type f -mtime -1 -size +10000 -user mailkang
Levy täyttyy: miksi
- ls -l | sort -k5n | tail
- lsof -s | grep /var
- tail /var/log/syslog.log ...
Levy täyttyy, mitä tehdä
- rm [-rf] ...
- find . -mtime -1 -type f -size +10000 -exec gzip {} \;
- tai ... -exec rm {} \;
- find dir -size +10000 -user mailkang -print0 | xargs -0 gzip
- Prosessilla auki olevaa tiedostoa ei pidä poistaa tappamatta prosessia ensin (lsof, fuser)!
Virtuaalisen kovalevyn lisäys
- Luodaan levyimage:
- qemu-img create $HOME/kone2b.img 2G
- Lisätään se virtuaalikoneeseen:
- virsh attach-disk kone $HOME/kone2b.img vdb --persistent
- Joskus lisäksi --driver qemu --subdriver qcow2
Virtuaalisen kovalevyn lisäys 2
- Jos acpid toimii ja kyllin uusi kernel (Ubuntu 14.04 ainakin) ja levyohjaimena on virtio, uusi levy ilmestyy lennosta (hotplug), muuten virtuaalikone pitää bootata; tarkista: dmesg, ls -l /dev/vdb
- Poisto: virsh detach-disk kone1 vdb [--live|--config|...]
Uuden levyn käyttöönotto
- Levyn voi (ei ole pakko) partitioida:
- fdisk /dev/vdb # tai
- parted /dev/vdb
Uuden levyn käyttöönotto 2
- Tiedostojärjestelmän luonti, esim:
- mkfs -t ext4 -i 8096 /dev/vdb1
- ellei partitioitu:
- mkfs -t ext4 /dev/vdb
mkfs optioita
- -t tiedostojärjestelmätyyppi, esim. ext4, xfs, jfs
- vaatii yleensä tyyppikohtaisen lisäpaketin,
- esim xfsprogs, jfstools
- tyyppikohtaiset man-sivut: man mkfs.ext4 jne
mkfs optioita
- -m reserved-percentage: kuinka monta prosenttia varataan superuserille (oletus 5%); säädettävissä jälkeenpäin komennolla tune2fs
- -i bytes-per-inode: montako tavua per inode, rajaa montako tiedostoa voidaan luoda (oletus 4096, suurenna jos paljon pieniä tiedostoja)
Uuden levyn käyttöönotto 3
- Valitse mount point; jos olemassaoleva, data siirrettävä ja niin, ettei sitä siirron aikaan käytetä (jos mahdollista; ellei, esim. /usr, bootti mahdollisimman pian).
Uuden levyn käyttöönotto 4
- Esim. uudesta levystä /home:
- ensin käyttäjät ulos!
- mv /home /oldhome
- mkdir /home
- mount /dev/vdb1 /home
- mv /oldhome/* /home && rmdir /oldhome
/etc/fstab
- Jotta uusi levy tulisi käyttöön automaattisesti bootin jälkeen, se pitää lisätä /etc/fstabiin:
- # laite polku tyyppi optiot dump_freq fsck_pass
- /dev/vdb1 /home ext4 defaults 0 2
/etc/fstab 2
- Optiot kuten mount-komennossa -o ...
- dump_freq nykyisin aina 0
- fsck_pass tarkistusjärjestys bootissa, 0=ei tarkisteta
- yleensä root (/) 1, loput 2, cd:t yms 0
mount optioita 1
- -a [-O] # kaikki fstabissa määritellyt (paitsi...)
- -r | --readonly
- -w | --rw
- -U uuid
mount optioita 2
- -t types
- -B | --bind
- -R | --rbind
mount optioita 3
-o ... (no-)
atime, noatime, diratime, relatime, strictatime
async, sync
auto
mount optioita 4
noexec, nosuid, nodev
group, owner, users
remount # halutaan vain vaihtaa optioita
ro, rw # vrt. -r, -w
ssh
- ssh (Secure SHell) suorittaa komennon tai avaa pääteistunnon etäkoneessa:
- ssh [options] [user@]kone [komento]
- Paljon optioita erikoistilanteisiin, mm.
- -X salli etäkoneen käyttää paikallista näyttöä
- -p port käytä porttia port oletuksen 22 asemesta
- -i id_file käytä epästandardia avaintiedostoa
- (oletuksena olevan $HOME/.ssh/id_rsa asemesta)
scp
- scp (Secure CoPy) kopioi tiedostoja etäkoneeseen:
- scp [optiot] tiedostot [user]@kone:[kohde]
- tai etäkoneesta:
- scp [optiot] [user]@kone:tiedosto kohde
- missä kohde voi olla hakemisto tai tiedostonimi.
- Yleisin optio on -r, joka kopioi koko hakemistopuun. Optio -i toimii kuten ssh:n kanssa, mutta portin vaihto-optio on -P port, kun taas -p säilyttää aikaleimat ja oikeudet.
ssh & scp: autentikointi
- Autentikointitapoja on useita, yleisimmät:
- (etäkoneen) salasana
- avaintiedostopari (identity file)
- luodaan komennolla ssh-keygen -t rsa
- salainen avain, yleensä id_rsa, sijaitsee lokaalissa koneessa, yleensä hakemistossa $HOME/.ssh
- julkinen avain, yleensä id_rsa.pub, sijaitsee etäkoneessa, yleensä tiedostossa $HOME/.ssh/authorized_keys (jossa niitä voi olla monta, jokainen omalla rivillään)
ssh & scp: autentikointi
- Avaimella voi olla oma salasanansa (passphrase)
- Avain + passphrase -yhdistelmällä saadaan aikaan ”two-factor authentication”: pitää kaapata sekä avain(tiedosto) että salasana ennen kuin voi autentikoitua toisena
- Vain rootin ssh-avaimella ei yleensä salasanaa
ssh & scp: autentikointi
- Esimerkki:
- ssh-keygen -t rsa
- ssh kone mkdir -p .ssh
- ssh kone 'cat >>.ssh/authorized_keys' <~/.ssh/id_rsa.pub
- tai, jos etäkoneessa ei varmasti ole muita avaimia ennestään:
- scp ~/.ssh/id_rsa.pub kone:.ssh/authorized_keys
ssh-agent
- Jos ssh-avaimella on salasana, sen toistuvalta kirjoittamiselta välttyy apuohjelmalla ssh-agent, joka pitää sitä muistissa session ajan. Se voi käynnistyä automaattisesti, ellei, käsin esim.
- Avaimen tallennus voi myös olla automaattista tai käsin komennolla
.ssh/known_hosts
- ssh tallettaa tiedostoon ~/.ssh/known_hosts tunnettujen (aiemmin käytettyjen) koneiden avaimen tunnisteen (fingerprint). Jos avain on muuttunut, se valittaa mahdollisesta man-in-the -middle -hyökkäyksestä.
- Virheestä pääsee eroon poistamalla ao. rivin known_hosts -tiedostosta – tai rivit, niitä on yleensä kaksi (koneen nimellä ja IP:llä).
- Voi tehdä myös globaalin /etc/ssh/ssh_known_hosts
.ssh/known_hosts
- Rivin poistaminen known_hosts -tiedostosta onnistuu koneen nimelle komennolla
- tai millä tahansa editorilla (sekä nimelle että IP:lle), myös sed käy:
- sed -i 40d ~/.ssh/known_hosts
- Jos samassa koneessa pyörii useita ssh-demoneja (eri porteissa), known_hosts -tiedostoa joutuu editoimaan käsin (samalle IP:lle monta riviä)
.ssh/config, ssh_config
- ssh:n toimintaan vaikuttavia asetuksia voi tehdä globaalisti tiedostossa /etc/ssh/ssh_config tai käyttäjäkohtaisesti tiedostossa ~/.ssh/config (ks. man ssh_config). Esim.
- AddKeysToAgent yes
- CheckHostIP no
- Host mailkang
- Hostname mailkang.student.it.jyu.fi
- User mailkang
- Port 50022
- IdentityFile ~/.ssh/backup_id
.ssh/config, ssh_config
- Asetuksia voi eriyttää mm. käyttäjätunnuksen tai koneen mukaan match-säännöllä, esim.
- Match User ”!root,*”
- SendEnv LANG LC_*
- lähettäisi kieliympäristön paitsi jos tunnus (etäkoneessa) on root
- Muita ehtoja localuser, host, originalhost ja exec (mielivaltainen komento, tulkitaan todeksi jos palautuskoodi on nolla)
.ssh/config, ssh_config
- Asetusten prioriteettijärjestys alimmasta ylimpään on
- /etc/ssh/ssh_config
- ~/.ssh/config
- komentorivioptiot
- /etc/ssh/ssh_config siis vain oletusasetukset, ei rajoita mitä käyttäjät voivat tehdä
sshd_config
- ssh-demonin asetuksia (globaaleja) säädetään tiedostolla /etc/ssh/sshd_config, esim.
- PermitRootLogin prohibit-password
- DenyUsers evilguy
- AllowGroup sudo
- ForceCommand ...
- Match kuten ssh_config'issa, ehtoina user, group, host, address*, localaddress*, localport
- * myös CIDR, esim. 130.234.208.0/23
Web-palvelinohjelmistot
- apache: suurin ja kaunein, kaikki softat tukevat, mutta resurssisyöppö: www.apache.org
- nginx (”engine X”): kevyempi mutta kuitenkin ”full-featured”, kaikki edes melko usein tarvittava kalusto löytyy: www.nginx.org
- lighttpd: kevytversio, ominaisuuksia kuitenkin riittävästi useimpiin tarpeisiin: www.lighttpd.net
- paljon muitakin erilaisiin erikoistarpeisiin
lighttpd
- apt-get install lighttpd
- nano /var/www/index.html
- http://s025.vm.it.jyu.fi, mailkang
- http://130.234.209.25, http://172.20.209.25
- /etc/lighttpd/lighttpd.conf
- /etc/lighttpd/conf-{available,enabled}
lighttpd
- lighty-enable-mod userdir
- nano $HOME/public_html/index.html (ilman sudoa)
- http://s025.vm.it.jyu.fi/~mailkang
- service lighttpd force-reload
lighttpd.conf
server.modules = { ... }
server.document-root = ”/var/www”
server.errorlog = ”/var/log/lighttpd/error.log”
server.username = ”www-data”
server.groupname = ”www-data”
lighttpd.conf
server.port = 80
index-file.names = { ”index.php”, ”index.html”...}
url.access-deny = { ”~”, ”.inc” }
static-file.exclude-extensions = { ”.php”, ”.pl”, ”.fcgi” }
name-based virtual hosts
- /etc/lighttpd/conf-available/95-local.conf:
- $HTTP[”host”]==”s025.vm.it.jyu.fi” {
- server.document-root=”/var/www/s025”
- }
- mkdir /var/www/s025; nano /var/www/s025/index.html
name-based virtual hosts
- sudo lighty-enable-mod local
- service lighttpd force-reload
- http://s025.vm.it.jyu.fi on nyt eri kuin http://130.234.209.25
php
- apt-get install php5-cgi
- lighty-enable-mod fastcgi
- lighty-enable-mod fastcgi-php
- service lighttpd force-reload
- nano ~/public_html/koe.php
access log, dir listing
- lighty-enable-mod accesslog
- tail -f /var/log/lighttpd/access.log
- lighty-enable-mod dir-listing # ei suositeltava!
- mkdir /var/www/testi; touch /var/www/testi/kala
- http://s25.vm.it.jyu.fi/testi
busybox
- Etenkin asennusvaiheessa (avattaessa konsoli Alt-F2:lla jne), joskus muutenkin minimalistisissa asennuksissa käytettävä staattinen binääri, joka sisältää riisutut versiot yleisimmistä komennoista
- Bootin jäädessä (initramfs) -promptiin käytössä on juuri busybox
busybox
- Monissa komennoissa vähemmän optioita kuin standardiversioissa (uudemmissa busyboxin versioissa enemmän optioita)
- https://busybox.net/downloads/BusyBox.html