Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2011 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.
Sudo es una herramienta de sistema que permite a los usuarios realizar la ejecución de mandatos como superusuario u otro usuario de acuerdo a como se especifique en el archivo /etc/sudoers, donde se determina quien está autorizado. Los números de identidad de usuario y de grupo (UID y GID) reales y efectivas se establecen para igualar a aquellas del usuario objetivo como esté especificado en el archivo /etc/passwd.
De modo predeterminado sudo requiere que los usuarios se autentiquen así mismos con su propia clave de acceso (nunca la clave de acceso de root). Una vez que el usuario se ha autenticado, el usuario podrá utilizar nuevamente sudo sin necesidad de volver a autenticarse durante 5 minutos, salvo que se especifique lo contrario en el archivo /etc/sudoers. Si el usuario ejecuta el mandato sudo -v podrá refrescar éste periodo de tiempo sin necesidad de tener que ejecutar un mandato, en cuyo caso contrario expirará esta autenticación y será necesario volver a realizar ésta.
Si un usuario no listado en el archivo /etc/sudoers. trata de ejecutar un mandato a través de sudo, se registra la actividad en la bitácora de sistema (a través de syslogd) y se envía un mensaje de correo electrónico al administrador del sistema (root).
Sudo fue inicialmente concebido en 1980 por Bob Coggeshall y Cliff Spencer del departamento de ciencia computacional en SUNY (State University of New York o Universidad Estatal de Nueva York), en Buffalo.
En 1985 se publicó el grupo de noticias net.sources una versión mejorada acreditada a Phil Betchel, Cliff Spencer, Gretchen Phillips, John LoVerso y Don Gworek. Garth Snyder publicó otra versión mejorada en el verano de 1986 y durante los siguientes cinco años fue mantenido con al colaboración de muchas personas, incluyendo Bob Coggeshall, Bob Manchek, y Trent Hein.
En 1991 Dave Hieb y Jeff Nieusma escribieron una nueva versión con un formato mejorado para el archivo /etc/sudoers bajo contrato con la firma consultora The Root Group, versión que posteriormente fue publicada bajo los términos de la Licencia Pública General de GNU (GNU/GPL).
Desde 1996 el proyecto es mantenido por Todd Miller con la colaboración de Chris Jepeway y Aaron Spangler.
Si se utiliza de CentOS 5, Red Hat™ Enterprise Linux 5 o White Box Enterprise Linux 5, o versiones posteriores, se puede instalar lo necesario utilizando lo siguiente:
yum -y install sudo |
Si se utiliza de Red Hat™ Enterprise Linux 4, o versiones posteriores, se puede instalar utilizando lo siguiente:
up2date -i sudo |
El archivo /etc/sudoers se edita con el mandato visudo, herramienta que a través de vi permite realizar cambios y verificar sintaxis y errores. Si se trata de modificar directamente /etc/sudoers, éste tiene permisos de solo lectura.
La sintaxis básica de una lista sería:
XXXX_Alias NOMBRELISTA = elemento1, elemento2, elemento3 |
La sintaxis básica de una regla sería:
[usuario, %grupo, NOMBRELISTA] [anfitrión] = (id de usuario a usar) mandatos |
Se pueden definir Aliases y reglas. Los aliases permiten definir una lista de mandatos , una lista de usuarios, un alista de anfitriones o bien ejecutar como otros usuarios.
Cmnd_Alias MANDATOSHTTPD = /sbin/service httpd restart,
/usr/bin/vim /etc/httpd/conf.d/variables.conf,
/usr/bin/vim /etc/php.ini
|
Lo anterior define una lista de mandatos que podrían utilizarse para reiniciar el servicio de httpd, modificar un archivo de configuración en la ruta /etc/httpd/conf.d/variables.conf y modificar el archivo /etc/php.ini.
fulano ALL = MANDATOSHTTPD |
Lo anterior define que el usuario fulano puede utilizar los mandatos de la lista MANDATOSHTTPD desde cualquier anfitrión.
User_Alias USUARIOSHTTP = fulano, mengano, zutano |
Lo anterior define una lista denominada HTTPUSERS, integrada por los usuarios fulano, mengano y zutano.
USUARIOSHTTP ALL = /usr/bin/vim |
La regla anterior define que los usuarios que conforman la lista USUARIOSHTTP pueden utilizar el mandato vim desde cualquier anfitrión.
Host_Alias HOSTSHTTPD = 192.168.0.25, 192.168.0.26, 192.168.0.23 |
Lo anterior define que la lista HOSTSHTTPD está integrada por las 3 direcciones IP listadas anteriormente. Si además se añade la siguiente regla:
USUARIOSHTTPD HOSTSHTTPD = ADMINHTTPD |
Lo anterior define que los usuarios de la lista HTTPDUSERS pueden utilizar los mandatos listados en ADMINHTTPD solamente si están conectados desde las direcciones IP listadas en HOSTSHTTPD.
Si por ejemplo se quisiera que los usuarios de la lista USUARIOSHTTP pudieran además utilizar los mandatos ls, rm, chmod, cp, mv, mkdir, touch y vim como el usuarios juan, pedro y hugo, se requiere definir una lista para estos mandatos y otra para los aliases de usuarios alternos, y la regla correspondiente.
Runas_Alias CLIENTES1 = juan, pedro, hugo
Cmnd_Alias MANDATOSCLIENTES = /bin/ls,
/bin/rm,
/bin/chmod,
/bin/cp, /bin/mv,
/bin/mkdir,
/bin/touch,
/usr/bin/vim
USUARIOSHTTPD HOSTSHTTPD = (CLIENTES1) MANDATOSCLIENTES
|
Lo anterior permite a los usuarios definidos en USUARIOSHTTPD (fulano, mengano y zutano), utilizar los mandatos definidos en MANDATOSCLIENTES (ls, rm, chmod, cp, mv, mkdir, touch y vim) identificándose como los usuarios definidos en CLIENTES1 (juan, pedro y hugo) solamente si se realiza desde las direcciones IP listadas en HOSTSHTTPD (192.168.0.25, 192.168.0.26, 192.168.0.23).
Sudo incluye varios candados de seguridad que impiden se puedan realizar tareas peligrosas.
Si se define el mandato /usr/bin/vim en /etc/sudoers, se podrá hacer uso de éste de los siguientes modos:
$ sudo /usr/bin/vim $ sudo vim |
Sin embargo, no podrá ser utilizado así:
$ cd /usr/bin $ sudo ./vim |
Si se define el mandato /bin/echo, el usuario podrá utilizarlo de los siguientes modos:
$ sudo /bin/echo "Hola" $ sudo echo "Hola" |
Pero no podrá utilizarlo de la siguiente forma:
$ sudo echo "Hola" > algo.txt |
Para poder realizar la operación anterior, tendría que utilizar:
$ sudo bash -c "echo 'Hola' > algo.txt" |
Sudo permitirá realizar una tarea sobre cualquier archivo dentro de cualquier directorio aún si no tiene permisos de acceso para ingresar a dicho directorio siempre y cuando especifique la ruta exacta de dicho archivo.
$ sudo chown named /var/named/dominio.zone |
Pero no podrá utilizarlo así:
$ sudo chown named /var/named/*.zone |
Si se quiere permitir a un usuario utilizar lo que sea, desde cualquier anfitrión, cómo cualquier usuario del sistema y sin necesidad de autenticar, se puede simplemente definir:
fulano ALL = (ALL) NOPASSWD: ALL |
BASH (Bourne-Again Shell) permite utilizar variables de entorno y aliases definidas en ~/.bash_profile al iniciar la sesión, siendo que el administrador utilizará activamente muchos mandatos diversos, estos se pueden simplificar a través de aliases que resuman éstos. Por ejemplo, si se quiere definir que se utilice sudo cada vez que se invoque al mandato chkconfig, se puede añadir lo siguiente al archivo ~/.bash_profile:
alias chkconfig="sudo /sbin/chkconfig" |
Lo anterior permitirá ejecutar directamente el mandato chkconfig sin necesidad de preceder éste con el mandato sudo. A continuación só diversos aliases que pueden ser de utilidad en el archivo ~/.bashrc y que permitirán utilizar mandatos diversos con sudo.
# .bashrc
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/sbin:/usr/sbin
export PATH
unset USERNAME
alias chkconfig="sudo /sbin/chkconfig"
alias service="sudo /sbin/service"
alias route="sudo /sbin/route"
alias depmod="sudo /sbin/depmod"
alias ifconfig="sudo /sbin/ifconfig"
alias chmod="sudo /bin/chmod"
alias chown="sudo /bin/chown"
alias chgrp="sudo /bin/chgrp"
alias useradd="sudo /usr/sbin/useradd"
alias userdel="sudo /usr/sbin/userdel"
alias groupadd="sudo /usr/sbin/groupadd"
alias groupdel="sudo /usr/sbin/groupdel"
alias edquota="sudo /usr/sbin/edquota"
alias vi="sudo /usr/bin/vim"
alias less="sudo /usr/bin/less"
alias tail="sudo /usr/bin/tail"
alias yum="sudo /usr/bin/yum"
alias saslpasswd2="sudo /usr/sbin/saslpasswd2"
alias htpasswd="sudo /usr/bin/htpasswd"
alias openssl="sudo /usr/bin/openssl"
alias system-config-printer="sudo /usr/sbin/system-config-printer"
alias system-config-network="sudo /usr/sbin/system-config-network"
alias system-config-display="sudo /usr/bin/system-config-display"
|
Para que surtan efectos los cambios, hay que salir de la sesión y volver a ingresar al sistema con la misma cuenta de usuario, en cuyo archivo ~/.bash_profile se añadieron estos aliases.
Alcance Libre
http://www.alcancelibre.org/staticpages/index.php/como-sudo-linux
()