Sudo
sudo es una herramienta del sistema que permite a los usuarios especificados en el archivo de configuración /etc/sudoers, la ejecución de comandos con los privilegios de otro usuario ( incluido root), al que denominaremos "ususario privilegiado", de acuerdo a como se haya especificado en el mencionado archivo de configuración. En /etc/sudoers, se especifica quien está autorizado a hacer que con los privilegios de quien.
De hecho, la finalidad de sudo es reemplazar a su .
Por defecto, sudo requiere que los usuarios se identifiquen con su propia clave de acceso ( nunca con la clave de acceso de root o del usuario a "nombre del quien" ejecutarán el comando).
Una vez se ha identificado correctamente, el usuario podrá utilizar nuevamente sudo sin necesidad de una nueva identificación durante un periodo de tiempo, determinado en /etc/sudoers, . ( por defecto: 5 minutos).
Con el comando sudo -v podra reiniciarse el citado periodo.
El "prompt" de la contraseña también se desactiva si en un determinado tiempo no se ha introducido ésta. Por defecto este periodo es de 5 minutos.
Si un usuario no contemplado en /etc/sudoers, intenta ejecutar un comando via sudo , se advierte del ello al administrador del sistema ( o a quien se determine en /etc/sudoers, ; por defecto, root ) mediante el envio de un mail.
Debe tenerse en cuenta que el mencionado mail no será enviado si el usuario no autorizado intenta la ejecución de un comando via sudo con las opciones -l o -v . Esto permite a los usuarios comprobar por si mismos si están o no autorizados a utilizar sudo .
Sudo puede registrar los intentos de acceso, exitosos y fallidos, asi como los errores, en syslog, en otro archivo log que determinemos o en ambos. Por defecto, sudo utiliza syslog para los mencionados registros, aunque esto también es configurable en /etc/sudoers .
La sintaxis básica de la órden sudo es:
$ sudo opción comando
Tras pulsar Enter sudo pedirá al usuario que se identifique con su propia contraseña (configuración por defecto)
La secuencia de la ejecución de un comando via sudo (sin opciones), sería la siguiente:
asd53@ubuntu-p:~$ sudo apt-get update
Tras pulsar Enter , se nos solicita la introducción de nuestra contraseña:
asd53@ubuntu-p:~$ sudo apt-get update
Password:
Una vez introducida la contraseña correcta, se ejecuta el comando (en el ejemplo: apt-get update).
Opciones del comando sudo
-H
(Home)
Asigna la variable de entorno HOME al homedir del usuario privilegiado ( por defecto, root) tal como se especifica en passwd. Por defecto, sudo no modifica la variable HOME ( ver: set_home, y always_set_home, .)
-K
Análoga a la opción -k, con la diferencia que -K elimina completamente el tiempo de vigencia de la contraseña del usuario, establecido en timestamp_timeout, , para la sesión corriente.
Como -k, , esta opción no precisa contraseña.
-L
(list defaults)
Con esta opción se nos presenta una lista con las Opciones de Configuración (Defaults), de /etc/sudoers), , con una corta descripción de cada una de ellas.
asd53@ubuntu-p:~$ sudo -L
Available options in a sudoers ``Defaults'' line:
syslog: Syslog facility if syslog is being used for logging
syslog_goodpri: Syslog priority to use when user authenticates successfully
syslog_badpri: Syslog priority to use when user authenticates unsuccessfully
long_otp_prompt: Put OTP prompt on its own line
ignore_dot: Ignore '.' in $PATH
mail_always: Always send mail when sudo is run
mail_badpass: Send mail if user authentication fails
mail_no_user: Send mail if the user is not in sudoers
......................................................
-P
(preserve group vector)
Da lugar a que sudo conserve el grupo vector del usuario que lo invoca.
-S
(stdin)
Da lugar a que sudo lea la contraseña desde standard input en lugar de hacerlo desde la terminal.
-V
(version)
Con esta opción, sudo nos muestra la versión utilizada y sale.
Si se ejecuta sudo -V como root, nos muestra las opciones con las que fué compilado sudo, asi como las direcciones , en la red local, de las distintas máquinas.
Ejecutado como usuario normal:
asd53@ubuntu-p:~$ sudo -V
Sudo version 1.6.8p12
asd53@ubuntu-p:~$
Ejecutado como root:
root@ubuntu-p:~# sudo -V
Sudo version 1.6.8p12
Authentication methods: 'pam'
Syslog facility if syslog is being used for logging: authpriv
Syslog priority to use when user authenticates successfully: notice
Syslog priority to use when user authenticates unsuccessfully: alert
Send mail if the user is not in sudoers
............................................
Environment variables to check for sanity:
XAUTHORIZATION
XAUTHORITY
..............................................
Environment variables to remove:
PERL5OPT
PERL5LIB
PERLLIB
...............................................
Local IP address and netmask pairs:
192.168.0.12 / 0xffffff00
root@ubuntu-p:~#
-a
(authentication type)
Da lugar a que sudo utilice el tipo de identificación de usuario especificado en /etc/login.conf. El administrador del sistema puede especificar una relación de métodos de identificación específicos para sudo , añadiendo una entrada "auto-sudo" en /etc/login.conf. En sistemas que soportan identificación BSD, esta opción sera operativa solo si sudo ha sido configurado con la opción --with-bsdauth.
-b
(background)
Da lugar a que sudo ejecute el comando en cuestión en segundo plano (background). Debemos tener en cuenta que si utilizamos esta opción, no podremos utilizar el control de tareas de shell ( shell job control) para manipular el proceso.
-c
(class)
Da lugar a que sudo ejecute el comando especificado con recursos limitados por la login class especificada. El argumento de -c puede ser tanto un nombre de clase definido en /etc/login.conf , o un simple caracter - . Especificando - se indica que el comando puede ejecutarse con las restricciones por defecto para el usuario. Si el argumento de -c especifica una class existente, el comando debe ser ejecutado como root, o el comando sudo debe ser ejecutado desde una shell root.
En sistemas que con BSD login class, esta opción sera operativa solo si sudo ha sido configurado con la opción --with-logincap.
-e
(edit)
Con esta opción se indica a sudo que, en lugar de ejecutar un comando, lo que se desea es editar uno o mas archivos.
Si el usuario esta autorizado en /etc/sudoers), , se seguiran las siguientes etapas:
1. Se realizarán copias temporales de los archivos editados, con los parámetros del usuario .
2. El se usará editor especificado en las variables de entorno VISUAL o EDITOR para editar los archivos temporales. Si no se ha especificado editor en las citadas variables, se usará uno de los especificados en la opción de configuración editor, .
3. Una vez modificadas, los archivos temporales serán copiados en su localización original y se eliminarán las versiones temporales creadas.
Si el archivo especificado no existe, será creado.
A diferencia de muchos comandos ejecutados via sudo , el editor usado se ejecuta sin modificación del entorno del usuario.
Si por alguna razón sudo no puede actualizar un archivo con su versión editada, el usuario recibirá un mensaje de alerta y la copia editada permanecerá como un archivo temporal.
En el siguiente ejemplo, se utiliza el editor nano para editar el archivo /etc/fstab :
asd53@ubuntu-p:~$ sudo -e /etc/fstab
Password:
GNU nano 1.3.10 Fitxer: /var/tmp/fstab.XX43RwPD
# /etc/fstab: static file system information.
# #
proc /proc proc defaults 0 0
/dev/hda1 / ext3 defaults,errors=remount-ro 0 1
/dev/hda4 /media/hda4 ext3 defaults 0 2
/dev/hda5 none swap sw 0 0
/dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0
-h
(help)
Da lugar a que sudo muestre un mensaje con información referente a su uso.
asd53@asd53:~> sudo -h
usage: sudo -K | -L | -V | -h | -k | -l | -v
usage: sudo [-HPSb] [-p prompt] [-u username|#uid]
{ -e file [...] | -i | -s | }
asd53@asd53:~>
-i
(simulate initial login)
Mediante esta opción se ejecuta la shell especificada en la entrada /etc/passwd del usuario a nombre del cual se ejecutan los comandos.
En el ejemplo siguiente, al ejecutarse los comandos via sudo a nombre de root, con sudo -i aparecerá la shell de root:.
asd53@asd53:~$ sudo -i
root@asd53:~#
-k
(kill)
Invalida el tiempo de vigencia de la contraseña del usuario, establecido en timestamp_timeout, .
La proxima vez que el usuario desee ejecutar un comando via sudo se le requerirá la introduccion de su contraseña.
Esta opción no requiere contraseña. Puede considerarse la opción "opuesta" a -v
-l
(list)
Nos muestra una relación de los comandos que el usuario puede ejecutar en el presente host.
asd53@asd53:~$ sudo -l
Password:
User asd53 may run the following commands on this host:
(ALL) ALL
asd53@asd53:~$
-p
(prompt)
Nos permite anular prompt por defecto mediante el cual se nos solicita la introducción de la contraseña de usuario y sustituirlo por uno personalizado.
La sintaxis del comando sudo cuando se utiliza esta esta opción es:
$ sudo -p prompt comando
En el siguiente ejemplo vemos como sustituimos el prompt por defecto Password: por la palabra Hola:
asd53@asd53:~$ sudo -p Hola: date
Hola:
dc jun 14 15:08:20 CEST 2006
asd53@asd53:~$
Soporta los siguientes escapes % :
%u
Lo expande al nombre del usuario que ejecuta sudo
%U
Lo expande al nombre del usuario privilegiado (por defecto, root)
%h
Lo expande al nombre host local, sin nombre de dominio.
%H
Lo expande al nombre host local, con nombre de dominio.
%%
Lo reduce a un simple %
En el siguiente ejemplo vemos como se ha sustituido el prompt por defecto Password: por %
asd53@asd53:~$ sudo -p %% date
%
dc jun 14 15:04:39 CEST 2006
asd53@asd53:~$
-s
(shell)
Ejecuta la shell especificada en la variable de entorno SHELL o, si no esta especificada en la citada variable, la shell especificada en /etc/passwd .
-u
(user)
Permite ejecutar el comando como un usuario privilegiado distinto de root.
La sintaxis de sudo cuando se utiliza esta opción es:
$ sudo -u usuario comando
En lugar del nombre del usuario, puede especificarse su uid . En este caso la sintaxis seria:
$ sudo -u #uid comando
Debemos tener en cuenta que si la opción de configuración (Defaults) targetpw, está activada, no será posible ejecutar comandos con una uid no listada en la base de datos de password.
-v
(validate)
Prolonga la vigencia de la contraseña, reiniciando la marca del tiempo. De este modo podemos disponer de otros 5 minutos de vigencia ( o del periodo establecido en la opción de configuración (Defaults) timestamp_timeout, . Puede considerarse la opción "contraria" a -k y -K .
--
Indica a sudo que debe parar el proceso que se esté llevando a cabo en la linea de comandos.
II sudoedit
Si lo que pretendemos no es ejecutar un comando sino editar un archivo, podemos invocar sudo como sudoedit .
En este caso es como si ejecutáramos sudo -e.
La sintaxis de sudoedit es:
$ sudoedit opciones archivo
Las opciones que pueden utilizarse con sudoedit son : -S; -a; -p y -u
asd53@asd53:~$ sudoedit -p %h /etc/fstab
localhost
GNU nano 1.3.10 Fitxer: /var/tmp/fstab.XX43RwPD
# /etc/fstab: static file system information.
# #
proc /proc proc defaults 0 0
/dev/hda1 / ext3 defaults,errors=remount-ro 0 1
/dev/hda4 /media/hda4 ext3 defaults 0 2
/dev/hda5 none swap sw 0 0
/dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0
( En el ejemplo anterior se ha sustituido el prompt por defecto de la contraseña por localhost mediante la opción -p %h )
III Variables de entorno de sudo
sudo utiliza las siguientes variables de entorno:
EDITOR
Editor por defecto que se utilizará en modo -e ; ( sudoedit ) si la variable VISUAL no ha sido establecida.
HOME
En modo -s o -H ( si sudo fué configurado con la opción --enable-shell-sets-home ) el homedir del usuario privilegiado ( por defecto, root).
PATH
Si sudo fué configurado con la opción ---with-secure-path , tendrá un valor correcto y seguro.
SHELL
Se utiliza para determinar la shell a utilizar con la opción -s
SUDO_PROMPT
Se utiliza para fijar el prompt por defecto de la petición de contraseña.
SUDO_COMMAND
Asignada al comando ejecutado por sudo
SUDO_USER
Asignada al login del usuario que ha invocado sudo .
SUDO_UID
Asignada al uid del usuario que ha invocado sudo
SUDO_GID
Asignada al gid del usuario que ha invocado sudo
SUDO_PS1
Si se ha configurada, PS1 será asignado a esos valores
USER
Asignada al usuario privilegiado ( root, salvo que se utilice la opción -u )
VISUAL
Editor por defecto a utilizar en modo -e ( sudoedit )
Tomado de: http://www.rpublica.net/sudo/sudo.html