Erinevus lehekülje "Kasutajakeskkond Debianis" redaktsioonide vahel

Allikas: Kuutõrvaja
(Mitte-login shelli kasutamine)
(Mitte-login shelli kasutamine)
195. rida: 195. rida:
 
   olen BASH_ENV muutuja poolt viidatud faili sisu
 
   olen BASH_ENV muutuja poolt viidatud faili sisu
 
   olen skript
 
   olen skript
 +
 +
Asjakohane autentne info on man bash sektsioonis INVOCATION.
  
 
====su programmi kasutamine====
 
====su programmi kasutamine====

Redaktsioon: 1. juuni 2009, kell 00:54

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 reeglina 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 /etc/pam.d/ssh tulenevad piirangud (reeglina /etc/security/limits.conf)
  • käivitatakse sellele kasutajale failis /etc/passwd seadistatud shell'i protsess 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

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

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

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 käivitatavalt 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 ei kasutata mainitud punktifaile, kuid kasutatakse keskkonnamuutujaga BASH_ENV viidatud faili

 $ 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 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

set, env, export ja source kasutamine

Kasutajakeskkonnas on kahesuguseid keskkonnamuutujaid

  • eksporditavad - nende väärtused antakse edasi keskkonnas käivitatud shellidele
  • mitte-eksporditavad - nende väärtusi ei anta edasi keskkonnas käivitatud shellidele

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

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 ksutades 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

Kasulikud lisamaterjalid