Usuarios, grupos y permisos

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