Curso de Linux / Entender permisos de archivos, usar chmod y aplicar sudo

Los permisos de archivos en Linux determinan si se permite la lectura (r), escritura (w) y ejecución (x) a los usuarios propietarios, al grupo propietario y a otros usuarios. sudo es una herramienta que permite a un usuario autorizado ejecutar un comando específico con los permisos de otro usuario (normalmente administrador). En problemas de acceso a archivos, primero verifique la propiedad y los permisos, y utilice los permisos de administrador solo para los comandos necesarios.

El notes.txt en el ejemplo de la primera consulta se crea en la nueva carpeta de prácticas que sigue. Primero ejecute el procedimiento de preparación de archivos y luego vuelva al primer ejemplo para verificar el propietario, el grupo y el modo. El significado de cuentas y grupos se puede consultar en la lección de usuarios y grupos.

Verificar usuario y propiedad antes de los permisos

Los permisos no son un número independiente que solo se adjunta al archivo. La ID de usuario y el grupo del proceso actual, el usuario propietario y el grupo del archivo de destino, y los permisos de los directorios que conducen al destino trabajan juntos. Verifique la cuenta actual con id y luego consulte la información del destino con ls -l y stat. Comprender primero los usuarios, grupos y la propiedad tratados en lecciones anteriores facilita interpretar el significado de los permisos.

id
ls -l notes.txt
stat -c '%A %a %U %G %n' notes.txt

Por ejemplo, si es -rw-r----- 1 learner editors ... notes.txt, el primero, -, es un archivo normal, y los tres conjuntos posteriores rw-·r--·--- indican consecutivamente los permisos del usuario propietario, del grupo propietario y de otros usuarios. learner y editors son nombres de ejemplo, y los resultados reales varían según el sistema. stat de %a muestra permisos en octal como 640.

Cómo difieren r, w, x en archivos y directorios

Aunque sean los mismos caracteres, los permisos permitidos difieren entre archivos y directorios. Si se interpretan los permisos de un directorio de la misma manera que los de un archivo, resultaría difícil entender situaciones en las que un archivo tiene permiso de lectura pero no se puede abrir.

Permisos Archivo normal Directorio
r Leer contenido Leer la lista de nombres dentro del directorio
w Modificar contenido Permiso necesario para crear, eliminar o renombrar elementos
x Permiso para ejecutar un archivo ejecutable Moverse y explorar dentro de un directorio siguiendo un nombre conocido

Para abrir un archivo dentro de un directorio se necesita el x permiso de pasar por los directorios en la ruta. La eliminación de un archivo generalmente depende del w y x del directorio padre, no del w del propio archivo. Sin embargo, el bit sticky, las listas de control de acceso (ACL), las características del sistema de archivos y políticas adicionales como SELinux pueden limitar el resultado.

Cambiar permisos de archivos de práctica con chmod

El siguiente es un ejemplo de cómo crear una nueva carpeta y un archivo de práctica en el directorio home del usuario actual. Si ya existe una carpeta con el mismo nombre, elija otro nombre. Si mkdir o cd fallan, no continúe ejecutando los comandos posteriores. printf sobrescribe notes.txt del directorio actual, por lo que primero debe asegurarse de que el archivo no exista.

mkdir ~/linux-course-17-practice
cd ~/linux-course-17-practice
printf 'private notes\n' > notes.txt
ls -l notes.txt
chmod u=rw,g=r,o= notes.txt
stat -c '%A %a %n' notes.txt

u significa usuario propietario, g significa grupo propietario, o se refiere a otros usuarios. = establece los permisos de la categoría correspondiente al valor especificado. La salida final aparece como -rw-r----- 640 notes.txt en un entorno típico de GNU stat. El usuario que realmente puede leer el archivo depende de la cuenta, la pertenencia de grupo y los permisos en la ruta.

En notación octal, cada categoría suma r=4, w=2 y x=1: 640 representa rw-·r--·---. El siguiente comando establece 600, dando lectura y escritura solo al propietario según los bits ordinarios. Otros controles y excepciones de procesos privilegiados pueden influir; confirme el modo resultante con stat.

chmod 600 notes.txt
stat -c '%A %a %n' notes.txt

La expresión de símbolo chmod g+r notes.txt solo agrega lectura de grupo a los permisos actuales. En cambio, chmod o-rwx notes.txt elimina los tres permisos de otros usuarios. Elija conscientemente si desea reasignar todos los permisos existentes (=) o agregar o quitar solo algunos (+, -).

Verificar permisos del directorio por separado

Si ha creado un directorio personal, puede configurar 700 para que solo el usuario propietario pueda listar, pasar y modificar. Ejecute lo siguiente solo dentro de la carpeta de práctica que acaba de crear.

mkdir private
chmod 700 private
ls -ld private
stat -c '%A %a %n' private

La salida normalmente se muestra como drwx------ 700 private. El -d de ls -ld no es un listado dentro del directorio, sino que muestra los permisos del directorio en sí. Si se elimina por accidente el x del directorio, incluso el propietario podría tener dificultades para acceder a los archivos dentro. Aplicar ciegamente el mismo número a todo el árbol mediante chmod -R puede hacer que se pase por alto que los x necesarios para archivos normales y directorios son diferentes.

Cuándo y cómo usar sudo

sudo ejecuta un comando con privilegios de otro usuario según la política permitida a la cuenta actual. No todas las cuentas tienen privilegios de administrador; el alcance permitido depende de la política sudo del sistema. El sudo -l a continuación consulta los comandos permitidos a la cuenta actual y puede requerir autenticación. En entornos sin privilegios de administrador, un mensaje de denegación puede considerarse un resultado normal.

sudo -l

Use sudo COMANDO únicamente para una operación autorizada que necesite otra identidad. Compruebe primero los permisos y el acceso requerido antes de ampliarlos. Ejecutar sudo no cambia por sí solo la propiedad del archivo existente; un archivo nuevo creado por un proceso privilegiado sí puede quedar con otra propiedad.

El intérprete de órdenes prepara la redirección antes de iniciar el comando. En sudo echo ... > ARCHIVO_PROTEGIDO, quien abre el destino es el intérprete actual, por lo que la escritura puede fallar aunque echo se ejecute con sudo. Para editar una configuración autorizada, valore sudoedit si su implementación lo admite. Modifique políticas con visudo y su comprobación de sintaxis. Las implementaciones difieren: la referencia de Ubuntu sobre sudo-rs indica consultar la ayuda instalada y man sudoers-rs para sus opciones de política.

Orden para diagnosticar errores de permisos

  1. Verifique el usuario y el grupo de la sesión actual con id. Si cambió el grupo de la cuenta, asegúrese de que también se haya reflejado en la sesión de inicio de sesión actual.
  2. Verifique la propiedad y los permisos del objetivo con ls -l o stat. El propio directorio se considera con ls -ld.
  3. Compruebe el permiso de búsqueda de cada directorio de la ruta. Si dispone de namei, de util-linux, use namei -l RUTA para ver sus componentes; sustituya RUTA por el destino real.
  4. Si los bits básicos no explican el acceso, revise las listas de control de acceso (ACL), SELinux, montajes de solo lectura y el bit sticky. Determine la causa antes de ampliar permisos; no use chmod 777 como solución automática.
  5. Una vez que el alcance permitido esté claro, aplique el cambio más pequeño y vuelva a verificar el acceso con el usuario originalmente previsto.

Si la práctica ha terminado, primero verifique si la ubicación actual es la carpeta de prácticas con pwd. Si no necesita seguir usando los archivos de práctica, puede organizar la carpeta más tarde. No utilice datos operativos ni archivos de otros usuarios como objetivo de esta práctica chmod.

Documentación oficial

Puede consultar la notación y el funcionamiento en Explicación de la estructura de permisos de GNU Coreutils y Explicación de la configuración de permisos. Para la política de permisos de administrador y métodos de edición seguros, consulte el manual sudoers(5).