Una màquina Linux està compartida per molts usuaris, la majoria són usuaris de sistema i altres són usuaris "humans".
Introducció
Crea una màquina virtual amb Box tal com s'explica a Windows Subsytem for Linux (WSL):
> connect-wsl user -new
Com probablement saps, cada sistema Linux té una entitat anomenada Usuari que realitza una sèrie de tasques de gestió del sistema. Cada usuari tindrà un ID únic anomenat UID (ID d'usuari) i GID (ID de grup). De la mateixa manera, hi ha una altra entitat disponible anomenada grups que no és altra cosa que la col·lecció d'usuaris que té el seu propi paper. La gestió d'usuaris i grups és una part integral de l'administració del sistema Linux que s'ha d'entendre amb detall.
Bàsicament hi ha dos tipus d'usuaris a Linux:
- Usuaris humans
- Usuaris del sistema
Usuaris humans
Cada usuari té un únic UID
(User ID) i GID
(Group ID). Sempre que es crea un usuari, és propietari d'un directori personal on es poden emmagatzemar tots els fitxers i carpetes personals.
Exemple. Creea un nou usuari. Observarem que cada vegada que es crea un nou usuari, també es crea el seu directori d'inici:
$ ls /home
box
$ sudo adduser eric
Adding user `eric' ...
Adding new group `eric' (1002) ...
Adding new user `eric' (1001) with group `eric' ...
Creating home directory `/home/eric' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for eric
...
Is the information correct? [Y/n] y
$ ls /home/
box eric
Els usuaris humans són només de dos tipus:
-
Usuari
root
. També conegut com a superusuari que té tots els privilegis i té tot el control per fer qualsevol cosa al sistema. -
Usuari comú. També conegut com a usuaris sense privilegis té drets limitats per operar amb els fitxers i el directori que els pertany . Els usuaris normals poden rebre diferents nivells de privilegis o privilegis complet de root segons la necessitat i el requisit.
Per suprimir un compte d'usuari i el seu grup principal, utilitzeu la sintaxi següent:
$ sudo userdel eric
$ ls /home/
box eric
L'eliminació d'un compte no elimina la seva carpeta d'inici respectiva. Depèn de tu si vols o no suprimir la carpeta manualment o conservar-la segons les vostres polítiques de retenció desitjades.
Recorda que qualsevol usuari afegit posteriorment amb el mateix UID/GID que l'anterior propietari ara tindrà accés a aquesta carpeta si no heu pres les precaucions necessàries.
És possible que vulgueu canviar aquests valors UID/GID per alguna cosa més apropiat, com ara el compte root, i potser fins i tot reubicar la carpeta per evitar conflictes futurs:
$ sudo chown root:root /home/eric/
$ sudo mv /home/eric /home/archived-eric
$ ls -l /home
total 8
drwxr-x--- 2 root root 4096 Sep 15 07:36 archived-eric
drwxr-x--- 4 box box 4096 Sep 15 07:36 box
Més endavant veurem que fan exactament aquestes comandes
Usuaris del sistema
Els usuaris del sistema executen principalment serveis i processos del sistema en segon pla, també coneguts com a processos no interactius. Els usuaris del sistema no són propietaris del directori d'inici. Podem trobar tots els detalls dels usuaris creats al fitxer /etc/passwd
tots els detalls dels grups actius al fitxer /etc/group
.
L'usuari root té els privilegis per afegir, suprimir i actualitzar qualsevol usuari i grup . A continuació es mostra l'ordre útil per realitzar qualsevol operació sobre usuaris i grups.
useradd
L’ordre useradd
crear un nou usuari de sistema
$ sudo useradd robot
$ grep robot /etc/passwd
robot:x:1002:1003::/home/robot:/bin/sh
Si fas un ls /home
pots veure que no s’ha creat una carpeta d’usuari:
$ ls /home
archived-eric box
Abans hem vist que el fitxer /etc/passwd
diu que el home de robot és /home/robot
, però si no té carpeta llavors que passa:
box@user:~$ sudo su robot
$ cd
sh: 1: cd: can't cd to /home/robot
$ exit
box@user:~$
El sistema operatiu no distingeix entre usuaris humans i de sistema, intenta anar al directori home indicat, no existeix i dona error.
Si vols crear un usuari de sistema “pur” pots fer servir aquests modificadors en l’ordre useradd
:
box@user:~$ sudo useradd -r -d /tmp -s /bin/false discover
box@user:~$ grep discover /etc/passwd
discover:x:998:998::/tmp:/bin/false
box@user:~$ sudo su discover
box@user:~$
El home de l'usuari discover és /tmp
i no pot iniciar una sessió interactiva.
userdel
L’ordre userdel
elimina un usuari existent:
$ sudo userdel robot
$ grep robot /etc/passwd
groupadd
→ per crear un nou grup
$ sudo groupadd smx
$ grep smx /etc/group
smx:x:1003:
groupdel
→ per eliminar un grup existent
$ sudo groupdel smx
$ grep smx /etc/group
usermod
→ fer canvis als usuaris existents. Hi ha moltes operacions que es poden realitzar un cop creat l'usuari, com afegir el comentari, canviar la contrasenya, canviar el directori d'inici, etc.
Un d'aquests exemples es mostra a continuació.
Estem canviant el directori d'inici de l'usuari alumne des de /home/alumne
a /home/david
.
$ sudo adduser alumne
$ grep alumne /etc/passwd
alumne:x:1001:1002:,,,:/home/alumne:/bin/bash
$ sudo usermod -d /home/david alumne
$ grep alumne /etc/passwd
alumne:x:1001:1002:,,,:/home/david:/bin/bash
Ara alumne ja no pot accedir al home modificat perquè no existeix la carpeta /home/david
:
$ sudo su alumne
$ cd
bash: cd: /home/david: No such file or directory
$
passwd
→ crear o canviar la contrasenya per a qualsevol usuari
$ sudo passwd alumne
New password:
Retype new password:
passwd: password updated successfully
Com trobar l'UID i el GID d'un usuari
Per trobar l'UID o el GID de qualsevol usuari, només cal que executeu l'ordre següent.
id
→ per veure l'UID i el GID de l'usuari actual (puc veure a tots els grups als que pertanyo)
$ id
uid=1000(box) gid=1001(box) groups=1001(box),27(sudo),1000(docker)
Aquesta informació està en el fitxer /etc/group
:
$ grep box /etc/group
sudo:x:27:box
docker:x:1000:box
box:x:1001:
id user_name
→ per veure l'UID i el GID d'un usuari concret
$ id alumne
uid=1001(alumne) gid=1002(alumne) groups=1002(alumne)
Crea un usuari del sistema
Els usuaris del sistema també es poden crear utilitzant useradd
amb alguns indicadors addicionals a l'ordre. A continuació estem creant un usuari del sistema anomenat robot
on
r
→ crear un usuari del sistema amb un ID real en l'interval numèric correcte per als usuaris del sistemas
→ especifica l'intèrpret d'ordres d'inici de sessió/bin/false
→ ordre dummy que impedeix que l'usuari iniciï sessió al sistema.
$ sudo useradd -rs /bin/false robot
$ grep robot /etc/passwd
robot:x:998:998::/home/robot:/bin/false
$ grep alumne /etc/passwd
alumne:x:1001:1002:,,,:/home/david:/bin/bash
root
En tot sistema Linux existeix un usuari root
que pot fer el que vulgui en el sistema operatiu.
Els desenvolupadors d'Ubuntu van prendre una decisió conscient de desactivar el compte administratiu root de manera predeterminada a totes les instal·lacions d'Ubuntu. Això no vol dir que el compte root s'hagi suprimit o que no s'hi pugui accedir. Simplement se li ha donat un hash de contrasenya que no coincideix amb cap valor possible, per tant pot no iniciar sessió directament per si mateix.
En canvi, es recomana als usuaris que facin ús d'una eina amb el nom de sudo
(tal com hem fet abans) per dur a terme les tasques administratives del sistema. sudo
permet a un usuari autoritzat elevar temporalment els seus privilegis utilitzant la seva pròpia contrasenya en lloc d'haver de conèixer la contrasenya que pertany al compte root. Aquesta metodologia senzilla però eficaç proporciona responsabilitat per a totes les accions de l'usuari i ofereix a l'administrador un control granular sobre quines accions pot realitzar un usuari amb aquests privilegis.
Si per algun motiu vols treballar directament com a root pots executar aquesta comanda:
box@user:~$ sudo su
root@user:/home/box#
Com pots veure el prompt ha canviat:
- L’usuari és root enlloc de box.
- La carpeta
/home/box
no és el directori d’inici de root, per això es mostra el camí complet enlloc de fer servir el símbol~
. - El símbol final és
#
(de root) enlloc de$
(qualsevol usuari menys root)
Si vols anar al directori d'inici de root:
# cd
# pwd
/root
Per tornar a l’usuari anterior fes servir la comanda exit
o Ctrl + D:
# exit
exit
$
sudo
Sudo significa SuperUser DO i s'utilitza per accedir a fitxers i operacions restringides. De manera predeterminada, Linux restringeix l'accés a determinades parts del sistema evitant que els fitxers sensibles es vegin compromesos.
L’ordre sudo
eleva temporalment els privilegis permetent als usuaris completar tasques sensibles sense iniciar sessió com a usuari root.
Per a la majoria de distribucions modernes de Linux, un usuari ha d'estar al grup sudo
, sudoers
o wheel
per utilitzar l’ordre sudo
.
A Debian/Ubuntu, el grup sudo
controla els usuaris sudo
.
Com has comprovat abans l’usuari box pot executar l'ordre sudo
ja que pertany al grup sudo.
Exemple
Si canviem a l'usuari alumne
, podem verificar que aquest no pot fer servir la comanda sudo
:
box@user:~$ sudo su alumne
alumne@user:/home/box$ sudo apt update
[sudo] password for alumne:
alumne is not in the sudoers file. This incident will be reported.
alumne@user:/home/box$ exit
exit
box@user:~$
Ara afegim a l'usuari alumne al grup sudo
amb l'ordre següent:
$ sudo usermod -aG sudo alumne
$ id alumne
uid=1003(alumne) gid=1004(alumne) groups=1004(alumne),27(sudo)
$ grep ^sudo /etc/group
sudo:x:27:box,alumne
Ara podem canviar a l'usuari alumne
i podem fer servir l'ordre sudo
:
box@user:~$ sudo su alumne
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
alumne@user:/home/box$ sudo apt update
[sudo] password for alumne:
Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
...
alumne@user:/home/box$ exit
exit
box@user:~$
Per eliminar a l'usuari alumne
del grup sudo
:
box@user:~$ sudo gpasswd -d alumne sudo
Removing user alumne from group sudo
Contrasenya
Una política de contrasenyes sòlida és un dels aspectes més importants de la vostra postura de seguretat. Moltes bretxes de seguretat reeixides impliquen simples atacs de força bruta i diccionaris contra contrasenyes febles. Si teniu intenció d'oferir qualsevol forma d'accés remot que inclogui el vostre sistema de contrasenyes local, assegureu-vos d'abordar adequadament els requisits mínims de complexitat de la contrasenya, la vida útil màxima de la contrasenya i les auditories freqüents dels vostres sistemes d'autenticació.
Longitud mínima de la contrasenya
Per defecte, Ubuntu requereix una longitud mínima de contrasenya de 6 caràcters, així com algunes comprovacions bàsiques d'entropia. Aquests valors es controlen al fitxer /etc/pam.d/common-password
, que es descriu a continuació:
$ grep ^password /etc/pam.d/common-password
password [success=1 default=ignore] pam_unix.so obscure yescrypt
password requisite pam_deny.so
password required pam_permit.so
Has d’editar el fitxer amb nano
:
$ sudo nano /etc/pam.d/common-password
I fer aquesta modificació (afegir minlen=8
):
password [success=1 default=ignore] pam_unix.so obscure yescrypt minlen=8
Nota. Les comprovacions bàsiques d'entropia de contrasenya i les regles de longitud mínima no s'apliquen a l'administrador que utilitza ordres de nivell sudo per configurar un nou usuari.
Activitat
Crea un usuari nou que s’anomeni toto
amb una contrasenya de menys de 8 caràcters (no cumpleix la política de contrasenyes):
$ sudo adduser toto
Adding user `toto' ...
Adding new group `toto' (1006) ...
Adding new user `toto' (1004) with group `toto' ...
Creating home directory `/home/toto' ...
Copying files from `/etc/skel' ...
New password: pp
Retype new password: pp
Prova de canviar la contrasenya de toto
desde l'usuari toto
(ell si que ha de cumplir la política de contrasenyes):
$ sudo su toto
$ passwd
Changing password for toto.
Current password: pp
New password: tt
Retype new password: tt
You must choose a longer password.
New password: tttttttt
Retype new password: tttttttt
Caducitat de la contrasenya
Quan crees comptes d'usuari, haus d'establir com a política una edat mínima i màxima de la contrasenya que obligui els usuaris a canviar les seves contrasenyes quan caduquin.
Per veure fàcilment l'estat actual d'un compte d'usuari, utilitzeu la sintaxi següent:
$ sudo chage -l toto
Last password change : Sep 11, 2023
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
La sortida següent mostra fets interessants sobre el compte d'usuari, és a dir, que no s'apliquen polítiques.
Per establir qualsevol d'aquests valors, només cal que utilitzeu la sintaxi següent i seguiu les instruccions interactives:
$ sudo chage toto
Changing the aging information for toto
Enter the new value, or press ENTER for the default
Minimum Password Age [0]:
...
El següent és també un exemple de com podeu canviar manualment la data de caducitat explícita (-E) a 31/01/2024, edat mínima de la contrasenya (-m) de 5 dies, edat màxima de la contrasenya (-M) de 90 dies, inactivitat període (-I) de 30 dies després de la caducitat de la contrasenya i un període d'advertència (-W) de 14 dies abans de la caducitat de la contrasenya:
sudo chage -E 01/31/2024 -m 5 -M 90 -I 30 -W 14 alumne
Per verificar els canvis, utilitzeu la mateixa sintaxi que s'ha esmentat anteriorment:
$ sudo chage -l alumne
Last password change : Sep 11, 2023
Password expires : Dec 10, 2023
Password inactive : Jan 09, 2024
Account expires : Jan 31, 2024
Minimum number of days between password change : 5
Maximum number of days between password change : 90
Number of days of warning before password expires : 14
Activitat
Fes que el compte de l'usuari toto
caduqui avui.
Per exemple si avui estem a 14-09-2023:
$ sudo chage toto
Changing the aging information for toto
Enter the new value, or press ENTER for the default
Minimum Password Age [0]: 15
Maximum Password Age [99999]: 1
Last Password Change (YYYY-MM-DD) [2023-09-14]:
Password Expiration Warning [7]: 0
Password Inactive [-1]: 0
Account Expiration Date (YYYY-MM-DD) [-1]: 2023-09-14
$ su toto
Password: tttttttt
Your account has expired; please contact your system administrator.
su: Authentication failure
Fitxers
Abans de començar, hi ha alguns conceptes molt bàsics que cal entendre abans de saltar a detalls més complexos.
Als sistemes Linux, els drets es divideixen essencialment en dues categories:
-
Propietat : l'usuari i el grup propietaris del fitxer, és a dir, o bé l'han creat o se'ls ha assignat com a propietaris del fitxer o directori.
-
Permisos : donat un fitxer o un directori, els permisos representen el conjunt d'accions que podeu dur a terme en funció de qui sou (el compte d'usuari al qual heu iniciat sessió) i el grup al qual pertanyeu.
Per saber quin és el teu usuari i a quins grups pertany:
$ whoami # Usuari
box
$ groups # Grups als que pertany l’usuari
box sudo docker
La manera més habitual de comprovar els permisos de Linux és mitjançant l'ordre ls
, amb l'opció la
(list all)
$ cd
$ ls -la
total 48
drwxr-x--- 6 box box 4096 Aug 23 16:22 .
drwxr-xr-x 4 root root 4096 Aug 22 10:39 ..
-rw------- 1 box box 2778 Aug 23 17:00 .bash_history
-rw-r--r-- 1 box box 220 Jan 6 2022 .bash_logout
-rw-r--r-- 1 box box 3771 Jan 6 2022 .bashrc
drwx------ 2 box box 4096 Aug 22 08:42 .cache
-rw-rw-r-- 1 box box 59 Aug 22 10:40 .gitconfig
-rw------- 1 box box 33 Aug 22 15:56 .lesshst
drwxrwxr-x 3 box box 4096 Aug 23 16:11 .local
-rw-r--r-- 1 box box 807 Jan 6 2022 .profile
drwx------ 2 box box 4096 Aug 22 10:39 .ssh
-rw-r--r-- 1 box box 0 Aug 22 10:36 .sudo_as_admin_successful
Aquests són els permisos del teu usuari (box
) al teu directori d'inici.
Però què representen aquestes columnes?
Entendre els tipus de fitxers de Linux
Probablement ho heu sentit abans, però a Linux, tot és un fitxer (TODO: incorporar).
Com a conseqüència, els enllaços són fitxers, però els directoris també són fitxers.
Quan llegiu la primera columna de la sortida de ls
, has de parar atenció al primer bit.
Els fitxers Linux poden tenir diversos tipus, però la majoria de les vegades són un fitxer (-
) , un directori (d
) o un enllaç (link: l
) .
box@shell:~$ ls -la
total 48
drwxr-x--- 6 box box 4096 Aug 23 16:22 .
drwxr-xr-x 4 root root 4096 Aug 22 10:39 ..
-rw------- 1 box box 2778 Aug 23 17:00 .bash_history
-rw-r--r-- 1 box box 220 Jan 6 2022 .bash_logout
-rw-r--r-- 1 box box 3771 Jan 6 2022 .bashrc
drwx------ 2 box box 4096 Aug 22 08:42 .cache
-rw-rw-r-- 1 box box 59 Aug 22 10:40 .gitconfig
-rw------- 1 box box 33 Aug 22 15:56 .lesshst
drwxrwxr-x 3 box box 4096 Aug 23 16:11 .local
-rw-r--r-- 1 box box 807 Jan 6 2022 .profile
drwx------ 2 box box 4096 Aug 22 10:39 .ssh
-rw-r--r-- 1 box box 0 Aug 22 10:36 .sudo_as_admin_successful
Quan executes ls -la
en el directori d’inici pots veure que .cache
, .local
i .ssh
són directoris, mentres que .bash_history
, .bash_logout
, etc. són fitxers.
A continuació creem un fitxer i un enllaç al fitxer (link) per veure la sortida amb ls
:
$ echo "Hola" > hello.txt
$ ln -s hello.txt hello-link.txt
$ ls -la | grep hello
lrwxrwxrwx 1 box box 9 Aug 28 07:40 hello-link.txt -> hello.txt
-rw-rw-r-- 1 box box 0 Aug 28 07:40 hello.txt
Entendre la propietat dels fitxers
Si mires una altra vegada la sortida de l'ordre ls
, pots veure que box
apareix en dues columnes separades:
box@shell:~$ ls -la
total 48
drwxr-x--- 6 box box 4096 Aug 23 16:22 .
drwxr-xr-x 4 root root 4096 Aug 22 10:39 ..
-rw------- 1 box box 2778 Aug 23 17:00 .bash_history
...
La tercera columna s'anomena columna "usuari" i està dedicada a mostrar qui és realment el propietari del fitxer.
En aquest cas, com que estic al meu directori d'inici, sóc el propietari real d'aquest fitxer.
Si vols veure tots els usuaris del sistema, pot mirar el contingut del fitxer /etc/passwd
.
Com pots suposar l’usuari box serà un dels usuaris que estarà en el fitxer:
$ more /etc/passwd | grep box
box:x:1000:1001::/home/box:/bin/bash
La quarta columna s'anomena "grup".
A Linux, els usuaris pertanyen a grups, per exemple, el grup d'administradors, el grup sudo o el grup d'usuaris normal.
En aquest cas, l’usuari box
ha de pertanyer a un grup si o si, i com que s'ha de crear un grup si o si, la solució més senzilla es crear un grup amb el mateix nom: box
.
A problemes difícils solucions senzilles 😂!
Com podeu veure a la segona línia, la carpeta ..
(que és en aquest cas el directori /home
) és propietat de l'usuari root
que pertany a un grup ... adivina ... anomenat root
😮.
Si vols veure tots els grups del sistema, pots mirar el contingut del fitxer /etc/group
.
El group box
en forma part:
$ more /etc/group | grep ^box
box:x:1001:
El símbol ^
indica que només volem veure aquelles linies que comencen amb box
.
Si no fem servir aquest símbol la sortida seria aquesta:
$ more /etc/group | grep box
sudo:x:27:box,ubuntu
docker:x:1000:box
box:x:1001:
Pots veure l'usuari box
pertany als grups sudo
, docker
i box
(per defecte), i el grup box
només té l'usuari box
.
Entendre els permisos de fitxers
Permisos de fitxers
Ara que tens una millor comprensió dels diferents tipus de fitxers, és hora de centrar-te en la resta de la primera columna: els permisos.
Els permisos es divideixen en tres categories: permisos d'usuari, permisos de grup i els "altres" permisos.
A cadascuna d'aquestes categories, tens una lletra o un guió:
-
Les lletres poden ser
r
(read) per a l'accés de lectura ,w
(write) per a l'accés d'escriptura ix
(execute) per al permís per "executar-lo". -
Un guió vol dir simplement que no tens permís.
Fem una ullada a la primera línia de la nostra sortida de ls
anterior.
-rw------- 1 box box 2778 Aug 23 17:00 .bash_history
-
El primer guió indica que el
.bash_history
és un fitxer. -
Aleshores, per a l'usuari, teniu els següents permisos establerts:
rw-
, que significa que l'usuaribox
pot llegir i escriure al fitxer però no executar-lo. -
Per al grup, teniu els següents permisos establerts:
---
, el que significa que el grupbox
no pot llegir, escriure ni executar el fitxer. -
Finalment, per als “altres”, tens els mateixos permisos que l’usuari group que significa que no poden fer cap acció amb aquest fitxer.
Per exemple, en aquest fitxer:
-rw-r--r-- 1 box box 3771 Jan 6 2022 .bashrc
- És un fitxer.
- L'usuari
box
pot llegir i modificar el fitxer. - Els usuaris que pertanyen al grup
box
poden llegir el fitxer. - Qualsevol usuari (“altres”) pot llegit el fitxer.
Aquí hi ha una taula del que signifiquen els permisos de lectura, escriptura i execució dels fitxers.
Permís | Descripció |
---|---|
r (o llegir, read) |
L'usuari, el grup o altres poden llegir el fitxer, amb una ordre com ara cat , o vi (en mode de només lectura) |
w (o escriure, write) |
L'usuari, el grup o altres poden modificar i desar el fitxer amb ordres com nano o vi |
x (o executar, execute) |
L'usuari, grup o altres poden executar el fitxer. Això s'utilitza la majoria del temps per als scripts. |
Permisos de directori
drwx------ 2 box box 4096 Aug 22 08:42 .cache
drwxrwxr-x 3 box box 4096 Aug 23 16:11 .local
drwx------ 2 box box 4096 Aug 22 10:39 .ssh
Amb els directoris s'apliquen els mateixos permisos de lectura , escriptura i execució que amb elss fitxers perquè un directori és un tipus especial de fitxer que segueix sent un fitxer.
Però què significa que un directori sigui executable, o què podem escriure en un directori?
Permís | Descripció |
---|---|
r (o llegir, read) |
L'usuari, el grup o altres poden enumerar el contingut del directori (utilitzant una ordre ls , per exemple) |
w (o escriure, write) |
L'usuari, el grup o altres poden afegir o eliminar fitxers del directori |
x (o executar, execute) |
L'usuari, grup o altres poden atravessar el directori per tenir accés al seu contingut. |
Gestionar permisos
L'ordre chmod
modifica els permisos d'un fitxer utilitzant la forma octal o la forma simbòlica .
Modificació de permisos mitjançant la forma decimal
Ja saps que els ordinadors treballen amb codificació binaria: 0
i 1
.
Per exemple una adreça IP es codifica en 32 bits, encara que quan escrius una adreça IP ho fas amb una anotació especial en format decimal.
Per exemple, la adreça IP 101.34.56.17
en veritat és 01100101.00100010.00111000.00010001
.
I la representació en decimals està molt bé fins que has de fer subneting, per exemple 101.34.56.17/22
🙄!
Des del principi de la informàtica és fa servir la notació octal perquè és més fàcil, però que segur que no la coneixes perqué potser és massa difícil? o perquè amb decimals ja es suficient? 😂
En resum, Linux fa servir 9 bits per representar els permisos d'un fitxer i tu pots utitlizar la notació octal per representar eld bits.
El sistema de numeració octal ( o en base 9) utilitza els dígits de 0 a 7.
Els nombres octals poden construir-se a partir de nombres binaris agrupant cada tres dígits consecutius d'aquests últims (de dreta a esquerra) i obtenint el seu valor decimal.
Binari | Octal | |
---|---|---|
001 | 0 + 0 + 1 | 1 |
101 | 4 + 0 + 1 | 5 |
111 | 4 + 2 + 1 | 7 |
101 001 | (4 + 0 + 1) (0 + 0 +1) | 5 1 |
001 101 010 | (0 + 0 + 1) (4 + 0 + 1) ( 0 + 2 + 0) | 1 5 1 |
La notació rwx
es representa amb 3 bits, 0
per indicar que no i 1
per indicar que si.
Permisos | Binari | Octal |
---|---|---|
r-- |
100 | 4 |
r-x |
101 | 5 |
--- |
000 | 0 |
rwx |
111 | 7 |
Per representa un permís de fitxer fem servir la notació octal:
Permís | Binari | Octal |
---|---|---|
rwxrwxrwx |
111111111 | 777 |
rw-rw-r-- |
110110100 | 662 |
rwx------ |
111000000 | 700 |
Per modificar els permisos mitjançant la forma octal, has de seguir aquesta sintaxi:
Crea un fitxer hello.txt
.
$ touch hello.txt
$ ls -l hello.txt
-rw-r--r-- 1 david david 0 Aug 9 13:18 hello.txt
Pots veure que els permisos del fitxer hello.txt
són rw-r--r--
o 644
.
Modifica els permisos del fitxer:
$ chmod 400 hello.txt
$ ls -l hello.txt
-rw------- 1 david david 0 Aug 9 13:18 hello.txt
Has modificat els permisos a 600
que en llenguatge "humà" vol dir rw-------
.
A continuació es mostren alguns exemples dels permisos de fitxer resultants donats diferents operacions chmod.
| Comandament | Permisos resultants |
| chmod 777 fitxer | rwxrwxrwx
( no recomanat! ) |
| chmod 444 fitxer | r--r--r-- ( només permisos de lectura ) |
| chmod 421 fitxer | r---w---x (el propietari pot llegir , el grup pot escriure , els altres poden executar ) |
| chmod 000 fitxer | --------- ( no hi ha cap permís) |
Activitat
Crea un fitxer coyote.txt
, canvia els permisos a ---------
i mira que passa si el vols llegir:
$ echo "coyote" > coyote.txt
$ ls -l coyote.txt
-rw-rw-r-- 1 box box 7 Sep 20 15:57 coyote.txt
$ cat coyote.txt
coyote
$ chmod 000 coyote.txt
$ cat coyote.txt
cat: coyote.txt: Permission denied
Dona només permís de lectura al grup i verifica que l'usuari el pot llegir:
$ chmod 040 coyote.txt
$ cat coyote.txt
coyote
Com propietari no el pots llegir, però com que el teu usuari pertany al grup si que el pots llegir.
Modificació de permisos mitjançant la forma simbòlica
A vegades l'únic que vols es afegir a eliminar un permís, no tenir que torna a escriure tots els permisos.
Crea un script:
echo -e '#!/bin/bash\necho Hello $USER' > hello.sh
Si vols veure el contingut que s'ha escrit:
$ more hello.sh
#!/bin/bash
echo Hello $USER
Si el vols executar no pots, perquè per defecte els fitxers es creen amb el permís 642
:
$ ./hello.sh
-bash: ./hello.sh: Permission denied
Si mires els permisos del fitxer pots veure que no és executable:
$ ls -l hello.sh
-rw-rw-r-- 1 box box 31 Aug 28 08:21 hello.sh
Quan es crea un fitxer mai és executable, i a diferència de Windows en que qualsevol fitxer és executable, en Linux sempre s'ha de donar permís d’execució.
La manera més fàcil és dir afegeix al propietari (user) el permís x
, que no pas dir modifica el permís de 642
a 742
:
$ chmod u+x hello.sh
$ ls -l hello.sh
-rwxrw-r-- 1 box box 31 Aug 28 08:21 hello.sh
Ja pots executar el fitxer:
$ ./hello.sh
Hello box
I ara fem que ja no sigui executable:
$ chmod u-x hello.sh
$ ./hello.sh
-bash: ./hello.sh: Permission denied
A continuació tens una taula amb diferents exemples:
Comandament | Conseqüència sobre els permisos |
---|---|
chmod u+rwx fitxer | Afegir la lectura, escriptura i execució a l' usuari (o propietari del fitxer) |
chmod go+r fitxer | Afegint el permís de lectura al grup i a la altres dels categoria |
chmod o+rx fitxer | Afegint els permisos de lectura i execució a la categoria d'altres |
chmod u-r fitxer | Eliminació del permís de lectura per al propietari del fitxer. |
$ chmod 644 coyote.txt
$ chmod u-r coyote.txt
$ ls -l coyote.txt
--w-r--r-- 1 box box 7 Sep 20 15:57 coyote.txt
$ cat coyote.txt
cat: coyote.txt: Permission denied
$ chmod u+r coyote.txt
$ cat coyote.txt
coyote
Canviar propietari del fitxer
chown
és una ordre que estableix el propietari d'un fitxer o directori.
Només es pot utilitzar amb privilegis sudo
!
Encara que siguis propietari d'un fitxer no pot transferir la propietat del fitxer a una altre usuari.
Aquí hi ha alguns exemples amb l'ordre chown
:
Comandament | Permisos resultants |
---|---|
chown bob secretfile | S'està assignant a Bob com a propietari del fitxer secret |
chown bob fitxer1 directoy1 | Assignar a bob com a propietari del fitxer1 i del directori1 |
chown bob:users file1 | Assignació de bob com a propietari i usuaris com a grup del fitxer1 |
chown :users file1 | Assignació d'usuaris com a grup per al fitxer1 |
A continuació anem a veure un exemple.
Crea un usuari piolin
:
$ sudo adduser piolin
Crea un fitxer, canvia el propietari a coyote
i verifica que encar el pots llegir i modificar:
$ echo 'Fitxer piolin' > piolin.txt
$ sudo chown piolin piolin.txt
$ ls -l piolin.txt
-rw-rw-r-- 1 piolin box 14 Sep 20 16:48 piolin.txt
Ja no sóc propietari del fitxer, però el puc modificar?
$ echo 'On està el gat?' >> piolin.txt
$ cat piolin.txt
Fitxer piolin
On està el gat?
Com pots veure al executa l'ordre ls
, el fitxer encara pertany al grup box
, i com que l’usuari box
pertany al grup box
, pot modificar el fitxer.
$ sudo chown :piolin piolin.txt
$ echo 'El gat està amagat sota la taula!' >> piolin.txt
-bash: piolin.txt: Permission denied
Ara ja no tens permís per modificar el fitxer perquè l’usuari box
no pertany al grup coyote
.
També pots modificar el fitxer a l'usuari root
i grup root
.
$ ls -l piolin.txt
-rw-rw-r-- 1 piolin piolin 31 Sep 20 16:49 piolin.txt
No pots modificar el fitxer, però el pots llegir?
$ cat piolin.txt
Fitxer piolin
On està el gat?
Com usuari no puc, com grup tampoc, però com altres si!
$ ls -l piolin.txt
-rw-rw-r-- 1 piolin piolin 31 Sep 20 16:49 piolin.txt
Ús de chgrp
Encara que pots fer servir la comanda chown
per canviar el grup propietari d'un fitxer, existeix l'ordre específica chgrp
és que estableix la propietat del grup per a un fitxer o un directori.
El poder canviar a la vegada la propietat d’usuari i de grup d’un fitxer amb chown
és una facilitat perquè acostuma a ser una operació habitual, però si només vols modificar el grup fes servir la comanda chgrp
perquè així queda perfectament clar que és el que estàs fent.
De la mateixa manera, requereix que s'executin privilegis sudo
.
Aquests són alguns exemples amb l'ordre chgrp.
Comandament | Permisos resultants |
---|---|
chgrp users file1 | Assignació d'usuaris com a grup per al fitxer1 |
chgrp -R users directory1 | Aplicació d'usuaris del grup recursiva al directori1 i als fills. |
chgrp -c users file1 | Assignar el grup d'usuaris al fitxer1 i donar tots els canvis fets al terminal |
Activitat
El sistema operatiu Linux utilitza ids no noms per gestionar usuaris.
Crea un usuari amb adduser
i nom yuriko
:
$ sudo adduser yuriko
Adding user `yuriko' ...
Adding new group `yuriko' (1007) ...
Adding new user `yuriko' (1006) with group `yuriko' ...
Creating home directory `/home/yuriko' ...
...
$ id yuriko
uid=1006(yuriko) gid=1007(yuriko) groups=1007(yuriko)
Borra l’usuari yuriko
:
$ sudo userdel yuriko
Al borrar yuriko
la carpeta de yuriko
encara existeix:
$ ls -l /home/
...
drwxr-x--- 2 1006 1007 4096 Sep 20 17:27 yuriko
Crea un nou usuari yuriko
amb adduser
, canvia a usuari yuriko
i ves al home de yuriko
:
$ sudo adduser yuriko
Adding user `yuriko' ...
Adding new group `yuriko' (1007) ...
Adding new user `yuriko' (1006) with group `yuriko' ...
Creating home directory `/home/yuriko' ...
...
$ id yuriko
uid=1006(yuriko) gid=1007(yuriko) groups=1007(yuriko)
$ sudo su yuriko
$ cd
Cap problema.
Borra l'usuari yuriko
i ara crea un nou usuari yuriko
amb useradd
!:
$ id yuriko
uid=1009(yuriko) gid=1010(yuriko) groups=1010(yuriko)
Aquest cop Linux crea un usuari yuriko
amb un uid diferent!
Si canvies a usuari yuriko
i intentes anar al home no pots encara que la comanda ls
mostri que el propietari és yuriko
.
$ sudo su yuriko
$ cd
sh: 1: cd: can't cd to /home/yuriko
El propietari de la carpeta /home/yuriko
és yuriko
amb id 1006, no yuriko
amb id 1009.
La solució es canviar la propietat del fitxer de yuriko (1006) a yuriko (1009):
$ sudo chown yuriko:yuriko /home/yuriko
El nou usuari yuriko
ja pot accedir a la carpeta yuriko.
$ sudo su yuriko
$ cd
$ pwd
/home/yuriko
$
El primer usuari yuriko era un usuari humà, l’últim un usuari de sistema !