Sessió 4 dia 06/04
Els permisos dels fitxers
Gestió d'usuaris
Gestió de grups
Altres ordres
Exercici
Resum d'ordres del terminal. Permisos dels fitxers
Resum d'ordres del terminal. Usuaris i grups
Resum d'ordres del terminal. Operacions de disc
Com Linux és un sistema multiusuari, hem de protegir els fitxers de la manipulació per part d'uns altres. Linux ens proporciona per a això els permisos de fitxers.
ramon@portatil:˜/temporal/ls -l total 12 -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp2 -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp3 ramon@portatil:˜/temporal/
Els permisos de fitxers els podem establir en 3 nivells, permisos del propietari (usuari o user), permisos per al grup (group) i permís per a la resta (others).
Cada fitxer és de l'usuari que ho crea o bé els obté perquè algú li ha canviat la propietat (per exemple, root pot fer això). Només el propietari del fitxer i el superusuari (root) poden canviar els permisos dels fitxers.
Cada usuari pot pertànyer a un o a diversos grups d'usuaris, i és als usuaris que estan dintre del mateix grup que el propietari del fitxer a qui afecten els permisos de grup. I evidentment els permisos per a la resta afecten a tots els altres.
I alhora de tot això hi ha 3 tipus de permisos: permisos de lectura, permisos d'escriptura i permís d'execució.
Interpretant els permisos
Bé, com ja hem vist amb l'opció '-l' de 'ls' podem observar els permisos que té cada fitxer assignat, sent una cadena de 10 caràcters (per exemple -rw-rw-r--). El primer caràcter no ho explicarem.
Amb això ja ens queden 9, que ho dividirem en parts de 3: el primer per a la lectura, el segon per a l'escriptura i el tercer per a l'execució (si sou espavilats ja us haureu adonat que en Linux no s'executen els fitxers per tenir un tipus d'expressió, si no per tenir o no aquest permís). I l'ordre és el mateix: primer els 3 d'usuari, els 3 de grup i els 3 dels altres. Un '-' indica que aquest permís no està donat.
Perquè quedi clar vegem uns exemples:
-rw-rw-r-- L'usuari pot llegir i escriure, el grup pot llegir i escriure i la resta només llegir.
---------- Ningú pot fer res. -rwxrwxrwx Tots poden fer tot. -rwx------ L'usuari pot fer tot. ---x--x--x El fitxer solament pot executar-se per tots. -rwxr----- L'usuari pot fer-lo tot i el grup només llegir
Cal indicar que els permisos dels fitxers depenen dels permisos en si del directori que els conté, i que de res serveix tenir '-rwxrwxrwx' en un fitxer si el directori només té permisos '-r--------', amb la qual cosa només podríem llegir-lo i res més. Fins i tot si el directori no tingués permís de lectura per a ningú, no podríem ni tan sols llistar el contingut del directori, per veure això amb un usuari normal intenteu feu el següent:
ramon@portatil:$ ls /root ls: /root: Permís denegat ramon@portatil:$
Segons la configuració del vostre sistema pot ser que us deixi, si és així segurament no tindreu una bona seguretat en el vostre sistema.
Com curiositat a això, per exemple, podeu crear una bústia on tots poden entrar els fitxers que vulguin però només el teu pots veure'l i manipular-lo, seria alguna cosa així com '-rwx-w--w-'.
Canviant permisos
L'ordre que ens permet canviar els permisos als fitxers és:
chmod [opcions] manera fitxer
Com opció únicament comentarem '-R' que fa que el canvi de permisos sigui recursiu, per exemple, per donar els permisos a tots els fitxers d'un directori i els seus descendents.
Hi ha dues formes per a 'manera' a) amb un número b) amb lletres. Per a això descriurem la manera com {a,u,g,o}{+,-}{rwx} on:
a Indica que s'aplicarà a tots.(all)
u Indica que s'aplicarà a l'usuari.(user)
g Indica que s'aplicarà al grup.(group)
o Indica que s'aplicarà a uns altres.(other)
+ Indica que s'afegeix el permís.
- Indica que es lleva el permís.
r Indica permís de lectura.
w Indica permís d'escriptura.
x Indica permís d'execució.
Així que primer indiquem a qui aplicarem el permís, i després quin permís posarem o llevarem. Veiem exemples de la manera:
a+r Permisos de lectura per a tots.
+r Igual que abans, si no s'indica se suposa 'a'.
og-x Lleva permís d'execució a tots menys a l'usuari.
o+rwx Dóna tots els permisos a l'usuari.
o-rwx Lleva els permisos als altres.
Amb tot això només queda fer un exemple de l'execució de 'chmod':
ramon@portatil:˜/temporal/ls -l total 12 -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp2 -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp3 ramon@portatil:˜/temporal/chmod a+rwx tmp ramon@portatil:˜/temporal/ls -l total 12 -rwxrwxrwx 1 ramon ramon 82 2005-04-07 00:16 tmp -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp2 -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp3 ramon@portatil:˜/temporal/
En el cas dels números hem de pensar que cada grup de rwx es comporten com els nombres 421. Així si jo vull que el propietari tingui els permisos rwx assignaré el nombre 7 (4+2+1=7).
Si vull que el grup tingui només lectura r-- assignaré el nombre 4 (4+0+0=4).
L'arxiu tmp2 de l'exemple anterior té els següents permisos '-rw-r--r--'. És a dir:
rw- per al propietari 4+2+0=6
r-- per al grup 4+0+0=4
r-- per als altres 4+0+0=4
Si vull assignar aquests permisos a l'arxiu tmp ho faré de la següent manera:
ramon@portatil:˜/temporal/chmod 644 tmp ramon@portatil:˜/temporal/ls -l total 12 -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp2 -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp3 ramon@portatil:˜/temporal/
Canviant propietari i/o grup
L'ordre chown canvia el propietari i/o grup de cada fitxer a propietari i/o grup.
chown [opció] propietari[:[grup]] fitxer
Exemple:
root@portatil:/home/ramon/temporal # ls -l total 12 -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp2 -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp3 root@portatil:/home/ramon/temporal # chown root:root /home/ramon/temporal/tmp root@portatil:/home/ramon/temporal # ls -l total 12 -rw-r--r-- 1 root root 82 2005-04-07 00:16 tmp -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp2 -rw-r--r-- 1 ramon ramon 82 2005-04-07 00:16 tmp3 root@portatil:/home/ramon/temporal #
Encara que tu siguis l'únic usuari dintre del teu sistema, has de tenir un compte de root. No obstant això, no és gens aconsellable usar sempre root com si fóssim un usuari de Windows, és aconsellable tenir també un compte d'usuari normal. Si optes per usar sempre root per comoditat o perquè no vols adaptar-te a un ús més segur del sistema... tu mateix, però t'arrisques a carregar-te el sistema fàcilment, ja que pots fer "tot" i moltes vegades el sistema ni et demanarà una confirmació, i davant un atac donaràs a l'atacant més facilitat ja que, si aconsegueix que s'executi codi en la teva màquina, aquest codi té via lliure al que vulgui fer.
El millor és usar root simplement quan t'és imprescindible (com canviar una configuració) i després torna al teu usuari normal, això ja ho vam veure amb el comando 'su'. Fins i tot si entres com root en entorn gràfic, quan acabis surt i entra com un usuari normal.
Conceptes de gestió d'usuaris.
El sistema guarda unes dades relatives sobre cada usuari, i aquesta informació es troba en el fitxer /etc/passwd. Cada línia conté informació sobre un usuari en el següent format:
nom:clauencriptada:UID:GID:GECOS:directoriinicial:intèrpret
El primer camp "nom" és el nom de l'usuari, seguidament està la clau encriptada encara que el que tots trobareu segurament és una 'x', i abans de res veurem perquè. Els ':' són simplement un separador entre els camps.
Després ens trobem amb el UID i GID, el primer és l'identificador d'usuari per al sistema i el segon l'identificador de grup primari al que l'usuari pertany, ja que un usuari pot pertànyer a molts grups.
GECOS és un camp opcional per a guardar informació. Normalment conté el nom complet de l'usuari. GECOS significa General Electric Comprehensive Operating System. En aquest camp podem posar el que vulguem ja que el sistema no ho usa per a cap gestió. Es pot ometre sense posar entre els ':'.
El directori inicial és on començarà l'usuari una cop 'loguejat', i l'intèrpret indica quin interpreti d'ordres usarà (bash, sh, tcsh...). Si en el camp intèrpret trobem '/sbin/nologin' és un usuari que no pot loguejar-se, això té sentit ja que el propi sistema té usuaris amb privilegis per donar serveis al sistema com poden ser 'bin', 'daemon', 'adm'...
L'usuari root sempre té com UID i com GID un '0', i qualsevol usuari que ho tingui tindrà els mateixos privilegis que ell. Cal recordar que un usuari només pot tenir un UID, però diversos usuaris poden tenir el mateix UID, cosa totalment desaconsellable perquè pot provocar forats de seguretat importants. Si veus un usuari amb UID=0 que no sigui root, el més segur és que hagis estat atacat per algun cracker.
Normalment el sistema guarda els UID baixos (per exemple per sota de 500 o per sota de 1000) per als usuaris del propi sistema, els quals necessita per als serveis que ofereix (per exemple, si tens un servidor de ftp el normal és tenir un usuari en el sistema que es digui 'ftp'), i els UID alts s'utilitzen per als usuaris normals.
Si on hauria d'aparèixer la clau apareix '::', això indica que no hi ha clau i per descomptat no és gens bo. Si apareix una 'x' és que les claus o la clau d'aquest usuari estan gestionades en l'arxiu /etc/shadow ja que la majoria dels sistemes usen "claus en ombra". Això és degut al fet que /etc/passwd ha de ser visible a tots, perquè si no certes ordres com pot ser 'ls' deixarien de funcionar, i encara que la clau està encriptada no és bo que es trobi a la vista per l'existència de programes de força bruta que es dediquen a desencriptar-les, i qualsevol usuari amb accés al nostre sistema tindria les claus usant aquests programes. En comptes d'això s'usa el fitxer /etc/shadow, que només és visible per root.
Com no és aconsellable per res tocar aquests fitxers manualment, no continuarem amb la descripció del fitxer shadow (qui vulgui veure'l que usi 'man 5 shadow'), en lloc de tocar els fitxers usarem les ordres que ens permeten manegar tot això.
Afegir usuaris
adduser usuari
root@portatil:/ # adduser pepe Afegint usuari pepe... Adding new group `pepe' (1001). Adding new user `pepe' (1001) with group `pepe'. Creant el directori home /home/pepe. Copiant arxius des de /etc/skel Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Canviant la informació d'usuari per a pepe Introdueixi el nou valor, o pressioni ENTER per al predeterminat Nom complet []: Nombre d'habitació []: Telèfon del treball []: Telèfon de casa []: Un altre []: És correcta la informació? [i/N] i root@portatil:/ #
Modificant a l'usuari
usermod [-c comentari] [-d home] [-i data] [-f dies] [-g grup] [-G llista de grups] [-m] [-n] [-p passwd] [-s shell] [-o uid [-o] ] usuari [-L | -O] usuari
Jo puc canviar-me la meva contrasenya?
Imagina't que no estàs en un ordinador teu, sinó que estàs en un sistema en el qual tens un compte d'usuari, seria una molèstia no poder canviar la teva pròpia contrasenya i haver de demanar-ho a l'administrador (a part de no agradar-te que l'administrador sàpiga la teu clau). Doncs per a això la següent ordre:
passwd [opcions] [usuari]
root@portatil:/ # su pepe pepe@portatil:/$ passwd Changing password for pepe (current) UNIX password: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully pepe@portatil:/$
Com veieu ens demana el vell password i 2 vegades el nou (per no equivocar-nos). Pot ser que no ens deixi posar una clau senzilla, si vols fer-lo usa 'passwd' amb l'opció '-o'.
L'únic que pot canviar una contrasenya que no sigui seva és 'root'.
root@portatil:/ # passwd pepe Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully root@portatil:/ #
Eliminant usuaris
userdel [-r] usuari
Simplement elimina a l'usuari que li indiquem (mireu què senzill aquesta vegada, ja se sap que destruir és més fàcil que crear), i com única opció tenim '-r', que elimina el seu directori home amb tots els seus fitxers.
root@portatil:/ # userdel -r pepe root@portatil:/ # ls /home/pepe ls: /home/pepe: No existeix el fitxer o el directori root@portatil:/ #
Cada usuari pertany a un o més grups (encara que només un és el principal), i per això cada fitxer té un usuari i un "grup propietari" (el principal de l'usuari), per dir-lo així.
Igual que hi ha usuaris del sistema, també existeixen grups del sistema tals com grup root, grup bin... i en general, excepte rares excepcions, els usuaris mai han de pertànyer a cap d'aquests grups.
La informació dels grups es guarda en '/etc/group', i igual que els usuaris també poden tenir i és normal tenir les claus sota shadow, concretament el fitxer de shadow per als grups és '/etc/gshadow', i igual que en els usuaris només és accessible pel root. De la mateixa manera que amb els usuaris només explicaré el contingut del primer.
El format de '/etc/group' és el següent:
nomgrup:clau:GID:llista d'usuaris membres
El primer i el segon camp no necessiten explicació ja que és igual que en el d'usuaris (recordeu que si hi ha una x és que la clau està sota shadow). GID és l'identificador de grup i sol coincidir que el UID de l'usuari amb el mateix nom, però no té perquè ser així. I finalment tenim la llista de tots els usuaris que pertanyen a aquest grup.
No és normal que els grups d'usuaris tinguin clau, si coneixeu com és '/etc/gshadow' veureu que el camp de la clau està buit (de fet mireu-lo i veureu que gairebé tots els camps estan en blanc menys el primer i l'últim), no se solen usar mai les claus en els grups (la veritat és que seria molt aclaparador que et demanés la clau de grup també).
Afegint grups
addgroup
Crearem un grup anomenat, per exemple, administratius:
root@portatil:/home/ramon/temporal # addgroup administratius Adding group `administratius' (1001)... Fet. root@portatil:/home/ramon/temporal #
Eliminat els grups
Per a eliminar els nous grups que hem creat usem el senzill comando:
groupdel group
Amb aquesta simple ordre que no té ni opcions eliminarem els grups:
root@portatil:/home/ramon/temporal # groupdel administratius root@portatil:/home/ramon/temporal #
Per acabar la gestió d'usuaris veurem dos ordres que ens poden ser útils:
users
groups usuari
El primer indica els usuaris que estan accedint al sistema, i el segon indica tots els grups als quals pertany un usuari. Exemple:
root@portatil:/home/ramon/temporal # users ramon ramon root@portatil:/home/ramon/temporal # groups ramon ramon : ramon adm dialout cdrom floppy àudio dip video plugdev lpadmin scanner root@portatil:/home/ramon/temporal #
du [opció]... [fitxer]...
Mostra un resum de l'ús de disc per a cada fitxer, recursivamente per a directoris.
-h, mostra el resultat en format "humà" (ex., 1K 234M 2G)
-s, mostra solament un total per a cada argument
ramon@portatil:$ du -hs * 48K bookmarks.html 70M descàrregues 32K Desktop 47M docs 148K documents 9,9M fotos 9,9M proferamon.com 16K ˜/temporal 33M uoc ramon@portatil:$
df [opció]... [fitxer]...
Mostra informació sobre el sistema de fitxers en el qual resideix cada fitxer, o per omissió sobre tots els sistemes de fitxers.
ramon@portatil:$ df -h S.fitxers Grandària Usada Disp Ús% Muntat en /dev/hda7 11G 2,9G 7,0G 29% / tmpfs 126M 0 126M 0% /dev/shm /dev/hda1 10G 3,8G 6,3G 38% /mitjana/windows/c /dev/hda5 7,0G 3,0G 4,1G 42% /mitjana/windows/d /dev 11G 2,9G 7,0G 29% /.dev none 5,0M 2,8M 2,3M 56% /dev ramon@portatil:$
find
Busca arxius
opció -iname patró
ramon@portatil:$ find -iname *.html ./.mozilla/firefox/7ovdoc0g.default/bookmarks.html ./bookmarks.html ./documents/bookmarks.html ./docs/bookmarks.html ramon@portatil:$
Fer un llistat de tots els arxius de grandària 0 en ordre alfabètic descendent.
Solució:
root@portatil:/ # find / -size 0 | sort -r > /home/ramon/exercici root@portatil:/ # cat /home/ramon/exercici /var/spool/postfix/public/showq /var/spool/postfix/public/qmgr /var/spool/postfix/public/pickup /var/spool/postfix/public/flush /var/spool/postfix/public/cleanup /var/spool/postfix/private/virtual /var/spool/postfix/private/verify .......... (ometo part de la llista perquè no ocupi tant)........... /.dev/ataraid/d0p12 /.dev/ataraid/d0p11 /.dev/ataraid/d0p10 /.dev/ataraid/d0p1 /.dev/ataraid/d0 /.dev/apmbios /dev/agpgart /.dev/agpgart /dev/adsp root@portatil:/ #