Preguntas
¿Cómo arreglo una raíz web entera de forma segura?
find /var/www -type d -exec chmod 755 {} + y find /var/www -type f -exec chmod 644 {} +, luego chown -R www-data: /var/www. Nunca chmod -R 777.
Todo el sistema de permisos cabe en una página. Imprímela, o deja abierta la calculadora chmod para lo interactivo.
| -rwxr-xr-x | tipo, propietario rwx, grupo r-x, otros r-x |
| r = 4, w = 2, x = 1 | sumar por grupo → dígito octal |
| rwx r-x r-x | = 7 5 5 = 755 |
| d l c b p s | directorio, enlace simbólico, disp. de caracteres, disp. de bloques, tubería, socket |
| 644 | archivos: propietario rw, todos r |
| 755 | directorios, scripts, binarios |
| 600 / 700 | archivo / directorio privado (claves SSH, .env, ~/.ssh) |
| 664 / 775 | archivo / directorio escribible por el grupo |
| 2775 | directorio compartido: los archivos nuevos heredan el grupo (setgid) |
| 1777 | /tmp: cualquiera escribe, solo los propietarios borran (sticky) |
| 4755 | binario setuid (passwd, sudo) |
| 777 | casi siempre incorrecto |
| u g o a | user (propietario), group, others, all |
| + - = | añadir, quitar, fijar exactamente |
| chmod u+x f | el propietario puede ejecutar |
| chmod go-w f | grupo y otros pierden escritura |
| chmod a=r f | todos solo lectura |
| chmod u=rwx,g=rx,o= f | = 750 |
| chmod -R u=rwX,go=rX dir | recursivo; X = ejecución solo para directorios y archivos ya ejecutables |
| chmod g+s dir | setgid en un directorio |
| chmod +t dir | sticky bit |
| chmod --reference=a b | copiar el modo de a en b |
| 4 setuid | ejecutar como el propietario del archivo; se muestra como s en la x del propietario |
| 2 setgid | ejecutar como el grupo; en directorios: heredar el grupo; s en la x del grupo |
| 1 sticky | en directorios: solo el propietario puede borrar; t en la x de otros |
| S / T | mayúscula = bit especial activo sin ejecución (normalmente un error) |
| chown user file | cambiar propietario (solo root) |
| chown user:group file | propietario y grupo |
| chown -R www-data: /var/www | recursivo; grupo vacío = grupo de inicio de sesión del usuario |
| chgrp group file | solo el grupo (un miembro puede hacerlo) |
| chown -h | cambiar el propio enlace simbólico, no el destino |
| umask 022 | archivos 644, directorios 755 (por defecto) |
| umask 077 | archivos 600, directorios 700 (privado) |
| umask 002 | archivos 664, directorios 775 (trabajo en grupo) |
| UMask=0077 | en un [Service] de systemd |
| find . -type f -perm -o+w | archivos escribibles por todos |
| find / -perm -4000 -type f | binarios setuid |
| find . -type d -exec chmod 755 {} + | arreglar solo directorios |
| find . -type f -exec chmod 644 {} + | arreglar solo archivos |
| stat -c '%a %U %G %n' * | modo octal, propietario, grupo, nombre |
| ls -ld dir | el directorio en sí, no su contenido |
| getfacl file | mostrar; un + en ls -l significa que existe una |
| setfacl -m u:alice:rw file | dar rw a alice |
| setfacl -m d:g:dev:rwx dir | ACL por defecto para archivos nuevos en dir |
| setfacl -b file | quitar todas las ACL |
x = puede entrar; r = puede listar; w = puede crear/borrar entradas.w en el directorio, no en el archivo.ls -l antes de chmod 777.Los resultados y mensajes de esta herramienta se muestran en inglés.
find /var/www -type d -exec chmod 755 {} + y find /var/www -type f -exec chmod 644 {} +, luego chown -R www-data: /var/www. Nunca chmod -R 777.