Kasutajakeskkond Debianis
Sisukord
- 1 Sissejuhatus
- 2 Kasutajate haldus
- 3 Kasutajakeskkond
- 3.1 Tekstikonsoolilt sisseloginud kasutaja keskkond
- 3.2 SSH abil pseudo-terminalilt sisseloginud kasutaja keskkond
- 3.3 Mitte-login shelli kasutamine
- 3.4 su programmi kasutamine
- 3.5 sudo programmi kasutamine
- 3.6 Graafiliselt konsoolilt sisseloginud kasutaja keskkond
- 3.7 Süsteemi alglaadimise käigus käivitatud protsessi kasutajakeskkond
- 4 set, env, export ja source kasutamine
- 5 umask
- 6 Bash completion
- 7 Ressursipiirangute kehtestamine
- 8 Bash shell kasutamine
- 9 Kasulikud lisamaterjalid
Sissejuhatus
Kasutajakeskkonna (ingl. k. user environment) moodustavad need tingimused ja piirangud, mis võimaldavad kasutajal operatsioonisüsteemi kasutada ning rakenduvad kasutaja protsessidele. Kasutajakeskkonna määratlevad
- süsteemsed ressursipiirangud (ingl. k. resource limits) - määravad kui palju süsteemi ressurssi on kasutajal võimalik kasutada, nt kui palju protsesse saab kasutaja samaaegselt käivitada või kui palju on kasutajal kasutada kettaruumi
- keskkonnamuutujad - keskkonnamuutujate abil saab kasutaja poolt käivitatavaid programme sh shelli protsessi ennast juhtida, nt määrata lokaadi omadusi või bash history suuruse
Üldiselt iga arvutis töötav protsess töötab omas keskkonnas, kus tema tööd mõjutavad süsteemsed ressursipiirangud ja keskkonnamuutujad, kusjuures vaikimisi pärib protsessi poolt käivitatud protsess oma eelkäija keskkonna, st talle rakendatakse samu piiranguid ja keskkonnamuutujatel on samasugused väärtused.
Protsessi keskkonna mõttes ei ole põhimõtteliselt vahet, kas protsess on käivitatud süsteemi alglaadimise käigus või protsessi on käivitanud süsteemi mingil moel sisse loginud kasutaja, kuid kuna sisseloginud kasutaja puhul tuleb arvesse palju täiendavaid olulisi asjaolusid, mis määravad, milliste omadustage kasutajakeskkond kujuneb, käsitletakse neid kahte juhtumit eraldi.
Ülidselt on osa kasutajakeskkonna omadustest kasutajale ette antud ning osalt saab kasutaja keskkonna omadusi muuta, nt
- tavaliselt kasutaja ei saa muuta oma kasutajanime ja UID väärtust
- kasutaja ei suurendada arvu, mis määrab kui palju tema käivitatud protsess saab samaaegselt faile avada, aga ta saab seda arvu vähendada
- kasutaja saab muuta oma lokaadi määranguid
Kasutajate haldus
Vaikimisi on andmed süsteemi kasutajate kohta kirjas failides
- /etc/passwd - kasutajate andmed
- /etc/group - gruppide kirjeldused
- /etc/shadow - paroolide krüptogrammid
Kasutaja moodustamiseks võib redigeerida tavalise tekstieditoriga faile /etc/passwd, /etc/group ja /etc/shadow aga sobivam on kasutada programme groupadd ja useradd, nt nii
# groupadd mart # useradd -g mart -m -d /home/mart -s /bin/bash mart
Ning omistada kasutajale parool
# passwd mart
Tulemusena lisatakse kasutaja andme mainitud kolme faili
# grep mart /etc/passwd /etc/group /etc/shadow /etc/passwd:mart:x:1000:1000::/home/mart:/bin/bash /etc/group:mart:x:1000: /etc/shadow:mart:$1$PvykLyXa$AxhjUndHit.WIcheFQoEI.:14114:0:99999:7:::
ja moodustatakse kasuta kasutaja kodukataloog /home/mart kuhu kopeeritakse failid kataloogis /etc/skel, vaikimisi
# find /etc/skel -type f /etc/skel/.bash_logout /etc/skel/.profile /etc/skel/.bashrc
Kasutaja süsteemi sisenemise õiguse ajutiseks peatamiseks sobib asendada tema kirjes x hüüumärgiga,
enne
mart:x:1000:1000::/home/mart:/bin/bash
pärast
mart:!:1000:1000::/home/mart:/bin/bash
Kasutajakeskkond
Arvuti konsoolilt või pseudo-terminalilt (nt ssh programmi abil) kasutaja süsteemi sisse logimisel
- rakendatakse vastavalt PAM mooduli login seadistusfailist /etc/pam.d/login või mooduli ssh seadistusfailist /etc/pam.d/ssh tulenevad seadistused ja piirangud (reeglina /etc/security/limits.conf)
- käivitatakse sellele kasutajale failis /etc/passwd seadistatud shell'i protsess login shellina kõnealuse kasutaja õigustes
- algväärtustatakse kasutajakeskkond süsteemse profiili /etc/profile ja nn punktifailide, vaikimisi ainult .profile abil, kusjuures ~/.bash_profile ja ~/.bash_login faile Debianis vaikimisi ei kasutata
- väljalogimisel täidetakse failis ~/.bash_logout kirjas olevad tegevused
Seejärel on kasutajal shell nö ees ja ta saab arvutit kasutama hakata, nt kävitada protsesse.
Tekstikonsoolilt sisseloginud kasutaja keskkond
Arvuti tekstikonsoolilt sh serial konsoolilt sisse logides esmalt täidetakse PAM login mooduli seadistusfailis /etc/pam.d/login kirjeldatud tegevused, vaikimisi
- /etc/security/limits.conf - seadistatakse globaalsed ressursipiirangud
ja seejärel bash shelli käivitamisel kasutatakse selliseid seadistusfaile
- /etc/profile - globaalne profiilifail, mis määrab PATH ja PS1 väärtused erinevalt tava ja juurkasutajale
- kasutaja shelli punktifailid - kolmest kasutatakse ainult esimese, mis leidub, faile vaadatakse läbi sellises järjekorras ~/.bash_profile, ~/.bash_login, ~/.profile
Vaikimisi on kasutaja jaoks kirjeldatud sellised keskkonnamuutujad
$ env SHELL=/bin/bash TERM=vt100 HUSHLOGIN=FALSE USER=priit LS_COLORS=no=00:fi=00:di=01;... MAIL=/var/mail/priit PATH=/usr/local/bin:/usr/bin:/bin:/usr/games PWD=/home/priit HISTCONTROL=ignoreboth SHLVL=1 HOME=/home/priit LOGNAME=priit _=/usr/bin/env
Punktifailid on tavalised tekstifailid, ei alga '#!/bin/bash' järgnevusega ja ei ole käivitatavad, tavaliselt on nad ainult kasutajale loetavad ja kirjutatavad.
Failide läbivaatamise ja kehtestamise osas on hea veenduda tekitades kõik failid alustuseks ning kirjutades neile sisse
$ cat .bash_profile PUNKT_BASH_PROFILE_ON_OLEMAS=punkt_bash_profile_on_olemas $ cat .bash_login PUNKT_BASH_LOGIN_ON_OLEMAS=punkt_bash_login_on_olemas $ cat .profile PUNKT_PROFILE_ON_OLEMAS=punkt_profile_on_olemas
Ning seejärel sisse logides on käsuga env näha, millised punktifaile on süsteem tegelikult kasutanud. Sarnaselt saab stat programmiga kaudselt kontrollida, milliseid faile on kasutatud.
Kui kasutaja soovib ise ulimit väärtusi muuta, siis seda sobib teha .bashrc failist lisades nt faili lõppu read
ulimit -n 80
Näiteks küsides arvutilt kasutaja login shelli protsessile 17731 vastavaid andmed, sh keskkonnamuutujaid öeldakse (miinus märk bash ees tähistab ajalooliselt asjalolu, et tegu on login shelliga)
$ ps e -p 17731 PID TTY STAT TIME COMMAND 17731 ttyS1 S+ 0:00 -bash TERM=vt100 HOME=/home/priit SHELL=/bin/bash USER=priit\ LOGNAME=priit PATH=/usr/local/bin:/usr/bin:/bin:/usr/games MAIL=/var/mail/priit HUSHLOGIN=FALSE
Sama protsess paistab w käsu väljundis selliselt
# w 16:40:39 up 7 days, 1:35, 3 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT priit ttyS1 - 12:48 2:11m 0.28s 0.28s -bash ...
Kuna tegu on login shelli kasutusjuhuga, siis väljalogimisel täidetakse failis ~/.bash_logout kirjas olevad tegevused.
SSH abil pseudo-terminalilt sisseloginud kasutaja keskkond
Arvutisse pseudo-terminalilt sisse logides, nt ssh kliendiga, esmalt täidetakse PAM ssh mooduli seadistusfailis /etc/pam.d/ssh kirjeldatud tegevused, vaikimisi
- /etc/environment - vaikimisi ei ole kasutuses, fail on tühi
- /etc/security/pam_env.conf - vaikimisi ei ole kasutuses, fail on tühi
- /etc/default/locale - 'dpkg-reconfigure locale' seadistab failile sisu, nt rea 'LANG=et_EE.UTF-8'
- /etc/security/limits.conf - seadistatakse globaalsed ressursipiirangud
ja seejärel bash shelli käivitamisel kasutatakse selliseid seadistusfaile
- /etc/profile - globaalne profiilifail, mis määrab PATH ja PS1 väärtused erinevalt tava ja juurkasutajale
- kasutaja shelli punktifailid - kolmest kasutatakse ainult esimese, mis leidub, faile vaadatakse läbi sellises järjekorras ~/.bash_profile, ~/.bash_login, ~/.profile
Vaikimisi on ssh puhul oluline tähele panna, et tuuakse kaasa LANG muutuja ning moodustatakse veel mõned iseloomulikud muutujad
$ env TERM=xterm SHELL=/bin/bash SSH_CLIENT=192.168.10.10 50602 22 SSH_TTY=/dev/pts/1 USER=priit LS_COLORS=no=00:fi=00:... MAIL=/var/mail/priit PATH=/usr/local/bin:/usr/bin:/bin:/usr/games PWD=/home/priit LANG=hiinakeel HISTCONTROL=ignoreboth SHLVL=1 HOME=/home/priit LOGNAME=priit SSH_CONNECTION=192.168.10.10 50602 192.168.10.250 22 DISPLAY=localhost:11.0 _=/usr/bin/env
Kuna tegu on login shelli kasutusjuhuga, siis väljalogimisel täidetakse failis ~/.bash_logout kirjas olevad tegevused.
Mitte-login shelli kasutamine
Mitte-login shelli kasutamine tähendab, et bash käivitatakse, aga see ei toimu seoses süsteemi sisselogimisega, sellisel juhul on kaks võimalust
- mitte-login shelli kasutamine interaktiivses režiimis - nt kasutaja käivitab shellis olles uuesti shelli, st öeldes
$ echo $SHLVL 1 $ bash $ echo $SHLVL 2
Kasutaja nn mitte-login shelli (ingl. k. non-login shell) puhul päritakse töötavalt shellilt enamus kasutajakeskkonna omadusi ning kasutatakse /etc/bash.bashrc ja .bashrc uue shelli väärtustamiseks. Ei kasutata PAM moodulite seadistusi ega /etc/profile ega ~/.profile faile.
Selleks, et login ja mitte-login shelli keskkond oleks sarnane loetakse ~/.profile faili lõpus sisse ~/.bashrc sisu.
- mitte-login shelli kasutamine mitte-interaktiivses režiimis - nt kasutaja käivitab shell skripti moodustades faili sisuga
$ cat skript.sh !#/bin/bash echo olen skript $ chmod 0755 skript.sh $ ./shript.sh olen skript
Mitte-login shelli kasutamisel mitte-interaktiivselt puhul päritakse töötavalt shellilt enamus kasutajakeskkonna omadusi, kuid ei kasutata /etc/bash.bashrc ega ~/.bashrc faile. Keskkonnamuutuja BASH_ENV abil saab viidata failile, mis nö source'itakse
$ cat bash_env.src echo olen BASH_ENV muutuja poolt viidatud faili sisu $ export BASH_ENV=/home/mart/bash_env.src $ ./skript.sh olen BASH_ENV muutuja poolt viidatud faili sisu olen skript
Asjakohane autentne info on bash manuaalis (man bash) sektsioonis INVOCATION.
su programmi kasutamine
su programmi (switch user) kasutab tavaliselt juurkasutaja selleks, et sooritada tegevusi mõne muu kasutajana. Kui kasutada võtit '-l' või '-', siis jõutakse sellisesse shelli kuhu jõuab kasutaja peale süsteemi sisse logimist.
# su - mart $
sudo programmi kasutamine
TODO
Graafiliselt konsoolilt sisseloginud kasutaja keskkond
Arvuti graafiliselt konsoolilt sisse logides kasutatakse selliseid seadistusfaile
- TODO
Süsteemi alglaadimise käigus käivitatud protsessi kasutajakeskkond
TODO
set, env, export ja source kasutamine
Kasutajakeskkonnas on kahesuguseid keskkonnamuutujaid
- eksporditavad - nende väärtused antakse edasi keskkonnas käivitatud shellile
- mitte-eksporditavad - nende väärtusi ei anta edasi keskkonnas käivitatud shellile
env
env programmi abil saab anda argumendiks oleva programmile külge keskkonna, nt
$ env GCC=/usr/bin/gcc-4.1 ./programminimi
kusjuures ilma argumentideta env esitab nimekirja eksporditud keskkonnamuutujatest.
Tundub, et ülaltooduga on samaväärne öelda ja programmi jaoks on olemas keskkonnamuutuja GCC ettenäidatud väärtusega
$ GCC=/usr/bin/gcc-4.1 ./programminimi
export
export käsu abil saab seada muutuja väärtust käesoleva shelli eksemplari jaoks, kusjuures see antakse edasi alamshellile
$ export MUUTUJA_EDASIANTAV=muutujavaartus_edasiantav
set
set käsu abil saab seada muutuja väärtust käesoleva shelli eksemplari jaoks, kusjuures seda ei anta edasi alamshellile
$ set MUUTUJA_LOKAALNE=muutujavaartus_lokaalne
kujuures ilma argumentidega set käsk esitab kõik käesolevas shellis kirjeldatud muutujad.
Samaväärne on öelda
$ MUUTUJA_LOKAALNE=muutujavaartus_lokaalne
unset abil saab eemaldada set või export abil seadistatud muutujate väärtusi
$ unset MUUTUJA_LOKAALNE
source
source käsu abil saab täita tekstifailis sisalduvad käsud käesolevas shellis, tavaliselt kasutatakse seda muutujate väärtuste ja funktsioonide kirjelduste shelli sisselugemiseks
$ source failinimi.src
Samaväärne on öelda
$ . ./failinimi.src
umask
umask määrab, millised loabitid on vaikimisi moodustataval failil. Vaikimisi on moodustatav fail loabittidega 0644 ja parasjagu kehtivat umask väärtust saab küsida öeldes
$ umask 0022 $ umask -S u=rwx,g=rx,o=rx
Globaalne umask seadistatakse failis /etc/profile.
Bash completion
Keerukama bash completioni kasutamiseks kui niisama käsu lõpunikirjutamine peab süsteemis olema pakett bash-completion, kusjuures vaikimisi on see paigaldatud. Nt võimaldab bash-completion tarkvara lõpetada käsu argumente
- sisestades 'cd tühik-tab' esitatakse nimekirja käesolevas kataloogis olevatest alamkataloogidest
- sisestades 'rpm2cpio-tühik-tab' esitatakse nimekirja .rpm failidest
- sisestades 'gunzip-tühik-tab' esitatakse nimekiri .gz failidest
Completion on laiendatav, tavaliselt paketid lisavad laiendusi kataloogi /etc/bash_completion.d, nt Subversion
# dpkg -S /etc/bash_completion.d/subversion subversion: /etc/bash_completion.d/subversion
Subversioni puhul esitatakse tulemusena 'svn-tühik' sisestamisel nimekiri võimalikest nö esimestest svn argumentidest.
Probleemid
Kui Lenny puhul lisada kasutaja ilma shelli näitamata, siis määratakse kasutaja shelliks /bin/sh. Bash completioni iseärasuste tõttu saab /bin/sh kasutav kasutaja valides nt 'cd-tühik' sellise veateate, ' ' vahel tegelikult tühikut pole
$ cd -sh: <( compgen -d -- ' ' ): No such file or directory
Probleemi lahendab kasutaja shellina /bin/bash kasutamine. Kusjuures juurkasutaja shell on vaikimisi /bin/bash.
Ressursipiirangute kehtestamine
Kasutaja ressursipiirangud on määratud /etc/security/limits.conf faili sisuga, kasutaja jaoks nt sellised ühes süsteemis vaikimisi juhtumil
$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 4095 max locked memory (kbytes, -l) 32 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 4095 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
Nt konkreetse kasutaja jaoks saab süsteemselt piirangu seada kasutades limits.conf failis ridu
priit hard nproc 20 priit hard nofile 100
Bash shell kasutamine
Tõenäolselt enamasti leiab bash shelli kasutamine aset Xterm programmi aknas. Lisaks ilmsele on abiks shortcut kombinatsioonide kasutamine
- Ctrl-D - ütleb exit, st logib välja kui tegu on nn login-shelliga
- Ctrl-A - viib kursori rea algusse
- Ctrl-E - viib kursori rea lõppu
Prompt
Prompti ehk kasutaja käsurea alguses oleva teksti määrab keskkonnamuutuja PS1 väärtus, vaikimisi on see kirjeldatud failis ~/.bashrc sektsioonis
if [ "$color_prompt" = yes ]; then PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' else PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' fi
Aliases
Alias'teks nimetatakse kasutaja enda poolt kirjeldatud järgnevusi, nt kirjeldame ll täitma käsku 'ls -l'
$ alias ll='ls -l'
Öeldes seejärel ll täidetakse tegelikult käsk 'ls -l'.
Aliase kirjeldus saab eemaldada öeldes
$ unalias ll
Aliasel on kõrgem prioriteet kui failisüsteemist käivitatud programminimedel, st kui nimed langevad kokku, täidetakse aliasele vastav käsk.
Tavaliselt kirjeldatakse aliased failis ~/.bash_aliases, näitele vastaval juhul peaks seal sisalduma rida
alias ll='ls -l'
~/.bash_aliases faili kasutamiseks tuleb failis ~/.bashrc eemaldada kommentaarid sektsiooni eest
if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi