.. _gesusu: Gestión de usuarios =================== En los sistemas multiusuario suelen existir dos conceptos: el de :dfn:`usuario` relacionado con una *personalidad* que ejecuta algún programa y el de :dfn:`grupo`, que no es más que un conjunto de usuarios a los que se les quiere dotar de una característica común. Obsérvese que se ha hablado de *personalidad* y no de *persona*, porque un usuario no tiene necesariamente que corresponderse con un ser humano interactuando con el sistema. Muchos usuarios (en los sistemas de escritorio, la mayoría) no son usuarios creados para facilitar el acceso y el manejo a una persona física, sino *usuarios de sistema*, creados para que un determinado programa actúe bajo su identidad. Con independencia de los anterior, puede haber dos tipos de usuarios (o grupos): usuarios *locales*, esto es, definidos en el propio sistema; y usuarios *remotos*, definidos a través de algún servidor de usuarios como :ref:`samba`. Bajo este epígrafe se estudiarán los primeros sin profundizar demasiado, ya que una instalación estándar deja preparado el sistema para funcionar con ellos. En los sistemas *UNIX*, hay cuatro archivos que constituyen la *base de datos* de los usuarios locales\ [#]_. Todos los archivos se caracterizan porque cada línea define una entidad distinta y porque los campos que constituyen cada entidad se separan por el carácter dos puntos (\":kbd:`:`\"). Antes de pasar a ver con qué ordenes podemos consultar y manipular esta base de datos, veamos las particularidades de cada archivo: .. _etc_group: :file:`/etc/group` Almacena la definición de los grupos locales, uno por línea. Su formato es el siguiente: .. code-block:: unixconfig audio:x:29:pepe,manolo,josem O sea, cuatro campos: #. El **nombre** del grupo (*audio* en este caso), #. La *contraseña* de grupo. Esta contraseña sirve para dar acceso a un usuario a un grupo al que no pertenezca (para ello puede usarse el comando `newgrp`_). En los *unices* modernos su valor es siempre la letra ":kbd:`x`", que significa que la contraseña se encuentra en el archivo :ref:`/etc/gshadow `. #. El identificador del grupo (llamado |GID|). #. Los **usuarios** que pertenecen al grupo separados por comas. En esta lista no aparecen los usuarios cuyo *grupo principal* sea este mismo grupo, ya que su pertenencia al grupo puede deducirse de su :ref:`registro en /etc/passwd `. .. _etc_passwd: :file:`/etc/passwd` Almacena los usuarios y sus datos. El formato de cada línea es el siguiente: .. code-block:: unixconfig josem:x:1000:1000:Jose Miguel,,,:/home/josem:/bin/bash .. _grupo_principal: En este caso, los campos son siete: #. El **nombre** de usuario. #. La **contraseña**. Este campo, sin embargo, contiene en los *unices* modernos\ [#]_ el carácter ":kbd:`x`", que indica al sistema que la contraseña debe buscarse en otro archivo (:ref:`/etc/shadow `, que se analizará a continuación). #. El identificador de usuario (|UID|) que es el código numérico asociado a cada usuario. Este número es realmente el que se usa en el sistema de archivos para determinar la propiedad de los archivos, así que en el fondo es el identificador realmente importante y no el nombre de usuario, que puede modificarse en cualquier momento sin provocar ningún efecto traumático. Se discutirá después. Este mismo comentario es aplicable al nombre de grupo y su *gid* asociado que se encuentran en :file:`/etc/group`. #. El |GID| del *grupo principal*. Un usuario puede pertenece a varios grupos y a efectos de permisos es irrelevante que un grupo determinado sea o no su grupo principal, mientras pertenezca a él. Sin embargo, como :ref:`ya se verá `, todo archivo tiene un usuario propietario y un grupo propietario. Cuando un usuario crea un archivo, tal archivo le pertenecerá (esto es, el propio creador será el propietario) y el grupo propietario será el grupo principal del usuario creador. Por tanto, si este usuario *josem* crea un archivo pertenecerá al grupo de |GID| **1000** y no al grupo audio (|GID| **29**), aunque *josem* también pertenece a este último. #. La **información personal** del usuario (nombre real, etc.), que suele denominarse información |GECOS|. #. El **directorio personal** del usuario. #. La **shell** predeterminada del usuario que se ejecutará al hacer ingreso en el sistema. Las cuentas que no representan usuarios normales, sino que son necesarias para el funcionamiento de ciertos programas suelen tener como *shell* el comando :ref:`false ` (:command:`/bin/false`), lo que impide que puedan usarse de modo interactivo. .. note:: En algunos Linux, incluida Debian, existe el ejecutable :command:`/usr/sbin/nologin` que se comporta como :command:`/bin/false`, pero, además, muestra un mensaje de que la cuenta se encuentra deshabilitada. .. note:: En :file:`/etc/shells` se encuentra la lista de *shells* que el sistema considera válidas. Los servicios que usa de modo interactivo el usuario (*login*, *ssh*, *ftp*, etc.) suelen comprobar si la *shell* se encuentra dentro de este listado y, si no es así, impiden el acceso. .. _etc_shadow: :file:`/etc/shadow` Almacena las contraseñas cifradas de los usuarios y campos adicionales con información sobre ellas (caducidad, etc). En realidad, las contraseñas no están propiamente cifradas, sino que se les aplica una :ref:`función de hash `. Por ejemplo, la información del usuario "*usuario*" es la siguiente: .. code-block:: unixconfig # getent shadow usuario usuario:$6$feeCGVjY$m4drjYETO7DNffE/8AwmTvRnTj8qmSMy8AhMq1jaNf3ZonyAFPVc64SsY/iWTR3LxtXKnD2hfavS1FXwelAyq1:17782:0:99999:7::: La contraseña es ell segundo campo, ese chorizo inmenso en el que se aprecian tres subcampos separados por dólares: ``6`` Es el :ref:`algoritmo ` usado, según la siguiente tabla: ======== ====================== Código Algoritmo ======== ====================== 1 MD5 (desaconsejado) 2b Blowfish 5 SHA-256 6 SHA-512 7 Colin Percival y Solar Designer ======== ====================== Los posibles algoritmos se encuentran referidos en la página de manual de :manpage:`crypt(5)`. ``feeCGVjY`` Es `la sal `_ utilizada para la generación del resumen. ``m4drjYETO7DNffE/8AwmTvRnTj8qmSMy8AhMq1jaNf3ZonyAFPVc64SsY/iWTR3LxtXKnD2hfavS1FXwelAyq1`` El resumen resultante de aplicar a la contraseña el algoritmo usando la sal. .. _mkpasswd: .. index:: mkpasswd Como de antemano sabemos que la contraseña en claro es "*usuario*", podemos generar el resumen\ [#]_ que aparece en :file:`/etc/shadow` del siguiente modo:: $ mkpasswd -m sha512crypt -S feeCGVjY usuario $6$feeCGVjY$m4drjYETO7DNffE/8AwmTvRnTj8qmSMy8AhMq1jaNf3ZonyAFPVc64SsY/iWTR3LxtXKnD2hfavS1FXwelAyq1 La nombre para expresar el algoritmo puede obtenerse consultando los nombres disponibles:: $ mkpasswd -m help .. _etc_gshadow: :file:`/etc/gshadow` Almacena las contraseñas cifradas de los grupos. Sin embargo, es raro que tales contraseñas existan, ya que este método para ganar accesos tiene la debilidad de exigir que varios usuarios deban compartir una misma contraseña. Por ello prescindiremos de analizar su formato. .. warning:: Absténgase de alterar a mano los archivos anteriores. Existen herramientas para hacerlo que trataremos a continuación. Consulta -------- Hay varios comando relacionados con el propósito de conocer información acerca de usuarios y grupos: .. index:: who .. _who: :manpage:`who` Muestra los usuarios que ingresaron en el sistema y en qué terminal se encuentran:: $ who josem pts/0 2016-10-12 08:35 (:0.0) josem pts/1 2016-10-12 08:36 (tmux(3218).%0) josem pts/2 2016-10-12 12:18 (tmux(3218).%5) .. note:: Es también útil el comando con el parámetro ``-b`` que permite conocer cuándo se arrancó el sistema:: $ who -b arranque del sistema 2016-10-12 08:33 .. warning:: Se muestran sólo los usuarios con los que se abrió la terminal y no usuarios a los que se haya podido acceder luego a través del comand :ref:`su `. .. _whoami: .. index:: whoami :manpage:`whoami` Muestra quién es el usuario que se está utilizando:: $ whoami josem .. _logname: .. index:: logname :manpage:`logname` Muestra cuál es el usuario con el que se ingresó en el sistema:: $ logname josem .. warning:: En ciertas ocasiones :command:`whoami` (o el explicado posteriormente :ref:`id `) y :command:`logname` no devuelven el mismo usuario. Véase :ref:`su ` más adelante. .. _groups: .. index:: groups :manpage:`groups` Muestras los usuarios a los que pertenece el usuario que se proporciona como argumento. Si no se especifica usuario, se sobreentiende que es aquel que ejecuta la orden:: $ groups josem josem cdrom floppy audio dip video plugdev staff users netdev qemusers .. index:: id .. _id: :manpage:`id` Sirve para obtener información del usuario cuyo nombre se proporciona como argumento. Si no se especifica, se sobreentiende que es aquel que ejecuta la orden:: $ id josem uid=1000(josem) gid=1000(josem) grupos=1000(josem),24(cdrom),25(floppy),29(audio), 30(dip),44(video),46(plugdev),50(staff),100(users),107(netdev),117(qemusers) El comando puede usarse también para obtener información más precisa:: $ id -u josem 1000 $ id -g josem 1000 $ id -G josem 1000 24 25 29 30 44 46 50 100 107 117 Si se incluye el parámetro :kbd:`-n`, se devuelven nombres y no números. Por tanto:: $ id -Gn josem josem cdrom floppy audio dip video plugdev staff users netdev qemusers equivale a usar `groups`_. .. index:: getent .. _getent: :manpage:`getent` Sirve para obtener la información de usuarios, grupos y contraseñas tal y como se observa en los archivos :file:`/etc/passwd` y :file:`/etc/group`:: getent (passwd|group|shadow) [] Dependiendo de si el primer argumento es ``passwd`` o ``group`` o ``shadow``, se devuelve información sobre usuarios, grupos o contraseñas. El segundo argumento es el nombre de usuario o de grupo del que se quiere obtener la información. Si no se especifica ninguno, se devuelve la información de todos:: $ getent passwd josem josem:x:1000:1000:Jose Miguel,,,:/home/josem:/bin/bash .. note:: Podría pensarse que usar :command:`getent` es equivalente a consultar directamente el contenido de los archivos correspondientes, pero no es así. :command:`getent` devuelve información sobre todos los usuarios y grupos reconocidos por el sistema, algunos de los cuales pueden no ser locales, sino estar definidos en servidores como *samba* o *openldap*. Manipulación ------------ La manipulación implica la creación, eliminación y modificación de usuarios y grupos. Obviamente, es posible editar\ [#]_ directamente los archivos ya mencionados, aunque es infinitamente más recomedable hacer uso de programas específicos, que serán los que se traten a continuación. .. _adduser: .. index:: adduser :manpage:`adduser` Como su nombre indica, sirve para añadir un usuario local al sistema. Su sintaxis es:: adduser [opciones] Y en su uso más básico no exige ninguna opción. Ejecutado de este modo, el comando preguntará por la contraseña y la información *gecos*; y hará una serie de presuposiciones algunas de ellas basadas en el contenido del archivo de configuración :file:`/etc/adduser.conf`: * El |UID| será el siguiente disponible dentro del rango de números reservado para los usuarios que son personas, * Se creará un grupo con el mismo nombre que el usuario y se le escogerá como grupo principal. * El usuario no pertenecerá a ningún grupo adicional. * El directorio personal será :file:`/home/nombre_del_usuario`. Por ejemplo:: $ adduser nuevo Creará un usuario de nombre *nuevo* bajo estos presupuestos. Conviene leer la página del manual y el archivo :file:`/etc/adduser.conf` para saber cómo alterar este comportamiento. No obstante, es interesante aclarar algo que se llegará a descubrir si se lee el archivo de configuración. Hay tres rangos de números definidos para los usuarios: #. El rango **1-99** (**0** es siempre el identificador del administrador, que se llama **root**) reservado a ciertos usuarios que vienen creados desde la instalación por *Debian* (p.e. *www-data*). #. El rango **100-999** se reserva a usuarios de sistema, esto es, usuarios destinados a servir como ejecutores de ciertos programas, por lo general, servicios (o *demonios* en la terminología de *unix*). #. El rango **1000-99999** se destina a usuarios normales que son los que usan interactivamente las personas que acceden el sistema. Es conveniente tener presente estos números si decidimos asignar nosotros manualmente el |UID| al usuario. Pero lo más lógico y cómodo es dejar que :command:`adduser` se encargue de asignar el identificador: jamás pondrá uno menor a 100, normalmente usará uno por encima de 999, y sólo si se usa la opción ``--system`` considerará el usuario como usuario de sistema y escogerá un número entre 100 y 999. También es importante reseñar que es imposible pasar a :command:`adduser` la contraseña de usuario (lo más que puede hacerse es dejarlo sin contraseña) lo que imposibilita usarlo para dar de alta usuarios funcionales automáticamente. A menos, claro está, que se dejen sin contraseña y se use luego otro comando como `chpasswd`_. Un uso habitual de :command:`adduser` es añadir un usuario existente a un grupo existente. Para ello basta con usarlo del siguiente modo:: $ adduser nuevo disk En este caso, *nuevo* es el usuario que existe y *disk*, el grupo existente al que se añade tal usuario. En realidad, :command:`adduser` es un *script* escrito en `perl `_ que evita tener que usar el :index:`comando ` de más bajo nivel :manpage:`useradd`. De hecho, la página de manual de este último comando aconseja a los administradores de *Debian* usar :command:`adduser`: useradd is a low level utility for adding users. On Debian, administrators should usually use :manpage:`adduser(8)` instead. Por esta razón, no entraremos a discutir el uso de :command:`useradd`; ni por la misma razón el :index:`uso ` de :manpage:`userdel`. .. _deluser: .. index:: deluser :manpage:`deluser` *Script* que sirve para borrar usuarios locales. En principio, sólo borra el usuario (y su grupo principal si a este grupo sólo pertenecía él), pero pueden usarse distintas opciones para borrar el directorio personal (``--remove-home``) o todos los archivos del sistema que le pertenecen (``--remove-all-files``):: $ deluser --remove-home nuevo También es posible hacer copia de seguridad de los archivos antes de proceder al borrado. Consúltese la página del manual. Del mismo modo que :command:`adduser` permite añadir un usuario a un grupo, deluser permite borrarlo, si se usa:: $ deluser nuevo audio Borra el usuario *nuevo* del grupo *audio*. .. note:: Cuando se borra un usuario, si quedan en el sistema archivos que le pertenecían estos seguirán teniendo como usuario propietario un usuario con el |UID| que tenía el usuario que se borró. Si comprobamos el propietario (con :ref:`stat ` o :ref:`ls -l `) veremos que aparece directamente el |UID| y no el nombre de usuario ya que al haberlo borrado el sistema no puede obtener ningún usuario con ese |UID|. Por supuesto, si creáramos un nuevo usuario forzando que su |UID| fuera el del borrado, todos los archivos pasarían a ser de su propiedad. .. _passwd: .. index:: passwd :manpage:`passwd` Permite cambiar la contraseña de usuario de modo interactivo. Su sintaxis es:: passwd [opciones] [] Posee diversas opciones que permiten a :command:`passwd` hacer algo más que cambiar contraseñas (bloquear o desbloquear el usuario, hacer que expire la contraseña inmediatamente, etc.):: $ passwd josem Si no se especifica el nombre de usuario, el sistema entenderá que se quiere operar sobre el usuario que ejecuta el comando. Una opción especialmente interesante es :kbd:`--expire` que provoca que se le exige al usuario cambiar la contraseña la primera vez que accede al sistema. .. note:: :command:`passwd` siempre pide la contraseña actual antes de pedir la nueva, excepto si el usuario que lo ejecuta es *root*. .. note:: Puede configurarse la robustez mínima exigible para la contraseña a través de :ref:`PAM `. .. _chpasswd: .. index:: chpasswd :manpage:`chpasswd` Permite cambiar contraseñas de usuario de manera no interactiva, lo cual es muy útil cuando se escriben *scripts*. El comando admite por la entrada estándar líneas de la forma:: usuario:contraseña e irá línea a línea asignando a cada usuario la contraseña proporcionada. Si lo que se quiere es cambiar la contraseña de un usuario puede hacerse lo siguiente haciendo uso de una :ref:`redirección `:: $ echo "usuario:contraseña" | chpasswd Ahora bien, esto último plantea un problema de seguridad ya que la contraseña sin cifrar acabará almacenada en el historial de :program:`bash`. Para evitarlo, podríamos deshabilitar para la sesión el historial redefiniendo la variable :ref:`HISTFILE `:: $ HISTFILE=/dev/null Esto basta con hacerlo antes de salir de la sesión que es el momento en que los comandos se almacenan en el archivo del historial (:file:`~/.bash_history`). La orden permite también la opción :kbd:`-e` que presupone que la contraseña que se le pasa ya está cifrada. Esto tiene utilidad en algunos casos\ [#]_: * Cuando se quiere crear un usuario con contraseña nula, esto es, el usuario accede escribiendo sólo su nombre de usuario:: # echo "usuario:" | chpasswd -e .. warning:: Tenga cuidado, porque no todos los servicios aceptan por defecto usuarios con contraseña nula. * Deshabilitar la contraseña, para lo cual se suele sustituir por un asterisco:: # echo "usuario:*" | chpasswd -e .. _chfn: .. index:: chfn :manpage:`chfn` Permite cambiar la información GECOS de un usuario. Esta información se compone de distintos campos y :command:`chfn` nos permite modificarlos por separado, por lo que tiene una opción distinta para cada campo. Por ejemplo:: # chfn -f "Usuario plebeyo" usuario permitiría cambiar el nombre completo del usuario *usuario*. .. _chsh: .. index:: chsh :manpage:`chsh` Permite cambiar la *shell* del usuario. Un usuario puede cambiar únicamente su propia *shell*:: $ chsh -s /bin/dash mientras que el administrador puede cambiar la *shell* a cualquier usuario:: # chsh -s /bin/dash usuario .. _usermod: .. index:: usermod :manpage:`usermod` Permite modificar los datos de un usuario ya creado. Es el compañero de :manpage:`useradd` y :manpage:`userdel`, pero en este caso si lo usaremos al no existir alternativa. Se puede hacer casi cualquier cosa: bloquear o desbloquear usuarios (lo cual también es posible a través de `passwd`_), modificar la directorio personal, cambiar el nombre de usuario o el grupo principal, etc. Todo está en su página de manual. Algunos usos interesantes son: * Cambia el nombre de usuario, pero también el directorio personal moviendo los archivos que hubiera dentro del antiguo directorio:: $ usermod -l otro -md /home/otro nuevo * Añade el usuario a dos grupos más (*audio* y *video*):: $ usermod -aG audio,video nuevo Obsérvese que se incluye la opción ``-a``, porque en caso contrario el usuario nuevo sólo pasará a pertenecer a estos dos grupos, eliminándose su pertenencia a los grupos en los que ya estaba (excepto su grupo principal, claro). * El usuario dejará de poder iniciar sesiones interactivas:: $ usermod -s /usr/sbin/nologin nuevo .. _groupmod: .. index:: groupmod :manpage:`groupmod` Es a los grupos lo que :ref:`usermod ` a los usuarios. Algunos usos útiles son cambiar el nombre del grupo:: # groupmod -n nuevo_nombre antiguo_nombre o definir cuáles son sus miembros:: # groupmod -U usu1,usu2,usu3 grupo Esta orden define la lista completa de miembros, por lo que si el grupo tenía otros miembros que no se incluyen, dejarán de serlo. Si lo que se quiere es añadir nuevos miembros, entonces puede añadirse la opción :kbd:`-a`:: # groupmod -aU usu1,usu2,usu3 grupo .. _chage: .. index:: chage :manpage:`chage` Ya se ha dejado escrito más arriba que las contraseñas se escriben en un archivo aparte llamado :file:`/etc/shadow`. Esto permite no sólo impedir el acceso a los usuarios, sino añadir campos adicionales que informen sobre la política de contraseñas: máximo tiempo de vigencia de la contraseña, obligatoriedad de cambiarla en el siguiente acceso, etc. .. seealso:: Échele un ojo a la página de manual de :manpage:`shadow(5)`. :command:`chage` es la orden que nos permite modificar de modo sencillo los campos de :file:`/etc/shadow` a fin de alterar la política de contraseñas de un usuario. Por tanto, es a las contraseñas lo que la orden a :command:`usermod` a la información contenida en :file:`/etc/passwd` .. note:: :command:`chage` permite cambiar todo lo referente a la contraseña, excepto la contraseña misma, para lo cual hay que recurrir a :command:`chpasswd` o :command:`usermod`. Tampoco sirve para definir la complejidad de la contraseña, puesto que ello no se codifica en :file:`/etc/shadow`. Algunas operaciones útiles son: * Comprobar la política de contraseñas (la propia, excepto *root* que puede consultar todas):: $ chage -l usuario * Forzar el cambio de contraseña en el próximo ingreso:: # chage -d0 usuario * Establecer la vigencia de la contraseña (en días):: # chage -M30 usuario Pasados estos días (que se cuentan a partir del último cambio de contraseña), se obligará al usuario a cambiar la contraseña antes de poder acceder a la cuenta. * Establecer con cuántos días de antelación se empezará a avisar de que la contraseñá está próxima a caducar:: # chage -W5 usuario * Establecer el límite de días que una cuenta con la contraseña caducada permanecerá activa:: # chage -l15 usuario Pasado este tiempo, la única forma de recuperar la cuenta será avisar al administrador para que la desbloquee. .. note:: :command:`chage` permite cambiar los valores para usuarios ya existentes. Si nuestra intención, en cambio, fuera alterar los valores predeterminados para que con ellos se creen los nuevos usuarios, entonces deberemos editar el archivo :file:`/etc/login.defs` y en particular las líneas: .. code-block:: nginx PASS_MAX_DAYS 30 PASS_MIN_DAYS 2 PASS_WARN_AGE 7 .. _newgrp: .. index:: newgrp :manpage:`newgrp` Cambia el grupo perdeterminado del usuario durante la sesión actual. Por ejemplo, si *nuevo* ya pertenece al grupo *audio*:: $ whoami nuevo $ groups nuevo audio video plugdev $ id -ng nuevo $ newgrp audio $ id -ng audio Como se ve ahora el grupo principal de *nuevo* es *audio* y así será mientras que no abandone la sesión abierta. En principio, no parece tener demasiada utilidad en la medida en que los permisos que obtendrá el usuario serán los mismos que ya tenía, puesto que ya pertenecía a *audio*. Sin embargo, si al usuario se le incluyó en el grupo *audio* después de que abriera la sesión, entonces para esa sesión el usuario no pertenece al grupo y debería abandonar la sesión y volver a entrar para que recargue su membresía y pueda gozar de los privilegios de los que goza en el nuevo grupo. Usando, sin embargo, :command:`newgrp` el usuario redefinirá temporalmente *audio* como su grupo principal y entonces sí podrá gozar de sus privilegios sin necesidad de reingresar. Si el usuario no pertenece al grupo, aún podrá redefinirlo temporalmente como su grupo principal, pero sólo en caso de que para el grupo se haya definido una contraseña (que deberá introducir) y ya se ha discutido que esto no es algo demasiado seguro. Cambio de identidad ------------------- En ocasiones, un usuario puede haber accedido con una determinada identidad al sistema y requerir tener otra identidad para realizar una tarea determinada. Por ejemplo, un usuario que se encuentra utilizando el sistema, pero que se ve en la necesidad de convertirse en *root*, para realizar una tarea de administración. .. _su: .. index:: su :manpage:`su` Permite identificarse con otra identidad a un usuario ya identificado en el sistema, sin necesidad de salir y acceder a esta nueva identidad a través del proceso de *login*:: $ whoami usuario $ su - otro Contraseña: $ whoami otro Mediante este comando el usuario actual podría convertirse en el usuario *otro* si es que conoce la contraseña de este último. La opción ``-`` hace que la conversión al nuevo usuario sea lo más parecida posible a como sería si se hiciera mediante *login*. La opción ``-c`` permite indicar el comando que se quiere ejecutar al convertirse en el nuevo usuario. Al acabarse de ejecutar el comando, se vuelve al usuario original:: $ whoami usuario $ su - otro -c "whoami" Contraseña: otro $ whoami usuario Cuando no se especifica el nombre del nuevo usuario, se sobrentiende que es *root*:: $ su - Contraseña: # whoami root .. note:: Como :command:`logname` devuelve el nombre del usuario con que se ingresó en el sistema, si se cambia con :command:`su` de usuario, seguirá devolviendo el nombre original del usuario:: $ whoami usuario $ logname usuario $ su - Contraseña: # whoami root # logname usuario .. note:: :command:`su` exige conocer la contraseña del usuario del que se quieren obtener los privilegios. Además, nos convierte en tal usuario con lo que se asumirán todos sus permisos. Existe otra manera de conseguir privilegios de otro usuario que evita estos dos inconvenientes: :ref:`sudo `. .. warning:: En algunas distribuciones (p.e. Ubuntu_), el administrador carece de contraseña, por lo que es imposible escalar privilegios con :command:`su` y debe usarse :ref:`sudo `. Por supuesto, basta con asignar una contraseña a *root* para que :command:`su` pueda usarse como método para escalar privilegios. .. note:: En algunas distribuciones sólo le es permitido escalar privilegios mediante :command:`su` al usuario que pertenece al grupo *wheel*. Esto se logra manipulando :ref:`el proceso de autenticación `; en particular, usando el módulo :ref:`pam_wheel` en el proceso de autenticación de :command:`su`. *Debian* contiene la línea, pero la tiene comentada. .. _runuser: .. index:: runuser :manpage:`runuser` Es una orden propia del administrador para que pueda ejecutar órdenes puntuales como un usuario distinto\ [#]_. Su uso más habitual es el siguiente:: # runuser -u usuario -- whoami usuario es decir, indicar con la opción :kbd:`-u` cuál es el usuario en nombre del cual se quiere ejcutar la orden, utilizar :kbd:`--` para indicar que lo que sigue es la orden y, finalmente, escribir la orden con todos sus argumentos. En el ejemplo, hemos usado :ref:`whoami ` que no requiere de ninguno. .. _ej-usu: .. include:: /99.ejercicios/04-usuarios.rst .. rubric:: Notas al pie .. [#] Pueden existir también usuarios de red, definidos en algún servidor de usuarios, pero es materia para :ref:`otro epígrafe posterior `. .. [#] Y, en realidad, no tan modernos, ya que la innovación apareció a mediados de los ochenta. El problema de almacenar también en :file:`/etc/passwd` la contraseña es que a este archivo todos los usuarios tienen acceso y, por tanto, todos pueden las contraseñas criptográficamente *resumidas* del resto, lo cual es una vulnerabilidad ya que se presta a ataques de fuerza bruta. .. [#] :command:`mkpasswd` pertenece al paquete :deb:`whois`, que puede no estar instalado en el sistema. También pueden generarse con :ref:`openssl `, que estará instalado casi con total seguridad en el sistema, pero no soporta todos los algoritmos posibles:: $ openssl passwd -6 -salt feeCGVjY usuario $6$feeCGVjY$m4drjYETO7DNffE/8AwmTvRnTj8qmSMy8AhMq1jaNf3ZonyAFPVc64SsY/iWTR3LxtXKnD2hfavS1FXwelAyq1 .. [#] No deben, de ningún modo, editarse los archivos a través del editor normal, puesto que mientras se realiza la edición, podría darse el caso de que otro usuario intentara modificarlo a través de una de las herramientas específicas que existen. Si se tiene la mala idea de tocar a mano, debe hacerse a través del :index:`commando ` :command:`vipw`, que bloquea el archivo para que ningún otro programa lo toque en tanto se completa la modificación. .. [#] Aunque en estos casos es mejor usar la opción :ref:`usermod ` con la opción :kbd:`-p` y nos ahorramos la tubería. Por ejemplo:: # usermod -p "" usuario .. [#] Por tanto, podríamos emular su propósito con la opción :kbd:`-c` de :ref:`su `. .. |GECOS| replace:: :abbr:`GECOS (General Comprehensive Operating System)` .. |GID| replace:: :abbr:`GID (Group IDentifier)` .. _Ubuntu: https://www.ubuntu.com