Cuentas de Usuario en Linux: /etc/passwd y /etc/shadow
Cuentas de Usuario en Linux: /etc/passwd y /etc/shadow
El archivo /etc/passwd define parte de la información de la cuenta para las cuentas de usuario. Curiosamente, las contraseñas para las cuentas no se almacenan en el
archivo /etc/passwd, tal como lo indica el nombre del archivo, sino más bien el archivo /etc/shadow.
Cada línea está dividida en campos por dos puntos. Los campos de izquierda a derecha son los siguientes:
La siguiente tabla describe cada uno de estos campos en detalle, usando la primera línea de la salida en el ejemplo anterior (root:x:0:0:root:/root:/bin/bash):
name root Es el nombre de la cuenta. Este nombre lo utiliza una persona cuando inicia sesión en el sistema y cuando la propiedad del archivo viene
proporcionada por el comando ls -l. Por lo general, el sistema utiliza el ID de usuario (véase abajo) internamente y se proporciona el nombre
de cuenta para que a los usuarios regulares se les haga más fácil referirse a la cuenta.
Normalmente, la cuenta root es una cuenta administrativa especial. Sin embargo, es importante tener en cuenta que no todos los sistemas
Campo Ejemplo Descripción
tienen una cuenta root, y en realidad, el ID de usuario 0 (cero) proporciona los privilegios administrativos en el sistema.
password x Antes, la contraseña se guardaba en esta ubicación, ahora se almacena en el archivo /etc/shadow. La x en el campo del marcador de
placeholder posición de la contraseña indica al sistema que la contraseña no se almacena aquí, sino más bien en el archivo /etc/shadow.
user id 0 Cada cuenta tiene asignado un Id. de usuario (UID «User ID» en inglés). El UID es lo que realmente define la cuenta, ya que el nombre de
usuario normalmente no es utilizado directamente por el sistema. Por ejemplo, los archivos son propiedad de los UID, no de los nombres de
usuario.
Algunos UID son especiales. Por ejemplo, el UID 0 le da a la cuenta de usuario privilegios administrativos.
Los UID por debajo de 500 (en algunas distribuciones de Linux 1.000) están reservados para las cuentas del sistema. Las cuentas del sistema
se tratarán con más detalle más adelante en este capítulo.
primary group 0 Cada archivo y directorio es propiedad de una cuenta de usuario. Normalmente la persona que crea la cuenta posee el archivo. Además, cada
id archivo es propiedad de un grupo, normalmente del grupo primario del usuario.
A los grupos se les asignan identificadores numéricos al igual que a los usuarios.
Cuando un usuario crea un archivo, el archivo es propiedad del UID del usuario y también de un id de grupo (GID «Group ID» en inglés), el GID
primario del usuario. Este campo define que GID es el GID primario del usuario.
Además, al proporcionar la propiedad del grupo por defecto en un archivo, este campo también indica que el usuario es un miembro del grupo,
lo que significa que el usuario tendrá permisos especiales en cualquier archivo que pertenece a este grupo. Los permisos se cubrirán en
detalle en un capítulo posterior.
comment root Este campo puede contener cualquier información sobre el usuario, incluyendo su nombre real (completo) y otra información útil.
Este campo también se llama el campo GECOS (General Electric Comprehensive Operating System). El GECOS es un formato predefinido usado
raramente para este campo que define una lista de elementos separada por comas, incluyendo el nombre completo del usuario, ubicación de
la oficina, número de teléfono e información adicional.
El administrador puede modificar la información GECOS con el comando chfn y los usuarios pueden ver esta información con el
comando finger.
home directory /root Este campo define la ubicación del directorio home del usuario. Para los usuarios regulares, esto sería
normalmente /home/username donde username se reemplaza con el nombre de usuario del usuario. Por ejemplo, un nombre de
usuario bob tendría un directorio home /home/bob.
El usuario root tiene normalmente una ubicación diferente para el directorio home: /root.
Campo Ejemplo Descripción
Las cuentas del sistema raramente tienen directorios, ya que normalmente no se utilizan para crear o guardar los archivos.
shell /bin/bash Aquí está ubicado el shell del inicio de la sesión del usuario. De forma predeterminada, el usuario se "ubica en" este shell siempre que el
usuario inicia la sesión en un entorno de línea de comandos o abre una ventana de terminal. El usuario luego puede pasar a un shell diferente
escribiendo el nombre del shell, por ejemplo: /bin/tcsh.
Ten en cuenta que mientras que este capítulo describe el contenido de los archivos de grupo y usuario, el siguiente capítulo describirá los comandos y herramientas que se utilizan para
modificar la información de la cuenta del usuario y de grupos.
name:password:last change:min:max:warn:inactive:expire:reserved
La siguiente tabla describe los campos del archivo /etc/shadow con más detalle, utilizando la siguiente cuenta la cuál describe a una cuenta de usuario típica:
sysadmin:$6$lS6WJ9O/fNmEzrIi$kO9NKRBjLJJTlZD.L1Dc2xwcuUYaYwCTS.gt4elijSQW8ZDp6GLYAx.TRNNpUdAgUXUrzDuAPsYs5YHZNAorI1:1[Link]
name sysadmin Este es el nombre de la cuenta, que coincide con el nombre de cuenta en el archivo /etc/passwd.
password $6$.........rI1 El campo passwd contiene la contraseña cifrada de la cuenta. Esta cadena muy larga (que está truncada en el ejemplo a la izquierda de esta celda) es un cifrado
unidireccional, lo que significa que no puede "revertirse" para determinar la contraseña original.
Mientras que los usuarios habituales tienen contraseñas encriptadas en este campo, las cuentas del sistema tendrán un carácter de * en este campo. Verás más detalles
sobre las cuentas de sistema más adelante en este capítulo.
last 15020 Este campo contiene un número que representa la última vez que la contraseña fue cambiada. El número 15020 es el número de días desde el 01 de enero de 1970
change (llamada la Época) y el último día en el que la contraseña de la cuenta fue cambiada.
Este valor se genera automáticamente cuando se modifica la contraseña del usuario. Este valor es importante ya que se utiliza por característica de envejecimiento de la
contraseña proporcionado por el resto de los campos de este archivo.
min 5 Este es uno de los campos del envejecimiento de la contraseña; un valor distinto de cero en este campo indica que después de que un usuario cambiara su contraseña, la
contraseña no se puede cambiar otra vez por un número específico de días (5 en este ejemplo). Este campo es importante cuando se utiliza el campo max (véase abajo).
Un valor de cero en este campo significa que el usuario siempre puede cambiar su contraseña.
max 5 Este campo se utiliza para obligar a los usuarios a cambiar regularmente sus contraseñas. Un valor de 30 en este campo significa que el usuario debe cambiar su
contraseña al menos cada 30 días para evitar que su cuenta quede «bloqueada»
Ten en cuenta que si el campo min se establece en 0, el usuario puede restablecer inmediatamente su contraseña al valor original, anulando el propósito de obligar al
usuario a cambiar su contraseña cada 30 días. Así que, si se establece el campo max, normalmente se establece también el campo min.
Por ejemplo, un min:max de 5:60 se refiere a que el usuario debe cambiar su contraseña cada 60 días y, después de cambiarla, el usuario debe esperar 5 días antes de que
pueda cambiar su contraseña otra vez.
Si el campo max se establece a 99999, el valor máximo posible, entonces el usuario esencialmente nunca debe cambiar su contraseña (porque 99999 días son
aproximadamente 274 años).
warn 7 Si se establece el campo max, el campo warn indica que al usuario se le «advertirá» cuando se acerca el plazo máximo max. Por ejemplo, si se establece warn a 7, entonces
en cualquier momento durante los 7 días anteriores al plazo max se le advertirá al usuario que cambie su contraseña durante el proceso del inicio de sesión.
El usuario sólo se advierte en el inicio de sesión, por lo que algunos administradores prefieren establecer el campo de advertencia a un valor alto para proporcionar una
mayor probabilidad de tener una advertencia emitida.
Campo Ejemplo Descripción
Si el plazo máximo max se establece al valor de 99999, entonces el campo warn es esencialmente inútil
inactive 60 Si el usuario hace caso omiso a las advertencias y se excede el plazo max para la contraseña, se bloqueará su cuenta. En tal caso, el campo inactive proporciona al
usuario un período de «gracia» en el que puede cambiar su contraseña, pero sólo durante el proceso del inicio de sesión.
Si el campo inactive viene establecido a un valor de 60, el usuario tiene 60 días de gracia para cambiar la contraseña a una nueva. Si no lo hace, entonces necesitará que
el administrador restablezca la contraseña para el usuario.
expire 15050 Este campo representa el número de días a partir del 01 de enero del 1970 y el día en el que la cuenta «vencerá». Una cuenta vencida se bloqueará, no se borra, lo que
significa que el administrador puede restablecer la contraseña para desbloquear la cuenta.
Las cuentas con fechas de vencimiento normalmente se ofrecen a los empleados temporales o contratistas. La cuenta caducará automáticamente después del último día
laboral del usuario.
Cuando un administrador establece este campo, se utiliza una herramienta para convertir una fecha real en una fecha de «Época». En Internet hay varios convertidores
disponibles.
reserved Actualmente este campo no se utiliza y está reservado para su uso futuro.
Los usuarios regulares no pueden ver el contenido del archivo /etc/shadow por razones de seguridad. Para ver el contenido de este archivo, debes iniciar la sesión como administrador (la
cuenta root).
Previous
Next
Otra técnica para recuperar la información del usuario que se encuentra normalmente en los archivos /etc/passwd y /etc/shadow es utilizar el comando getent. Una ventaja de usar el
comando getent es que puede recuperar la información de la cuenta definida localmente (/etc/passwd y /etc/shadow) o en un servidor de directorio en la red.
La sintaxis general de un comando getent es: getent database record «o getent registro de base de datos» . Por ejemplo, el comando getent passwd sysadmin recuperaría la
información passwd de la cuenta para el usuario sysadmin:
El comando id informará la identidad actual, tanto por nombre del usuario como por el identificador de usuario. Además de proporcionar la información de la cuenta de usuario, también
se muestra la pertenencia a un grupo. Sin argumentos, el comando id mostrará tu identidad. Cuando un nombre de usuario viene como argumento, tal como id root, el comando muestra
otra información de cuenta:
sysadmin@localhost:~$ id
uid=1001(sysadmin) gid=1001(sysadmin) groups=1001(sysadmin),4(adm),27(sudo) context=unconfined_u:unconfined_r:unconfined t:s0-s0:c0.c1023
sysadmin@localhost:~$
sysadmin@localhost:~$ id root
uid=0(root) gid=0(root) groups=0(root)
sysadmin@localhost:~$
La salida incluye un contexto Linux mejorado de seguridad (SELinux), la parte context= de la salida, un tema que está fuera del alcance de este curso.
Previous
Next
El usuario root tiene acceso especial al sistema. Como se mencionó anteriormente, este acceso especial en realidad se proporciona a la cuenta con el UID de 0.
Hay cuentas adicionales que no están diseñadas para que los usuarios inicien sesión. Estas cuentas, normalmente de UID 1 al UID 499 se llaman cuentas del sistema y están diseñadas
para proporcionar cuentas para los servicios que se ejecutan en el sistema.
Las cuentas del sistema tienen algunos campos en los archivos /etc/passwd y /etc/shadow que son diferentes a otras cuentas. Por ejemplo, en el archivo /etc/passwd, las cuentas de
sistema tendrán un programa de no iniciar sesión en el campo del «login shell»:
bin:x:1:1:bin:/bin:/sbin:/sbin/nologin
En el archivo /etc/shadow, las cuentas del sistema tendrán típicamente el carácter * en lugar del campo de contraseña:
bin:*:1[Link]
Hay algunas cosas importantes que debes recordar sobre las cuentas de sistema:
Tradicionalmente, los sistemas UNIX limitaban a los usuarios para que pertenecieran a no más de un total de dieciséis grupos, pero los últimos núcleos de Linux soportan usuarios con
más de sesenta y cinco mil membresías .
Como ya hemos visto, el archivo /etc/passwd define la pertenencia al grupo primario de un usuario. La pertenencia a un grupo suplementario (o pertenencia a un grupo secundario), así
como los propios grupos, se definen en el archivo /etc/group.
Para ver la información sobre un grupo específico, puede utilizarse el comando grep o getent. Por ejemplo, los siguientes comandos mostrarán la información de cuenta de grupo mail:
Previous
Next
group_name:password_placeholder:GID:user_list
La siguiente tabla describe los campos del archivo /etc/group con más detalle, utilizando una línea que describe a una cuenta de grupo típica:
mail:x:12:mail,postfix
group_name mail Este campo contiene el nombre del grupo. Igual que en el caso de los nombres de usuario, para las personas es más fácil recordar los nombres de grupo. El sistema utiliza
típicamente IDs de grupos (GID) en lugar de nombres de grupo.
password_placeholder x Aunque hay contraseñas para grupos, raramente se utilizan en Linux. Si el administrador creará una contraseña de grupo, se almacenaría en un archivo diferente
(/etc/gshadow) ya que la contraseña de grupo ya no se almacena en el archivo /etc/group. La x en este campo se utiliza para indicar que la contraseña no se almacena
en este archivo. Las contraseñas de grupo están más allá del alcance de este curso.
GID 12 Cada grupo está asociado con un ID de grupo único (GID) que se coloca en este campo.
user_list mail,postfix Este último campo se utiliza para indicar quién es un miembro del grupo. Mientras que la pertenencia a un grupo primario se define en el archivo /etc/passwd,
los usuarios que se asignan a los grupos adicionales tendrían su nombre de usuario en este campo del archivo /etc/group.
En este caso, los usuarios mail y postfix son miembros secundarios del grupo mail.
Es muy común para un nombre de usuario aparecer también como un nombre del grupo. También es común que un usuario pertenezca a un grupo con el mismo
nombre.
Previous
Next
Los usuarios también pueden acceder a los archivos y dispositivos si son miembros de los grupos secundarios. El comando id se puede utilizar también para verificar la pertenencia a los
grupos secundarios del usuario:
sysadmin@localhost:~$ id -G
1001 4 27
Sin pasar opciones al comando, id listará tanto la pertenencia a los grupos primarios como a los grupos secundarios:
sysadmin@localhost:~$ id
uid=1001(sysadmin) gid=1001(sysadmin) groups=1001(sysadmin),4(adm),27(sudo)
Se puede agregar un nombre de usuario para determinar los grupos de un usuario específico:
sysadmin@localhost:~$ id sysadmin
uid=1001(sysadmin) gid=1001(sysadmin) groups=1001(sysadmin),4(adm),27(sudo)
Esto se alinea con el contenido del archivo /etc/group, cuando se revela la búsqueda para el sysadmin:
Previous
Next
Para cambiar el grupo propietario de todos los archivos en una estructura de directorios, utiliza la opción -R para el comando chgrp. Por ejemplo, el comando chgrp -R games
test_dir cambiaría la propiedad del grupo en el directorio test_dir y de todos los archivos y subdirectorios del directorio test_dir.
También existe un comando chown que se puede utilizar para cambiar al usuario propietario de un archivo o directorio. Sin embargo, este comando lo puede utilizar solamente el usuario
root. Los usuarios normales no pueden «dar» sus archivos a otro usuario.
Previous
Next
Porque usar la cuenta root es potencialmente peligrosa, sólo debe ejecutar comandos como root si se necesitan privilegios administrativos. Si la cuenta root está desactivada, tal como
sucede en la distribución de Ubuntu, entonces los comandos administrativos pueden ser ejecutados utilizando el comando sudo. Si la cuenta de root está activada, un usuario normal
puede ejecutar el comando su para cambiar a la cuenta root.
Cuando inicias sesión en el sistema directamente como root para ejecutar comandos, todo acerca de tu sesión se ejecuta como usuario root. Si utilizas el entorno gráfico, esto es
especialmente peligroso ya que el proceso de inicio de sesión gráfico se compone de muchos ejecutables diferentes (programas que se ejecutan durante el inicio de sesión). Cada
programa que se ejecuta como usuario root representa una amenaza mayor que un proceso ejecutado como un usuario estándar, ya que tales programas tendrían permisos para hacer casi
cualquier cosa, mientras que los programas de usuario estándar son muy restringidos en lo que pueden hacer.
El otro peligro potencial con el inicio de sesión en el sistema como root es que una persona que hace esto puede olvidarse cerrar la sesión para hacer su trabajo no administrativo. Esto
significa que los programas como navegadores, clientes de correo electrónico, etc. se ejecutarían como usuario root sin restricciones en lo que podrían hacer. El hecho de que varias
distribuciones de Linux, particularmente Ubuntu, no permiten a los usuarios iniciar sesión como usuario root debe ser una implicación suficiente que ésta no es la forma preferida para
realizar las tareas administrativas.
Previous
Next
Una opción común que se utiliza con el comando su es la opción -l, que hace que el nuevo shell sea un shell de inicio de sesión. Utilizando el comando su con una opción de shell de
inicio de sesión es a menudo importante para asegurar que cualquier comando ejecutado se ejecute correctamente, ya que el shell del inicio de sesión configura totalmente el nuevo shell
con la configuración del nuevo usuario. Un non-login shell sólo cambia el UID, pero no conecta al usuario completamente. La opción -l puede ser abreviada simplemente como - o
deletreada como --login.
Ya que la cuenta root se utiliza de forma predeterminada con el comando su, los siguientes dos comandos son maneras equivalentes de iniciar un shell como usuario root:
su - root
su -
Después de presionar Entrar para ejecutar uno de estos comandos, el usuario debe proporcionar la contraseña del usuario root para iniciar el shell como usuario root. Si no sabes la
contraseña de la cuenta a la que te estás moviendo, entonces el comando su fallará.
Después de usar el shell iniciado con el comando su para realizar las tareas administrativas necesarias, vuelve a tu shell original (y a la cuenta de usuario original) mediante el
comando exit.
sysadmin@localhost:~$ su -
Password:
root@localhost:~# id
uid=0(root) gid=0(root) groups=0(root)
root@localhost:~# exit
logout
sysadmin@localhost:~$ id
uid=1001(sysadmin) gid=1001(sysadmin) groups=1001(sysadmin),4(adm),27(sudo)
sysadmin@localhost:~$
Previous
Next
Igual que el comando su, el comando sudo asume por defecto que la cuenta del usuario root debe utilizarse para ejecutar comandos; para especificar una cuenta de usuario diferente,
utiliza la opción -u.
Cuando utilizas el comando sudo para ejecutar un comando como usuario root, el comando pedirá la contraseña del usuario (no la del usuario root). Esta es una característica de
seguridad que impide el acceso root no autorizados si el usuario deja su computadora desatendido. El prompt de la contraseña no aparecerá de nuevo mientras el usuario continúa
ejecutando comandos sudo con menos de cinco minutos de diferencia.
Utilizar el comando sudo para ejecutar un comando de administración resultará en una entrada en un archivo de registro. Esta entrada incluye el nombre de usuario que ejecuta el
comando, el comando ejecutado y la fecha y hora cuando se ejecutó el comando. Esto permite mayor rendición de cuentas en comparación con un sistema donde muchos usuarios saben
la contraseña de root y pueden entrar directamente como root o usar el comando su para ejecutar los comandos como el usuario root.
Puedes utilizar el comando sudo para ejecutar un comando que requiera privilegios de root. Por ejemplo, es necesario ser un usuario root para poder ver el archivo /etc/shadow. El
comando sudo head /etc/shadow ejecuta el comando head como un usuario root:
Una gran ventaja por usar sudo para ejecutar los comandos administrativos es que reduce el riesgo de que un usuario accidentalmente ejecute un comando como root. La intención de
ejecutar un comando es clara; el comando se ejecuta como root si tiene como prefijo el comando sudo. De lo contrario, se ejecuta el comando como un usuario normal.
Previous
Next
El comando visudo te pasa al programa editor, por defecto el editor vi (o vim) en la mayoría de los sistemas, el que puede ser un reto para los usuarios principiantes Linux. Para
configurar otro editor, exporta la variable EDITOR con el valor del editor que prefieres. Por ejemplo, para usar el editor gedit en vez de vi/vim, ejecutarías el comando export
EDITOR=gedit antes de ejecutar el comando visudo.
Utilizando el comando visudo se abrirá el archivo de configuración /etc/sudoers para editar. Configuraciones avanzadas del comando sudo se pueden realizar a través de este archivo,
pero están más allá del alcance de este curso. Básicamente, en este archivo se realizan las entradas para especificar qué usuario (usuarios) y en cuáles de las máquinas pueden utilizar el
comando sudo para ejecutar los comandos como otro usuario.
...se puede leer como, «el usuario root puede actuar como TODOS los usuarios en TODAS las máquina para ejecutar TODOS los comandos.» Para que un usuario como el sysadmin ejecute
todos los comandos como todos los usuarios utilizando el comando sudo, podría añadirse una entrada similar a la siguiente:
Previous
Next
Column
a Ejemplo Descripción
userna root Esta columna indica el nombre del usuario que inició la sesión. Ten en cuenta que por "sesión" nos referimos a «cualquier proceso de
me inicio de sesión y cualquier ventana de la terminal abierta».
termina tty2 Esta columna indica en qué ventana de terminal está trabajando el usuario.
l
Si el nombre de la terminal inicia con tty , entonces esto es una indicación de un inicio de sesión local, está es una terminal de línea de
comandos regular.
Si el nombre de la terminal inicia con pts, entonces esto indica que el usuario está usando una pseudo terminal o corriendo un proceso
que actúa como la terminal. Esto puede significar que el usuario tiene una aplicación de terminal corriendo en X Windows, como gnome-
terminal o xterm o pueden haber usado un protocolo de red para conectarse al sistema, como ssh o telnet.
Después de la fecha y la hora en que el usuario inició sesión en el sistema, puede aparecer alguna información de localización.
Si la información de localización contiene un nombre de host, nombre de dominio o dirección IP, entonces el usuario inició sesión
remotamente.
Si hay dos puntos y un número, entonces esto indica que han hecho un inicio de sesión gráfico local.
Si no se muestra información de localización en la última columna, entonces esto significa que el usuario inició sesión mediante un
Column
a Ejemplo Descripción
Si quieres visualizar la información sobre el estado del sistema, el comando who puede hacerlo utilizando varias opciones. Por ejemplo, la opción -b mostrará la última vez que el
sistema se inició (fue arrancado) y la opción -r mostrará el tiempo en el cual el sistema haya alcanzado un cierto nivel ejecución:
sysadmin@localhost:~$ who -b -r
system boot 2013-10-11 09:54
run-level 5 2013-10-11 09:54
La primera línea de la salida del comando w es idéntica a la comando uptime. Muestra la hora actual, cuánto tiempo el sistema ha estado funcionando, el número total de inicios de
sesión actuales (usuarios) y el promedio de la carga en el sistema en los últimos 1, 5 y 15 minutos. El promedio de carga es el uso de la CPU donde un valor de 100 significaría un
uso completo de la CPU durante ese periodo de tiempo.
La tabla siguiente describe el resto de la salida del comando w:
USER root Esta columna indica el nombre del usuario que inició la sesión.
TTY tty2 Esta columna indica en qué ventana de terminal el usuario está trabajando.
IDLE 43:44 Cuánto tiempo el usuario ha estado inactivo desde la ejecución del último comando.
JCPU 0.01s El tiempo total de cpu (s=segundos) utilizado por todos los procesos (programas) ejecutados desde el inicio de sesión.