Servidores Linux

Archivos, permisos y sudo

Lección 3 de 8 · 15 min

Un solo árbol, sin unidades

En Windows cada disco tiene su letra. En Linux no hay letras: hay un único árbol que empieza en /, y los discos, las memorias USB o los recursos de red se «cuelgan» de una carpeta dentro de ese árbol.

Al principio desconcierta. La ventaja es que la ruta de algo siempre se escribe igual, sin importar en qué disco esté guardado.

Las carpetas que vas a usar de verdad

/etc

La configuración de todo. Aquí vive cómo está configurado el servidor web, el SSH, el firewall.

Es la carpeta que más vas a tocar y la que conviene respaldar antes de cambiar nada.

/var/log

Los registros. Cuando algo falla, la respuesta está aquí casi siempre.

También es la carpeta que más crece: es la culpable habitual de los discos llenos (lección 6).

/home

La carpeta personal de cada usuario. La tuya es /home/tu-usuario, y se abrevia ~.

Es donde puedes trabajar sin pedir permisos especiales.

/opt y /srv

Donde se suelen instalar las aplicaciones propias y los datos que sirve la máquina.

Por convención, no por obligación: si heredas un servidor, mira ahí primero.

Moverse y mirar
pwd                    # en que carpeta estoy
cd /var/log            # ir a una carpeta
cd ..                  # subir un nivel
cd ~                   # volver a mi carpeta personal
ls -lh                 # listar con detalle y tamanos legibles
ls -lha                # ... incluidos los ocultos (los que empiezan por punto)

Dos costumbres que ahorran horas desde el primer día: la tecla Tab completa nombres de archivo y de comando -y de paso evita escribir mal una ruta-, y la flecha arriba recupera lo último que escribiste. Casi nadie teclea las rutas largas enteras.

Leer los permisos

Cuando algo no funciona en un servidor, la respuesta está en la primera columna de ls -l más veces de las que parece. Se lee de izquierda a derecha y no tiene misterio.

La salida de ls -l, desmenuzada
ls -l /var/www/html
Resultado
drwxr-xr-x  2 www-data www-data  4096 sep  7 09:12 uploads
-rw-r--r--  1 www-data www-data  1841 sep  5 14:03 index.html
-rw-------  1 root     root       412 ago 30 11:20 .env

Los diez caracteres, uno por uno

  1. El primero: qué es

    d es una carpeta, - es un archivo normal, l es un enlace a otro sitio.

  2. Los tres siguientes: el dueño

    rwx = leer, escribir, ejecutar. Un guion significa que no tiene ese permiso.

    En -rw-r--r--, el dueño puede leer y escribir, pero no ejecutar.

  3. Los tres del medio: el grupo

    Lo mismo, para quien pertenezca al grupo del archivo. Es como se le da acceso a varias personas sin hacerlas dueñas.

  4. Los tres últimos: todos los demás

    Cualquier otro usuario de la máquina. Es la parte que importa en seguridad, y la que se mira primero.

  5. Y luego, dueño y grupo

    Las dos columnas de nombres: www-data www-data. Primero el usuario dueño, después el grupo.

    De poco sirve el permiso si el dueño no es quien creías.

Mira el .env del ejemplo: -rw-------. Solo el dueño lee y escribe; el grupo y los demás, nada. Es exactamente como debe estar un archivo con credenciales, y es lo que hay que comprobar cuando uno se pregunta si algo está bien guardado.

Y ahora sí, los números

Los famosos 755 y 644 no son códigos que haya que memorizar: son la suma de los tres permisos, para cada uno de los tres grupos.

La suma, y los dos valores que se usan

Cada permiso vale un número

Leer 4 · escribir 2 · ejecutar 1.

Se suman: leer y escribir es 6; leer y ejecutar es 5; los tres, 7.

644 para archivos

Dueño 6 (lee y escribe), grupo 4 (solo lee), otros 4 (solo leen).

Es lo normal para un archivo de datos o una página web.

755 para carpetas y programas

Dueño 7 (todo), grupo y otros 5 (leer y entrar).

En una carpeta, «ejecutar» significa poder entrar en ella. Sin ese permiso, la carpeta existe pero no se puede abrir.

Cambiar permisos y dueño
sudo chmod 644 index.html            # permisos de un archivo
sudo chmod 600 .env                  # solo el dueno, para credenciales
sudo chmod -R 755 /var/www/html      # -R aplica a todo lo de dentro

sudo chown www-data:www-data index.html    # cambiar dueno y grupo

Sobre el 777 que recomienda medio internet: significa «todos pueden leer, escribir y ejecutar». Es decir, cualquier usuario o proceso de la máquina puede reescribir ese archivo.

Aparece como solución porque hace desaparecer el error de permisos al instante -y es cierto: lo hace-. Lo que también hace es dejar el archivo escribible por todo el mundo, y en un directorio web eso permite reemplazarlo. El arreglo correcto casi siempre es cambiar el dueño al usuario del servicio, no abrir el permiso a todos.

root y sudo

root es el administrador absoluto: puede hacer cualquier cosa, incluido destruir el sistema. En Ubuntu no se entra como root; se trabaja como usuario normal y se pide permiso puntual con sudo para lo que lo necesita.

Por qué esa distinción importa

root no pregunta

Un comando destructivo sobre la ruta equivocada, ejecutado como root, se ejecuta. No hay confirmación ni papelera.

Como usuario normal, el mismo error se detiene en un «permiso denegado», que es una red de seguridad gratis.

sudo deja rastro

Cada uso de sudo queda registrado con el usuario, la hora y el comando.

Si tres personas administran la máquina y todas entran como root, no hay forma de saber quién hizo qué.

El permiso dura un instante

sudo eleva el privilegio para ese comando y se acabó.

Una sesión abierta como root eleva todo lo que escribas después, incluido lo que escribas distraído.

Situaciones que vas a encontrarte

Permission denied al editar un archivo de /etc

Es lo correcto: la configuración del sistema no la toca un usuario normal. Se antepone sudo: sudo nano /etc/ssh/sshd_config.

Y antes de editar, una copia: sudo cp archivo archivo.bak. Cuesta dos segundos y salva la tarde.

El servicio web no puede escribir en su carpeta

El servidor web corre como su propio usuario -normalmente www-data-, no como tú. Si la carpeta es tuya, él no escribe.

Se arregla con chown, dándole la propiedad al usuario del servicio. No con chmod 777.

Puse mal un permiso y ahora no funciona nada

El caso clásico es un chmod -R sobre una ruta equivocada. Por eso -R se escribe despacio y se comprueba la ruta antes de pulsar Enter.

Con ls -l se ve cómo quedó y se corrige. Si tocaste /etc o /usr a lo ancho, puede ser más rápido rehacer la máquina.

¿Qué usuario soy y qué puedo hacer?

whoami dice quién eres, id añade tus grupos y sudo -l lista qué te está permitido ejecutar con privilegios.

Compruébalo tú mismo

Ves -rw-r--r-- en un archivo. ¿Quién puede modificarlo?

El servidor web no puede escribir en su carpeta de subidas. ¿Cuál es el arreglo correcto?

¿Por qué se usa sudo en vez de entrar como root?

Lo que sigue

Ya te mueves y entiendes quién puede hacer qué. La siguiente lección es instalar y actualizar software: apt, la diferencia entre update y upgrade -que no es la que parece- y cómo se dejan puestas las actualizaciones de seguridad automáticas, que es la tarea con mejor relación entre esfuerzo y riesgo evitado de todo el curso.

Siguiente: Paquetes y actualizaciones

Continuar ← Entrar por SSH y orientarse