Certificat | LPIC-1 |
Examen: | 101 (torneu a la resta de temes) |
Fitxers: | LPI104.5_Administrar_permisos_i_propietaris_de_fitxers.pdf (LPI104.5_Administrar_permisos_i_propietaris_de_fitxers.odp), UD_8_6_permisos_arxius.pdf |
Objectius: | http://www.lpi.org/eng/certification/the_lpic_program/lpic_1/exam_101_detailed_objectives |
Dipòsit SVN: | https://svn.projectes.lafarga.cat/svn/lpi/Materials/Examen_101/104.5 |
Usuari: | anonymous |
Paraula de pas: | qualsevol paraula de pas |
104.5. Administrar permisos i propietaris de fitxers | |
---|---|
![]() |
|
![]() |
Àrees Clau de Coneixement:
|
![]() |
La següent és una llista parcial de fitxers, termes i utilitats utilitzades: |
![]() |
Apunts: LPI 104.5. Administrar permisos i propietaris de fitxers |
Linux és un sistema operatiu multiusuari que permet tenir múltiples usuaris treballant alhora al sistema. Sovint, cada usuari disposa d'una carpeta pròpia, la qual, normalment i segons l'estàndard FHS, es troba al directori /home. En aquesta carpeta, els usuaris tenen els fitxers propis però comparteixen amb la resta d'usuaris els serveis proporcionats pel sistema operatiu, les aplicacions, les impressores i altre maquinari, la xarxa, etc.
En aquest escenari, es fa necessari protegir certs arxius, i és aquí on entren en joc els permisos. La seguretat és un tema molt important en sistemes operatius multiusuari, i en el cas dels fitxers, els permisos són el mecanisme de control d'accés proporcionat per defecte en sistemes de fitxers Linux.
NOTA: Recordeu que de fet a Linux, tot són fitxers (dispositius de maquinari, enllaços, endolls, conductes, etc...) i per tant, si disposem d'un sistema de control d'accés als fitxers, també disposem d'un sistema de control d'accés al maquinari, als endolls, als conductes, etc...
IMPORTANT: Cal que tingueu en compte, que els permisos són un mecanisme proporcionat pel sistema de fitxers. Alguns sistemes de fitxers com FAT32 o NTFS no suporten permisos de Linux, i l'accés que tinguem als fitxers d'aquest sistemes, dependrà de com hem muntat el sistema de fitxers. Consulteu l'objectiu LPI_104.1 (Crear particions i sistemes de fitxers), per tal d'obtenir més informació.
Un dels mecanismes de control d'accés més utilitzat és el sistema de permisos tradicionals de Unix. Tots els derivats de Unix (i sistemes compatibles amb POSIX) com Linux o Mac OS X suporten aquest sistema.
NOTA: Existeixen altres mecanismes de protecció de fitxers com les llistes de control d'accés. Aquest mecanismes són utilitzats en sistemes operatius com OpenVMS o sistemes Windows NT i derivats (Windows 2000, Windows XP...) i també es poden implementar a Linux. Altres sistemes operatius no suporten protecció de fitxers, com DOS i les seves variants (Windows 95, Windows 98, Windows Me...)[1]
Establir els permisos d'un fitxer permet determinar explícitament, qui té drets (i quin tipus de drets te) d’accés a aquest arxiu. Molt relacionat amb el concepte de permisos d'un fitxer, existeix el concepte de propietari d'un fitxer. La combinació de propietari i permisos d'un fitxer, estableix el que un usuari concret pot fer amb aquest fitxer. Tots dos conceptes estan molt lligats, ja que els permisos no tenen sentit sense propietaris i els propietaris no tenen sentit sense permisos.
Hi han dos nivells de propietat d'un fitxer:
Els mecanismes per assignar permisos a un propietari o a un grup són similars però no idèntics.
NOTA: Els drets d’accés a un arxiu s’anomena també “mode” en Unix.
Linux classifica als usuaris en tres tipus:
NOTA: Aquest tipus també són coneguts com entitats
Per cadascuna de les entitats, podem assignar els següents permisos:
A aquests bits se'ls anomena també bits de permisos (permision bits).
Les següents propietats s'apliquen a un fitxer amb permisos de lectura:
$ cd $ sudo mkdir -c carpeta/carpeta_oculta $ chmod 700 carpeta $ ls carpeta ls: no s’ha pogut obrir el directori carpeta: Permission denied $ sudo ls carpeta carpeta_oculta
Directoris:
Directoris:
Les restriccions d'accés no s'apliquen a l'usuari root. Aquest usuari pot llegir o modificar qualsevol fitxer, fins i tot aquells als que no té permisos, per exemple un fitxer amb permisos 000.
Però fins i tot el superusuari necessita també el bit d'execució per executar un programa:
$ su # whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1/ls.1posix.gz # ls -l /bin/ls -rwxr-xr-x 1 root root 96216 2008-06-27 02:31 /bin/ls # chmod 644 /bin/ls # ls bash: /bin/ls: Permission denied # chmod 755 /bin/ls
Cal tenir en compte però que el superusuari pot modificar els permisos de qualsevol fitxer amb chmod.
.NOTA: Sí que es possible que el superusuari no pugui modificar un sistema de fitxers muntat com a només lectura. Cal però, fer notar que root podria tornar a muntar el sistema amb uns altres permisos
Es basa en els caràcters:
Consulteu l'ordre chmod per saber com es poden canviar els permisos d'un fitxers utilitzant aquesta notació.
La notació binaria, és la codificació en 3 bits dels permisos de cada entitat. Posant el bit a 1 quan el permís corresponent està actiu i a 0 quan no ho està. Per exemple:
101 és la codificació dels permisos r-x
Un número de 3 bits pot codificar-se en una sola xifra de base octal:
Permisos (simbòlic) | Notació binaria | Notació octal |
---|---|---|
--- | 000 | 0 |
--x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r-- | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
Repetint això per a les 3 entitats, els permisos rwxr-xr-- pot traduir-se en notació octal per 754.
Per als permisos SUID, SGID i Sticky, s’afegeix a aquest número de base octal una xifra suplementària a l’esquerra, segons la relació:
Permisos (simbòlic) | Notació binaria | Notació octal |
---|---|---|
--- | 000 | 0 |
--t | 001 | 1 |
-s- | 010 | 2 |
-st | 011 | 3 |
s-- | 100 | 4 |
s-t | 101 | 5 |
st- | 110 | 6 |
stt | 111 | 7 |
Per exemple la notació octal 2754 són els permisos rwxr-sr--.
Una altra forma ràpida de convertir els permisos de Unix a notació octal és sumar els valors 4, 2 i 1 per a cada conjunt de 3 permisos quan estan actius.
SUID ve de Set User ID. Aquesta opció s'utilitza conjuntament amb fitxers amb permisos d'execució i indica al sistema operatiu que el programa s'ha d'executar amb els permisos del propietari del fitxer i no pas amb els permisos de l'usuari que executa el fitxer.
Per exemple es pot utilitzar per tal d'executar fitxers com a superusuari sense ser root. El fitxer ha de pertànyer al superusuari, ser executable i tenir el bit especial d'execució SUID.
Aquesta opció es força utilitzada en alguns serveis. Els programes que s'executen d'aquesta forma són anomenats SUID root.
Els fitxers amb aquest permís s'indiquen amb una s al bit d'execució del propietari. Per exemple, l'ordre ping en alguns sistemes com Ubuntu:
# ls -l /bin/ping -rwsr-xr-x 1 root root 30856 2007-12-10 18:33 /bin/ping
Té el SUID activat, per què la creació de paquets ICMP requereix accés de superusuari.
NOTA: Activar el SUID en un directori no té cap sentit ni utilitat
IMPORTANT: Per raons de seguretat, els permisos especials SUID i SGID funcionen únicament amb arxius binaris (codi compilat) i no amb els scripts (exceptuant els scripts Perl)
Cal tenir en compte que els fitxers que no són d'execució i tenen el SUID marcat, es mostren amb una S (s majúscula) en compte de s minúscula:
$ ls -la | grep prova -rwSr--r-- 1 sergi sergi 0 2009-11-14 11:53 prova_setuid $ ./prova_setuid bash: ./prova_setuid: Permission denied
Per afegir aquest bit amb chmod:
$ sudo chmod u+s nom_fitxer
per treure'l:
$ sudo chmod u+s nom_fitxer
SGID ve de Set Group ID. El que fa el SGID depèn de si es tracta d'un fitxer o de un directori:
NOTA: Tant el SUID com el GUID són bits potencialment insegurs. Només cal utilitzar-los quan no hi ha un altre remei i cal que els programes que els utilitzin estiguin ben programats per tal d'evitar escalades de privilegis
Cal tenir en compte que els fitxers que no són d'execució per al grup i tenen el GID marcat, es mostren amb una S (s majúscula) en compte de s minúscula:
$ ls -la | grep prova -rwxrwSr-- 1 sergi sergi 0 2009-11-14 11:53 prova_gid
Per activar-lo amb chmod:
$ sudo chmod g+s nom_fitxer
Per desactivar-lo:
$ sudo chmod g-s nom_fitxer
Que passa si:
What if you:
mv a file into an SGID directory? -- It keeps its current GID.
cp a file into an SGID directory? -- It inherits the GID of the directory.
mkdir inside an SGID directory? -- It inherits the GID of the enclosing directory and is also marked SGID.
L'Sticky bit o bit enganxifós, ha tingut diferents significats durant la història de Unix. En la majoria de sistemes operatius moderns, aquest bit especial s'utilitza per evitar que certs fitxers siguin esborrats per persones que no siguin propietàries del fitxer. Quan aquest bit està present en un directori, els fitxers del directori només poden ser eliminats pels seus propietaris o pel superusuari.
El bit enganxifós s'indica amb una t al bit d'execució de l'entitat altres.
NOTA: En un fitxer, l'sticky bit històricament feia que l'executable seguis en memòria fent més ràpida la seva execució. Actualment Linux ignora aquest bit en fitxers
Cal tenir en compte que els fitxers o directoris que no són d'execució per a la resta d'usuaris i tenen el sticky bit marcat, es mostren amb una T (t majúscula) en compte de t minúscula:
$ ls -la | grep prova drwxrwxrwT 1 sergi sergi 0 2009-11-14 11:53 prova_setuid
Per modificar l'sticky bit amb chmod:
Afegir:
$ chmod o+t directori
Treure:
$ chmod o-t directori
Recursos:
Els drets estàndard de Unix fan que tot usuari amb els permisos rwx sobre un directori pugui crear arxius en ell, però també esborrar tots els que es troben en ell. El directori temporal /tmp permet a qualsevol usuari emmagatzemar els seus propis arxius, però per evitar que esborri els arxius d’altres, s’ha d’activar el permís Sticky:
$ ls –ld /tmp drwxrwxrwt 5 root root 4096 jun 3 02:32 /tmp/ $ touch /tmp/arxiudewilly $ ls –l /tmp total 0 -rw-r--r-- 1 nicolas curs 0 jun 2 02:32 arxiudenicolas -rw-r--r-- 1 willy tecnic 0 jun 3 02:32 arxiudewilly $ rm /tmp/arxiudenicolas rm:borrar un archivo protegido en escritura archivo normal vacío ‘/tmp/arxiudenicolas’? S rm:no se puede borrar ‘/tmp/arxiudenicolas’: Operation not permitted
NOTA: Els enllaços simbòlics sempre apareixen a la sortida de ls amb tots els permisos: $ ls -l /etc/rc3.d/S16ssh lrwxrwxrwx 1 root root 13 2009-06-22 21:13 /etc/rc3.d/S16ssh -> ../init.d/ssh En cap cas però, un enllaç simbòlic ens permetrà accedir a un fitxer al que no teníem accessos. Sempre podem crear un enllaç simbòlic a un fitxer que ens sigui visible en una carpeta en la que tinguem permisos d'escriptura. En canvi, les operacions de lectura i de modificació de l'enllaç són operacions de lectura i modificació al fitxer enllaçat i s'apliquen les restriccions del fitxer enllaçat. L'operació d'eliminació d'un enllaç, només pot ser realitzada pel propietari de l'enllaç.
Permís | Símbol (en notació simbòlica) | Símbol (en notació octal) | Permisos sobre fitxers | Permisos sobre directoris |
---|---|---|---|---|
Read | r | 4 | Examinar els continguts, copiar el fitxer (ordre cp). | Llistar el contingut del directori |
Write | w | 2 | Modificar els continguts, modificar el nom o el camí (ordre mv) o eliminar el fitxer (ordre rm). | Crear i esborrar fitxers dins del directori. |
Execute | x | w | Executar fitxers | Llegir i escriure fitxers ja existents al directori. |
L'examen 101 no compte cap tema de gestió d'usuaris. Aquest tema es veu a l'examen 102.
Consulteu 107.1_Gestionar_comptes_d'usuaris_i_grups_i_els_fitxers_de_sistema_relacionats#Usuaris.
Consulteu 107.1_Gestionar_comptes_d'usuaris_i_grups_i_els_fitxers_de_sistema_relacionats#Grups
Com ja hem comentat al tema LPI_103.1 (Treballar a la línia d'ordres), l'ordre que ens permet consultar els permisos d'un fitxer és ls (també podem utilitzar stat) amb l'opció -l (long list format):
$ ls -l total 4948900 -rw-r--r-- 1 vlino vlino 644666 2009-09-11 08:03 des-Per.pdf
On els permisos són la cadena de caràcters de la primera columna de sortida. A l'exemple:
-rw-r--r--
Els permisos estan dividits en quatre seccions:
La primera secció (el primer caràcter), descriu el tipus d’arxiu. Ens podem trobar, entre d'altres, les següents possibilitats:
d: directori -: fitxer b: Dispositiu de blocs ( Per exemple un disc) c: Dispositiu de caràcters ( Per exemple un teclat) l: Enllaç simbòlic s: socket
Les següents tres seccions estan formades per tres caràcters cadascuna, i mostren els permisos per a les tres categories d’usuaris o entitats:
Consulteu chown. També es poden utilitzar eines gràfiques com Nautilus o Konqueror per tal de gestionar els permisos d'un fitxer
Consulteu chmod. També es poden utilitzar eines gràfiques com Nautilus o Konqueror per tal de gestionar els permisos d'un fitxer
Consulteu també find.
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
Chmod vol dir Change Mode (canviar el mode). Com ja us hem comentat abans, el mode es un altre forma de referir-se als permisos d'un fitxer. Per tant, chmod permet canviar els permisos (o “mode”) dels arxius. Només el propietari de l’arxiu i l’administrador del sistema (root) poden utilitzar-lo, però cal tenir en compte que el propietari no podrà assignar el fitxer a un altre usuari (només pot canviar el grup i sempre que sigui a un grup al qual pertany).
La sintaxi és:
$ chmod [-R] <permisos> <arxiu ...>
On:
Vegem primer alguns exemples de modificació de permisos amb notació simbòlica. Es basa en els caràcters:
Per afegir o treure permisos podem utilitzar els símbols:
Vegem alguns exemples:
La resta de permisos (bits de permisos especials) s’activen amb:
Exemples:
Vegem ara la notació octal. La sintaxi és:
$ sudo chmod xyz fitxer
on:
I on xyz són un número que es calcula de la forma següent. Cada x,y o z serà la suma de:
Per tant un valor entre 0 i 7 on:
Alguns exemples:
Establir tots els permisos per a tothom':
$ sudo chmod 777 fitxer
Establir tots els permisos per al propietari:
$ sudo chmod 700 fitxer
Permisos per defecte (sinó es modifica umask) de fitxers:
644
Permisos per defecte (sinó es modifica umask) de carpetes:
755
Establir permisos d'execució per a tothom:
$ sudo chmod +x fitxer_executable
Establir permisos de forma recursiva:
$ sudo chmod -R 644 carpeta
NOTA: Atenció! Executar aquesta comanda pot tenir repercussions imprevistes segons com i on es faci. Per exemple segurament no volem aplicar els mateixos permisos a carpetes que a fitxers! Consulteu la comanda find per canviar permisos només a fitxers o només a directoris:
Recursos:
Vegeu: sftp umask
Els permisos d’accés predeterminats dels fitxers acabats de crear, es defineixen pel valor d’una màscara ("file mode creation mask") que s’aplica al conjunt de permisos estàndard. Els sistemes operatius moderns Linux, permeten indicar la màscara de dos maneres:
NOTA: Umask pot ser un valor confús ja que les dos opcions que hi ha són antagòniques. Una estableix en positiu i l'altre en negatiu! A més veure que hi ha dos valors de referència, segons parlem de fitxers o directoris
L'ordre umask (user mask), per defecte, mostra el valor de la màscara en notació octal:
$ umask 0022
NOTA: El primer 0 només indica que la notació és octal
També podem consultar el valor de la màscara en notació simbòlica:
$ umask -S u=rwx,g=rx,o=rx
Que és el valor per defecte dels fitxers.
Com podeu veure el valor habitual de la màscara és 0002 en notació octal, que seria en notació simbòlica -------w-. Però com la notació simbòlic indica el que volem no el que no volem cal restar dels valors de referència. Hi ha dos valors de referència, segons es tracti d'un fitxer o directori:
Així els permisos per defecte són:
Directoris Valor de referència --> 0777 Màscara (umask) --> 0022 Permisos per defecte dels fitxers acabats de crear --> 0755 --> rwxr-x-r-x
Fitxers: Valor de referència --> 0666 Màscara (umask) --> 0022 Permisos per defecte dels fitxers acabats de crear --> 0644 --> rwxr-x-r-x
Tal com podeu comprovar si executeu:
$ mkdir umask; cd umask $ mkdir directori $ mkdir fitxer $ ls -l total 8 drwxr-xr-x 2 sergi sergi 4096 2009-11-01 18:12 directori drwxr-xr-x 2 sergi sergi 4096 2009-11-01 18:12 fitxer
L'ordre umask també permet modificar el valor de la màscara. Per exemple:
$ umask u=rwx,g=rwx,o= $ mkdir fu $ touch bar $ ls -l drwxrwx--- 2 dave dave 512 Sep 1 20:59 fu -rw-rw---- 1 dave dave 0 Sep 1 20:59 bar
El valor de la màscara s'aplica només durant la duració de la sessió i per a l'usuari que ha modificat la màscara, és a dir, es torna a restaurar el valor per defecte al finalitzar una sessió o obrir una nova terminal. Tot els processos executats des de una terminal a la que se li ha canviat el valor de la màscara, hereten la nova màscara.
Per establir per defecte una nova màscara, caldria modificar la configuració de la shell (p. ex. el fitxer ~/.bashrc a nivell d'usuari o /etc/profile a nivell de sistema).
NOTA: Si el valor de la màscara supera el valor per defecte (en el cas dels fitxers) el resultat és 0. Per exemple, una màscara 027 si es resta al valor per defecte 666 queda com a resultat 640 i no pas 64-1
Consulteu mount, per veure com es pot establir la màscara per defecte d'alguns sistemes de fitxers (fat, hfs, hpfs, ntfs) en el moment de muntar-los.
Aquesta comanda ens permet canviar el propietari d'un fitxer. Només pot canviar el propietari d'un fitxer el superusuari del sistema (però el propietari d'un fitxer pot canviar el grup d'un fitxer que és seu). Exemples:
Establir propietari i grup d'un fitxer:
$ sudo chown usuari:grup fitxer
Establir propietari d'un fitxer:
$ sudo chown usuari:grup fitxer
Establir grup d'un fitxer:
$ sudo chown :grup fitxer
O si ets els propietari:
$ chown usuari:grup fitxer
Establir propietari de forma recursiva:
$ chown -R usuari:grup carpeta
NOTA: Atenció! Executar aquesta comanda pot tenir repercussions imprevistes segons com i on es faci.
Consulteu el manual per a obtenir una referència de totes les opcions possibles:
$ man chown
Podeu consultar també el manual a Internet:
També podeu utilitzar info:
$ info coreutils 'chown invocation'
chgrp ve de change Group. El grup per defecte assignat als nous arxius és el grup principal de l’usuari que l’ha creat, a menys que estigui habilitat el permís SGID en el directori on es crea el fitxer. L'ordre chgrp permet canviar aquest grup; l’usuari pot cedir l’arxiu a qualsevol grup al qual pertanyi:
$ chgrp [-R] <grup> <arxiu ...>
on -R indica a la comanda que apliqui el canvi de forma recursiva (és a dir, a tots els arxius i subdirectoris del directori indicat com a paràmetre)
$ id uid=506(alex) gid=502(vendes) grupos=502(vendes),503(compta) $ touch arxiu $ ls -l arxiu -rw-r--r-- 1 alex vendes 0 jun 3 03:58 arxiu $ chgrp comptabilitat arxiu -rw-r--r-- 1 alex compta 0 jun 3 03:58 arxiu
L'ordre chown (“change owner”) també permet canviar el propietari d’un arxiu però només l’administrador té els permisos necessaris per executar aquesta ordre.
Mostra els groups d'un usuari i a més els seus identificadors (uid i gid)
$ id uid=1000(sergi) gid=1000(sergi) grups=4(adm),20(dialout),24(cdrom),46(plugdev),106(lpadmin),121(admin),122(sambashare),1000(sergi)
Permet consultar els grups d'un usuari. Sense opcions mostra els grups de l'usuari que executa l'ordre:
$ groups sergi adm dialout cdrom plugdev lpadmin admin sambashare
Però també podem consultar els grups als que pertany un altre usuari:
$ groups root root : root
Vegeu també l'ordre id.
Consulteu whoami