permisos y propietarios
Permisos y propietarios
Section titled “Permisos y propietarios”El modelo rwx
Section titled “El modelo rwx”Cada fichero/directorio tiene tres niveles de permisos y tres tipos de permiso:
-rwxr-xr-- ___ ___ ___ | | | | | otros (others) | grupo (group) propietario (owner/user)| Permiso | Fichero | Directorio |
|---|---|---|
r (read) |
Leer contenido | Listar contenido (ls) |
w (write) |
Modificar contenido | Crear/borrar ficheros dentro |
x (execute) |
Ejecutar como programa/script | Entrar al directorio (cd) |
x en un directorio sin r permite entrar y acceder a ficheros si conoces el nombre exacto, pero no listarlos con ls. Es la base de los directorios “ocultos por permisos” que te puedes encontrar en una escalada.
Notación octal vs simbólica
Section titled “Notación octal vs simbólica”Cada permiso vale un número, se suman por nivel:
| Permiso | Valor |
|---|---|
r |
4 |
w |
2 |
x |
1 |
| Octal | Permisos | Uso típico |
|---|---|---|
755 |
rwxr-xr-x |
Scripts y ejecutables |
644 |
rw-r--r-- |
Ficheros normales |
600 |
rw------- |
Ficheros sensibles (claves SSH, credenciales) |
700 |
rwx------ |
Directorios privados |
777 |
rwxrwxrwx |
Todo para todos — evitar salvo caso puntual |
# Modo numéricochmod 755 script.shchmod 644 fichero.txtchmod 600 id_rsachmod -R 755 carpeta/ # recursivo
# Modo simbólicochmod u+x script.sh # añade ejecución al propietario (user)chmod g-w fichero # quita escritura al grupochmod o=r fichero # fija "otros" exactamente a solo lecturachmod a+x script.sh # añade ejecución a todos (all)chmod u+x,g+x,o-rwx fichero # varios cambios separados por comas| Quién | Letra |
|---|---|
| user (propietario) | u |
| group | g |
| others | o |
| all | a |
| Operador | Efecto |
|---|---|
+ |
Añade el permiso |
- |
Quita el permiso |
= |
Fija exactamente esos permisos |
chown y chgrp
Section titled “chown y chgrp”chown usuario fichero # cambia propietariochown usuario:grupo fichero # cambia propietario y grupo a la vezchown -R usuario:grupo carpeta/ # recursivochown :grupo fichero # cambia solo el grupo (equivalente a chgrp)
chgrp grupo fichero # cambia solo el grupochgrp -R grupo carpeta/ # recursivoNormalmente solo root puede cambiar el propietario (chown usuario) de un fichero; un usuario normal sí puede cambiar el grupo (chgrp) si pertenece al grupo destino.
SUID, SGID y sticky bit
Section titled “SUID, SGID y sticky bit”| Permiso especial | Dígito octal extra | Efecto |
|---|---|---|
| SUID | 4xxx | El ejecutable corre con los privilegios del propietario del fichero, no del usuario que lo lanza |
| SGID | 2xxx | En ficheros: corre con privilegios del grupo. En directorios: los ficheros nuevos heredan el grupo del directorio |
| Sticky bit | 1xxx | En directorios compartidos (/tmp), solo el propietario de un fichero puede borrarlo, aunque otros tengan w |
chmod u+s fichero # SUIDchmod g+s carpeta/ # SGIDchmod +t carpeta/ # sticky bitchmod 4755 fichero # SUID + rwxr-xr-x (equivalente a u+s 755)Por qué importa en escalada de privilegios
Section titled “Por qué importa en escalada de privilegios”Si un binario tiene SUID y pertenece a root, ejecutarlo te da capacidades de root mientras corre, aunque tú seas un usuario normal. Es una de las primeras cosas que se buscan en una fase de post-explotación:
find / -perm -4000 -type f 2>/dev/null # binarios con SUIDfind / -perm -2000 -type f 2>/dev/null # binarios con SGIDSi el binario encontrado está en GTFOBins con función SUID, puede dar shell con privilegios del propietario (normalmente root).
chmod -R 777 carpeta/ es una receta para problemas de seguridad: abre escritura a cualquier usuario del sistema sobre todo el contenido. Evitarlo salvo depuración puntual y revertirlo después.
Máscara que resta permisos por defecto al crear ficheros/directorios nuevos.
umask # ver valor actual (ej: 0022)umask 027 # cambiar (solo para la sesión actual)Con umask 022: un fichero nuevo nace con 666 - 022 = 644, un directorio nuevo con 777 - 022 = 755.
Comprobar permisos efectivos
Section titled “Comprobar permisos efectivos”id # UID, GID y grupos del usuario actualgroups usuario # grupos a los que pertenecenamei -l /ruta/completa # desglosa permisos de cada componente de la ruta, útil para depurar "Permission denied"