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

Els permisos dels fitxers

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 #
Gestió d'usuaris

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:/ # 
Gestió de grups

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 #
Altres ordres

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

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:/ #

copyleft © 2014 ramon lopez
última actualització 16/09/14 17:23