Usuarios, grupos y permisos [ admin basico gnu ] Mariano López Minnucci <[email protected]> 15 de septiembre de 2015 Objetivo del tutorial Cómo trabajan los permisos de archivos para los distintos usuarios y grupos de un sistema. GNU+Linux es un sistema multiusuario, donde cada usuario pertenece a uno o más grupos. Todo sistema de archivos en GNU+Linux soporta entonces permisos para asignar a cada archivo, los cuales controlan qué usuarios pueden efectuar determinadas operaciones sobre cada uno de ellos. Este tutorial intenta explicar brevemente estos conceptos. 1. Usuarios y grupos Para conocer nuestro nombre de usuario, podemos ejecutar: whoami # Imprime el nombre del usuario que ejecutó la orden El programa passwd sirve para cambiar la contraseña de un usuario: passwd # Cambia la contraseña del usuario que ejecutó la orden passwd foo # Cambia la contraseña del usuario foo (debe ser ejecutado # por el usuario root) En GNU+Linux, todo usuario pertenece a un grupo principal (llamado grupo primario), y puede pertenecer también a más grupos llamados suplementarios. El programa groups nos permite saber a qué grupo/s pertenece un usuario: groups # Imprime los grupos a los que pertenece el usuario que # ejecutó la orden groups foo # Imprime los grupos a los que pertenece el usuario foo 1 Usuarios, grupos y permisos Por supuesto, solamente el usuario root es capaz de administrar usuarios y grupos. Estos son algunos ejemplos: useradd -g users foo # # groupadd audio # gpasswd -a foo audio # # gpasswd -d foo video # groupdel video # userdel -rf bar # # # # 2. Crea un nuevo usuario llamado foo, cuyo grupo primario será users; users debe existir Crea un nuevo grupo llamado audio Agrega el usuario foo al grupo audio (audio será un grupo suplementario de foo) Quita ll usuario foo del grupo video Elimina el grupo video del sistema Elimina el usuario bar del sistema; la opción -r hace que se elimine su directorio HOME y la opción -f hace que se elimine el usuario aunque esté logueado aún en el sistema Permisos Cada archivo (regular o no) posee un usuario propietario, un grupo propietario y cuatro tipos de permisos: Lectura, Escritura, Ejecución y Set ID. Tres conjuntos de estos permisos están presentes: permisos para usuario, para grupo y para otros. Solamente el usuario propietario puede modificar los permisos de un archivo. Los permisos de lectura y escritura se explican solos: Si un archivo posee activado el permiso de lectura (escritura) para usuario, entonces el usuario propietario podrá ver (modificar) el contenido del archivo. Si un archivo posee activado el permiso de lectura (escritura) para grupo, entonces todo usuario que pertenezca al grupo propietario podrá ver (modificar) el contenido del archivo. Si un archivo posee activado el permiso de lectura (escritura) para otros, entonces cualquier usuario del sistema podrá ver (modificar) el contenido del archivo. Los permisos de ejecución se aplican sólo a archivos regulares y a directorios: Si un archivo regular posee activado un permiso de ejecución, entonces todo usuario que cumpla con la categoría del permiso (usuario, grupo y otro) podrá ejecutar el archivo como programa. Si un directorio posee activado un permiso de ejecución, entonces todo usuario que cumpla con la categoría del permiso (usuario, grupo y otro) podrá ingresar a este directorio (en otras palabras, podrá asignarlo directorio de trabajo – hacer cd <directorio>). Los bits SetID. Los permisos SetID para usuario (SetUID) y para grupo (SetGID) tienen significado solamente en aquellos archivos regulares que poseen activados ciertos permisos de ejecución. Si un archivo tiene el permiso SetUID activado y un usuario tiene permiso de ejecución sobre este archivo, entonces al ejecutar este archivo el usuario tendrá, dentro del proceso en ejecución, todos los privilegios del usuario propietario del archivo. Asimismo, si un archivo tiene el permiso SetGID activado y un usuario tiene permiso de ejecución sobre este archivo, entonces al ejecutar este archivo el usuario tendrá, dentro del proceso en ejecución, todos los privilegios del grupo propietario del archivo. 2 Usuarios, grupos y permisos El bit Sticky. El permiso SetID para otros tiene el nombre especial “sticky” (pegajoso). Este permiso solamente tiene significado para directorios. Si un directorio tiene el permiso sticky activado, entonces todo archivo podrá ser modificado solamente por el usuario propietario del archivo en cuestión. Como resultado, si un directorio es sticky y dentro de este directorio existe un archivo cuyo propietario no coincide con el usuario propietario del directorio, entonces el usuario propietario del directorio no podrá eliminar el archivo, y por lo tanto tampoco podrá eliminar el directorio, a no ser, por supuesto, que el propietario del directorio desactive el bit sticky en este directorio, cosa que puede hacer por ser el usuario propietario. Si un directorio posee un permiso de escritura activado, todo archivo ubicado allí dentro podrá ser movido o eliminado aún cuando estos archivos tengan desactivado el permiso de escritura. Es muy fácil olvidar este hecho, lo cual en ciertos casos puede generar huecos de seguridad importantes. 3. Ver y modificar propietarios y permisos de archivos La opción -l del programa ls hace que se muestren los archivos ingresados como argumentos en forma detallada. La primera columna mostrará el tipo de erchivo y los permisos; las tercera y cuarta columna mostrarán el usuario propietario y el grupo propietario del archivo, respectivamente. % ls -l /usr/bin/ total 504 drwxr-xr-x 7 root drwxr-xr-x 2 root drwxr-xr-x 5 root drwxr-xr-x 515 root drwxr-xr-x 241 root drwxr-xr-x 25 root lrwxrwxrwx 1 root drwxr-xr-x 13 root lrwxrwxrwx 1 root drwxr-xr-x 301 root drwxr-xr-x 4 root drwxr-xr-x 5 root root 135168 ago 31 19:41 bin root 4096 mar 27 20:32 etc root 4096 ago 30 23:06 i686-w64-mingw32 root 69632 ago 31 19:40 include root 225280 ago 31 19:41 lib root 36864 ago 31 19:40 lib32 root 3 feb 15 2015 lib64 -> lib root 4096 jun 26 04:22 local root 3 feb 15 2015 sbin -> bin root 12288 ago 26 00:58 share root 4096 ago 30 17:02 src root 4096 ago 30 23:06 x86_64-w64-mingw32 Veamos cómo se lee la primera columna. El primer carácter indica el tipo de archivo. Los tipos fundamentales de archivo existentes en GNU+Linux son siete. La tabla siguiente muestra qué significa cada carácter. d l p s c b Archivo regular Directorio Enlace simbólico Fifo (pipa con nombre) Socket Dispositivo por carácter Dispositivo por bloques 3 Usuarios, grupos y permisos A continuación vemos los permisos del archivo. El primer conjunto de tres caracteres indica los permisos de usuario, el segundo conjunto indica los permisos de grupo y el tercer conjunto indica los permisos de otros. r indica permiso de lectura (read) activado, w indica permiso de escritura (write) activado y x indica permiso de ejecución (execute) activado. Un guión alto (-) indica que el permiso de la ubicación correspondiente está desactivado. Los permisos SetID y Sticky reemplazan la x correspondiente. Los permisos SetID se ven con una s si el permiso de ejecución correspondiente está activado y con una S si el permiso de ejecución correspondiente está desactivado. El permiso Sticky se ve con una t si el permiso de ejecución para otros está activado y con una T si el permiso de ejecución para otros está desactivado. 3.1. Modificar propietarios Al crear un archivo nuevo, el usuario propietario y grupo propietario del archivo serán el usuario que lo creó y el grupo primario de dicho usuario. Para cambiar el usuario o grupo propietario de un archivo usamos chown. Si un usuario desea cambiar el grupo propietario de un archivo, el usuario debe ser el usuario propietario del archivo y a la vez pertenecer al grupo que desea asignar. Solamente el usuario root puede cambiar el usuario propietario de un archivo. El propietario a asignar con chown se escribe en la forma usuario:grupo. La opción -R, --recursive hace que chown actúe recursivamente en directorios. chown foo /home/foo/bar # # chown foo: /home/foo/bar # # # chown :users /home/foo/bar # # chown -R foo:users /home/foo # # # Asigna al usuario foo propietario del archivo bar. Asigna al usuario foo y al grupo primario de foo propietarios del archivo bar. Asigna al grupo users propietario del archivo bar. Asigna al usuario foo y grupo users el directorio /home/foo y todo su contenido, recursivamente Adicionalmente, el programa chgrp permite cambiar solamente grupos propietarios. La sintaxis es la misma que para chown. chgrp root /home # Asigna al grupo root propietario de /home chgrp -R users /home/foo # Asigna al grupo users como propietario del # directorio /home/foo, recursivamente 3.2. Modificar permisos Solo el usuario propietario de un archivo puede cambiar sus permisos. El programa usado para cambiar permisos es chmod. La sintaxis de un permiso consiste en tres conjuntos caracteres. El primero indica si el permiso es para usuario (u), grupo (g), otros (o), una combinación de estos o todos ellos (a). El segundo conjunto es un carácter que indica si activamos (+) o desactivamos (-) el permiso. El tercer conjunto indica los tipos de permiso: r para lectura, w para escritura, x para ejecución, s para SetID, t para Sticky o una combinación de estos. Al igual que chown, chmod tiene la opción -R, --recursive para actuar recursivamente en directorios. 4 Usuarios, grupos y permisos chmod u+x foo.sh # # chmod go-w /home # # chmod -R a-w foo # # chmod o-rwx bar # # Activa el permiso de ejecución para usuario en foo.sh Desactiva el permiso de escritura para grupos y para otros en /home Desactiva los permisos de escritura para todos (usuario, grupo y otros) en foo, recursivamente Desactiva los permisos de lectura, escritura y ejecución para otros en bar En Linux, la llamada de sistema chmod no permite cambiar permisos a enlaces simbólicos: los permisos en este caso son aplicados al archivo al que apunta el enlace. En el caso de un enlace físico, sí es posible manejar permisos específicos para cada enlace. Esto permite administrar distintos puntos de acceso a un archivo, cada uno de ellos con sus correspondientes permisos. También puede usarse el equivalente hexadecimal para asignar todos los permisos con un solo argumento. Este equivalente consiste en un número de cuatro dígitos hexadecimales (0-7). El primer dígito es opcional, e indica SetID y Sticky, donde 1 indica Sticky, 2 indica SetGID y 4 indica SetUID. Los últimos tres indican respectivamente los permisos de usuario, grupo y otros, donde 1 significa permiso de ejecución, 2 significa permiso de escritura y 4 significa permiso de lectura. Algunos ejemplos: chmod 1755 foo # # # # chmod 700 /root # # chmod 644 bar # # # chmod 744 foo.sh # # 1 = bit Sticky. 7 = 1 + 2 + 4 = todos los permisos para usuario. 5 = 1 + 4 = permisos de lectura y ejecución para grupo y otros. 7 = 1 + 2 + 4 = todos los permisos para usuario. 0 = ningún permiso para grupo y otros. 6 = 2 + 4 = permisos de lectura y escritura para usuario. 4 = permisos de lectura para grupo y otros. 7 = 1 + 2 + 4 = todos los permisos para usuario. 4 = permisos de lectura para grupo y otros. Normalmente la llamada de sistema chmod no borra permisos SetUID y SetGID a no ser que se lo ordene explícitamente. Esto quiere decir que, si un archivo posee alguno de estos permisos activados y ejecutamos chmod 0644, esto no nos garantiza que los hayamos desactivado. Debemos hacerlo explícitamente mediante chmod ug-s. 5 Usuarios, grupos y permisos Comandos usados Nombre whoami passwd groups useradd groupadd gpasswd userdel groupdel ls chown chgrp chmod Descripción Imprime el nombre del usuario Cambia la contraseña de un usuario Imprime los grupos de un usuario Crea un nuevo usuario Crea un nuevo grupo Administra /etc/group y /etc/gshadow Elimina un usuario Elimina un grupo Lista el contenido de directorios Cambia usuario y grupo propietario de archivos Cambia el grupo propietario de archivos Cambia modos de permisos de archivos Paquete coreutils shadow shadow shadow shadow shadow shadow shadow coreutils coreutils coreutils coreutils Véase también Nombre su Título Su y Sudo archivos Manejo de archivos en consola enlaces Enlaces Objetivo Cómo acceder a la cuenta root desde otra cuenta. El programa sudo. Ver, copiar, mover y eliminar archivos y directorios en consola. Enlaces físicos y enlaces simbólicos. Qué son y cómo se trabajan. Nuestro canal IRC Si desea comunicarse con nosotros, búsquenos en nuestro canal IRC de Freenode #ramaieeeuns. 6
© Copyright 2024