You are on page 1of 6

LinuxTotal .com.

mx

In f o r m aci n ys e r vicio s e n L in u xyOp e n So u r ce

MANUALDESUDO,VISUDOYSUDOERS
Copy right20052015SergioGonzlezDurn
Se concede permiso para copiar, distribuir y /o modif icar este documento siempre y cuando se cite al autor y la f uente de linuxtotal.com.mx y segn los trminos de la GNU Free Documentation License, Versin 1.2 o cualquiera
posteriorpublicadaporlaFreeSof twareFoundation.

autor:sergio.gonzalez.duran@gmail.com
[NDICE...]

En ambientes donde varios usuarios usan uno o ms sistemas GNU/Linux, es necesario otorgar distintos permisos o privilegios para que estos puedan hacer uso de
comandospropiosdelusuarioadministrador'root'.Totalmentefueradelugareimpensablees'entregar'lacontraseaderootparaquelosusuariospuedanhacerusode
losprogramaspropiosdesusfuncionesperoquesonpropiedadde'root'.Porotrolado,hacerusodelcomandosutampocoesprcticoporqueeslomismo,necesitanla
contraseaderoot,asiquelamejoralternativaeshacerusodesudo.
Exctamentequeesyquehacesudo?.sudopermiteimplementaruncontroldeaccesoaltamentegranuladodequeusuariosejecutanquecomandos.Siunusuario
normaldeseaejecutaruncomandoderoot(odecualquierotrousuario),sudoverificaensulistadepermisosysiestpermitidolaejecucindeesecomandoparaese
usuario,entoncessudoseencargadeejecutarlo.Esdecir,sudoesunprogramaquebasadoenunalistadecontrol(/etc/sudoers)permite(ono)laejecucinalusuario
queloinvocsobreundeterminadoprogramapropiedaddeotrousuario,generalmentedeladministradordelsistema'root'.
sudo,parafinesprcticossepuededividirentrespartes:
sudo,elcomandoconpermisosdeSUID,quelosusuariosusanparaejecutarotroscomandosalosqueselespermiteusar.
visudo,elcomandoquepermitealadministradormodificar/etc/sudoers.
/etc/sudoers,elarchivodepermisosqueleindicaasudoqueusuariosejecutanculescomandos.

sudo
sudo (SUperuser DO) lo ejecuta un usuario normal, al que se supone tiene permisos para ejecutar cierto comando. Entonces, sudo requiere que los usuarios se
autentifiquenasimismosatravsdesucontraseaparapermitirleslaejecucindelcomando.Veamosunejemplo:
$ sudo /sbin/ifconfig
Password:
eth0
Link encap:Ethernet HWaddr 4C:00:10:60:5F:21
inet addr:200.13.110.62 Bcast:200.13.110.255 Mask:255.255.255.0
inet6 addr: fe80::4e00:10ff:fe60:5f21/64 Scope:Link
...

Comosepodrobservarseusaelcomandosudoseguidodelcomando(contodasurutasiesqueestenoestaenelPATHdelusuario)alquesetienepermiso.sudo
preguntaporlacontraseadelusuarioqueejecutaelcomandoylisto.
Por defecto, despus de hacer lo anterior tendrs 5 minutos para volver a usar el mismo comando u otros a los que tuvieras derecho, sin necesidad de ingresar la
contrasea de nuevo. Si se quiere extender el tiempo por otros 5 minutos usa la opcin sudo v (validate). Por el contario, si ya terminaste lo que tenas que hacer,
puedesusarsudok (kill)paraterminarconeltiempodegraciadevalidacin.
Ahorabien,Qucomandossonlosquepuedoutilizar?,pueslaopcinleslaindicadaparaeso:
$ sudo -l
User sergio may run the following commands on this host:
(root) /sbin/ifconfig
(root) /sbin/lspci

Enelcasoanteriorseejecutuncomandoderoot,peronotienequeserasi,tambinesposibleejecutarcomandosdeotrosusuariosdelsistemaindicandolaopcinu:
$ sudo -u ana /comando/de/ana

Unadelasopcionesmsinteresanteseslaquepermiteeditararchivosdetextoderoot(claro,conelpermisootorgadoen'sudoers'comosevermsadelante),yesto
selograconlaopcine,estaopcinestaligadaaotrocomandodesudollamadosudoeditqueinvocaaleditorpordefectodelusuario,quegeneralmentees'vi'.
$ sudo -e /etc/inittab
(Permitiramodificarelarchivoindicadocomosisefueraroot)

Cuandoseconfigurasudosetienenmltiplesopcionesquesepuedenestablecer,estsseconsultanatravsdelaopcinL
$> 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
mail_no_host: Send mail if the user is not in sudoers for this host
mail_no_perms: Send mail if the user is not allowed to run a command
tty_tickets: Use a separate timestamp for each user/tty combo
lecture: Lecture user the first time they run sudo
lecture_file: File containing the sudo lecture
authenticate: Require users to authenticate by default
root_sudo: Root may run sudo
...
varias opciones ms

Bastantetil,yaquenosmuestralasopcionesyunapequeadescripcin,estsopcionesseestablecenenelarchivodeconfiguracin'sudoers'.
Una de las opciones ms importantes de consulta es V, que permite listar las opciones (defaults) establecidas por defecto para sudo todos los usuarios, comandos,
equipos,etc.Msadelanteenestetutorial,aprenderemoscomoestableceropcionesespecficasparaciertosusuarios,comandosoequipos.NOTA:tienesqueser'root'
parausarestaopcin.
# sudo -V
Sudo version 1.6.9p5
Sudoers path: /etc/sudoers
Authentication methods: 'pam'
Syslog facility if syslog is being used for logging: local2
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
Lecture user the first time they run sudo
Require users to authenticate by default
Root may run sudo
Log the hostname in the (non-syslog) log file

Allow some information gathering to give useful error messages


Visudo will honor the EDITOR environment variable
Set the LOGNAME and USER environment variables
Reset the environment to a default set of variables
Length at which to wrap log file lines (0 for no wrap): 80
Authentication timestamp timeout: 5 minutes
Password prompt timeout: 5 minutes
Number of tries to enter a password: 3
Umask to use or 0777 to use user's: 022
Path to log file: /var/log/sudo.log
...
varias opciones ms listadas

Conintencin,trunqueellistadoanteriorenlalnea"Pathtologfile:/var/log/sudo.log",dondeseindicacualeselarchivo'log'odebitacorapordefectodesudo,eneste
archivoselogueaabsolutamentetodoloquesehagaconsudo,queusuariosejecutaronque,intentosdeuso,etc.

visudo
Permitelaedicindelarchivodeconfiguracindesudosudoers.Invocaaleditorquesetengapordefectoquegeneralementees'vi'.visudocuandoesusado,bloquea
el archivo /etc/sudoers de tal manera que nadie ms lo puede utilizar, esto por razones obvias de seguridad que evitarn que dos o ms usuarios administradores
modifiquenaccidentalmenteloscambiosqueelotrorealiz.
Otra caracterstica importande de visudo es que al cerrar el archivo, verifica que el archivo este bien configurado, es decir, detectar si hay errores de sintaxis
principalmenteensusmltiplesopcionesoreglasdeaccesoquesetengan.Porestaraznnodebeeditarse/etc/sudoersdirectamente(perfectamenteposibleyaquees
unarchivodetextocomocualquierotro)sinosiempreusarvisudo.
Sialcerrarvisudodetectaunerrornosmostrarlalneadondeseencuentra,ylapregunta"Whatnow?":
>>> sudoers file: syntax error, line 15 <<<
What now?

Setienentresopcionesparaestapregunta:
eeditadenuevoelarchivo,colocandoelcursorenlalneadelerror(sieleditorsoportaestafuncin.)
xsalirsinguardarloscambios.
Qsaliryguardaloscambios.
Pordefectoelarchivodeconfiguracines/etc/sudoersperosepuedeneditarotrosarchivosquenoseaneseyqueseapliquelasintaxisdesudo,yestoselograconla
opcinf(visudof/otro/archivo).
Sitansolosedeseacomprobarque/etc/sudoersestabienconfiguradoseusalaopcinc,tomaporelarchivodeconfiguracinpordefectoosinoseindicaalgnotro.
#> visudo -c
/etc/sudoers file parsed OK

La opcin s activa el modo 'estricto' del uso de visudo, es decir no solo se comprobar lo sintctico sino tambin el orden correcto de las reglas, por ejemplo si se
defineelaliasparaungrupodecomandosyesteseusaantesdesudefinicin,conestaopcinsedetectarestetipodeerrores.

Sudoers
Archivo de configuracin de sudo, generalmente ubicado bajo /etc y se modifica a travs del uso de visudo. En este archivo se establece quien (usuarios) puede
ejecutarque(comandos)ydequemodo(opciones),generandoefectivamenteunalistadecontroldeaccesoquepuedesertandetalladacomosedesee.
Esmsfcilentendersudosidividimosentrespartessuposibleconfiguracin,estsson:
Alias
Opciones(Defaults)
Reglasdeacceso
Porextraoqueparezcaningunadelasseccionesesobligatoria,otienenqueestarenalgnordenespecfico,perolaquealmenosdebedeexistireslatercera,quees
ladefincindeloscontrolesoreglasdeacceso.Sedetallarcadaunodeestosenunmomento.Paralosquelesgustasabermslacuestintcnicaesinteresante
saberquelaconstruccindeunarchivosudoers esta basado en la forma BNF (BackusNaur Form), concretamente en versin extendida (EBNF), si estudiaste algn
cursodeinformticauniversitarioseguramentesabesdeloquehablo.EBNFdescribedeunaformaprecisayexactalagramticadeunlenguaje,estasevacreandoa
travsdereglasdeproduccinquealavezsonlabaseparaserreferenciadasporotrasreglas.Afortunadamentenonecesitassabernadadeesto,soloentendercomose
aplicanestasreglas.
Alias
Unaliasserefiereaunusuario,uncomandooaunequipo.Elaliasenglobabajounsolonombre(nombredelalias)unaseriedeelementosquedespusenlapartede
definicindereglassernrefiridosaplicadosbajosciertocriterio.Esdecir,regresandoaEBNFestamoscreandolasreglasdeproduccininicial.Laformaparacrearun
aliaseslasiguiente:
tipo_aliasNOMBRE_DEL_ALIAS=elemento1,elemento2,elemento3,...elementoN
tipo_aliasNOMBRE1=elemento1,elemento2:NOMBRE2=elemento1,elemento2
Enelsegundocaso,separadopor":"esposibleindicarmsdeunaliasenunamismadefincin.
Eltipo_aliasdefineloselementos,esdecir,dependiendodeltipodealiassernsuselementos.Lostipodealiassoncuatroysonlossiguientes:
Cmnd_Aliasdefinealiasdecomandos.
User_Aliasdefinealiasdeusuariosnormales.
Runas_Aliasdefinealiasdeusuariosadministradoresoconprivilegios.
Host_Aliasdefinealiasdehostsoequipos.
El NOMBRE_DEL_ALIAS puede llevar letras, nmeros o guin bajo ( _ ) y DEBE de comenzar con una letra mayscula, se acostumbra a usarlos siempre en
maysculas.
Loselementosdelaliasvariandependiendodeltipodealias,asiquevemoslosporpartesasicomovariosejemplosparaquecomienceaquedarclarotodoesto.
Cmnd_Alias

Definenunoomscomandosyotrosaliasdecomandosquepodrnserutilizadosdespusenaliasdeusuarios.Ejemplos:
Cmnd_AliasWEB=/usr/sbin/apachectl,/usr/sbin/httpd,sudoedit/etc/httpd/
IndicaqueaquienseleapliqueelaliasWEBpodrejecutarloscomandosapachectl,httpdyeditartodoloqueestedebajodeldirectorio/etc/httpd/,ntesequedebede
terminarcon'/'cuandoseindicandirectorios.Tambin,larutacompletaaloscomandosdebeserindicada.
Cmnd_AliasAPAGAR=/usr/bin/shutdownh23\:00
AlusuarioqueseleasigneelaliasAPAGARpodrhacerusodelcomando'shutdown'exactamenteconlosparmetroscomoestnindicados,esdecirapagarh(halt)el
equipoalas23:00horas.Ntesequeesnecesarioescaparelsigno':',asicomolossmbolos':,=\

Cmnd_AliasNET_ADMIN=/sbin/ifconfig,/sbin/iptables,WEB
NET_ADMINesunaliasconloscomandosdeconfiguracindeinterfacesderedifconfigydefirewalliptables,peroademsleagregamosunaliaspreviamente definido
queesWEB,asiqueaquienseleasigneestealiaspodrhacerusodeloscomandosdelaliasWEB.
Cmnd_AliasTODO_BIN=/usr/bin/,!/usr/bin/rpm
Aquienseleasigneestealiaspodrejecutartodosloscomandosqueestndentrodeldirectorio/usr/bin/menoselcomando'rpm'ubicadoenelmismodirectorio.NOTA
IMPORTANTE:estetipodealiasconunpermisomuyampliosmenos'!'algo,generalmentenosonunabuenaidea,yaquecomandosnuevosqueseaadandespusa
esedirectoriotambinpodrnserejecutados,esmejorsiempredefinirespecficamenteloqueserequiera.
User_Alias

Definenaunoomsusuarios,gruposdelsistema(indicadoscon%),gruposdered(netgroupsindicadoscon+)uotrosaliasdeusuarios.Ejemplos:
User_AliasMYSQL_USERS=andy,marce,juan,%mysql
IndicaquealaliasMYSQL_USERSpertenecenlosusuariosindicadosindividualmentemslosusuariosqueformenpartedelgrupo'mysql'.
User_AliasADMIN=sergio,ana
'sergio'y'ana'pertenecenalaliasADMIN.
User_AliasTODOS=ALL,!samuel,!david
Aqui encontramos algo nuevo, definimos el alias de usuario TODOS que al poner como elemento la palabra reservada 'ALL' abarcara a todos los usuarios del sistema,
peronodeseamosadosdeellos,asiquenegamoscon'!',queseranlosusuarios'samuel'y'david'.Esdecir,todoslosusuariosmenosesosdos.NOTA IMPORTANTE:
estetipodealiasconunpermisomuyampliosmenos'!'algo,generalmentenosonunabuenaidea,yaqueusuariosnuevosqueseaadandespusalsistematambin
sernconsideradoscomoALL,esmejorsiempredefinirespecficamentealosusuariosqueserequieran.ALLesvlidoentodoslostiposdealias.
User_AliasOPERADORES=ADMIN,alejandra
LosdelaliasADMINmselusuario'alejandra'.
Runas_Alias

FuncionaexactamenteigualqueUser_Alias,lanicadiferenciaesqueesposibleusarelIDdelusarioUIDconelcaracter'#'.
Runas_AliasOPERADORES=#501,fabian
AlaliasOPERADORESpertenecenelusuarioconUID501yelusuario'fabian'
Host_Alias

Definen uno o ms equipos u otros alias de host. Los equipos pueden indicarse por su nombre (si se encuentra en /etc/hosts) por nombre de dominio, si existe un
resolvedordedominios,pordireccinIP,pordireccinIPconmscaradered.Ejemplos:
Host_AliasLANS=192.168.0.0/24,192.168.0.1/255.255.255.0
ElaliasLANSdefinetodoslosequiposdelasredeslocales.
Host_AliasWEBSERVERS=172.16.0.21,web1:DBSERVERS=192.168.100.10,dataserver
Sedefinedosaliasenelmismorengln:WEBSERVERSyDBSERVERSconsusrespectivaslistasdeelementos,elseparador':'esvlidoencualquierdefinicindetipo
dealias.
Opciones(defaults)
Lasopcionesodefaultspermitendefinirciertascaractersticasdecomportamientoparalosaliaspreviamentecreados,parausuarios,usuariosprivilegiados,paraequipos
odemaneraglobalparatodos.Noesnecesariodefiniropcionesodefaults,sudoyatieneestablecidaselvalordecadauno,yesposibleconocerlasatravsdesudo V
(verenlaseccinsudodeestetutorial).
Sinembargo,lapotenciadesudoestensualtagranularidaddeconfiguracin,asiqueesimportanteconocercomoestableceropcionesespcificas.
Lasopcionesodefaultsesposibleestablecerlosencuatronivelesdeuso:
Demaneraglobal,afectaatodos
Porusuario
Porusuarioprivilegiado
Porequipo(host)
Seusalapalabrareservada'Defaults'paraestablecerlasopcionesydependiendodelnivelquedeseamosafectarsusintaxiseslasiguiente:
Global:Defaultsopcion1,opcion2...
Usuario:Defaults:usuarioopcion1,opcion2...
UsuarioPrivilegiado:Defaults>usuarioopcion1,opcion2...
Equipo:Defaults@equipoopcion1,opcion2...
La lista de opciones es algo extensa, pueden consultarse en las pginas del manual (man sudoers) o en el excelente manual sobre sudo del sitio web de
www.rpublica.net http://www.rpublica.net/sudo/indice.html#defaults, est en espaol y define muy claramente lo que significa cada opcin. En este tutorial de
LinuxTotal.com.mxmeconcretaraejemplificarvariosejemplosdelusodeestableceropciones.
Los defaults los divide el manual (man sudoers) en cuatro: flags o booleanos, enteros, cadenas y listas. Veamos entonces algunos ejemplos de uso para cada uno de
ellos:
flagsobooleanos

Generalementeseusandemaneraglobal,simplementeseindicalaopcinyseestablecea'on'paradesactivarla'off'seanteponeelsmbolo'!'alaopcin.Esnecesario
consultarelmanualparasaberelvalorpordefecto'on'o'off'parasabersirealmentenecesitamosinvocarlaono.
Defaultsmail_always
Establece a 'on' la opcin 'mail_always' que enviara un correo avisando cada vez que un usuario utiliza sudo, a la vez, este opcin requiere que 'mailto_user' este
establecida.
Defaults!authenticate,log_host
Desactiva'off'eldefault'authenticate'quepordefectoestaactivado'on'eindicaquetodoslosusuariosqueusensudodebenidentificarseconsucontrasea,obviamente
estoesunejemployseraunapsimaideausarlorealmente,yaqueningnusuarionecesitariaautenticarse,estoesporqueestamosusandoDefaultsdemaneraglobal.
La segunda opcin 'log_host' que por defecto est en 'off' la activamos y bitacoriza el nombre del host cuando se usa un archivo (en vez de syslog) como bitcora de
sudo.
Defaults:ana!authenticate

Aquiseapreciaalgomslgico,usamosopcionesporusuarioenvezdeglobal,indicandoqueelusuario'ana'norequeriraautnticarse.Perotodoslosdemssi.
Defaults>ADMINrootpw
Opcionesparausuariosprivilegiados,envezdeusarunalistadeusuarios,usamosunalias'ADMIN'quesesuponefuepreviamentedefinido,yestablecemosen'on'la
opcin'rootpw'queindicaasudoquelosusuariosenelalias'ADMIN'debernusarlacontraseade'root'envezdelapropia.
Enteros

Talcomosunombreloindica,manejanvaloresdenmerosenterosensusopciones,quedebenentoncesusarsecomoopcin=valor.
Defaults:fernanda,reginapasswd_tries=1,passwd_timeout=1
Ejemplo donde se aprecia el uso de opciones con valores enteros. En este caso se establecen opciones para los usuarios 'fernanda' y 'regina' solamente, que solo
tendrn una oportunidad de ingresar la contrasea correcta 'passwd_tries' el valor por defecto es de 3 y tendrn un minuto para ingresarla 'passwd_timeout' el valor por
defectoson5minutos.
Lamayoradelasopcionesdetiempoodeintentos,alestablecerlasconunvalorigualaceroentoncesquedailimitadolaopcin.
Defaults@webserverumask=011
Seestablecenopcionessoloparalosusuariosqueseconectanalservidor'webserver'yelvalor'umask'indicaquesimediantelaejecucindelcomandoqueseinvoque
porsudoesnecesariocreararchivosodiectorios,aestosselesaplicarlamscaradepermisosindicadaenelvalordelaopcin.
Cadenas

Sonvaloresdeopcionesqueindicanmensajes,rutasdearchivos,etc.Sihubieraespaciosenelvaloresnecesarioencerrarelvalorentrecomillasdobles("").
Defaultsbadpass_message="Intentadenuevo:"
Paratodoslosusuarios,cuandoseequivoquenalingresarlacontrasea,eselmensajequesaldra.Enestecasolaopcinpordefectoes"Sorry:tryagain".
Listas

Permiteestablecer/eliminarvariablesdeentornopropiasdesudo.Los'Defaults'paravariablesesdelosmenosusadosenlasconfiguracionesdesudoyciertamentede
losmsconfusos.Paraentendercomoseaplicanesmsfcilsiprimeroejecutascomo'root'elcomandosudoV,yalfinaldellistadoencontrarsenmaysculaslas
posiblesvariablesdeentornoquesepuedenestableceroquitaryquevienendelshell.
Solo existen tres opciones de listas: env_check , env_delete y env_k eep, las listas pueden ser remplazadas con '=', aadidas con '+=', eliminadas con '=' o
deshabilitadascon'!'.Conunpardeejemplosquedarmsclaro.
Defaultsenv_delete=HOSTNAME
Eliminalavariabledeentorno'HOSTNAME',(peropreservatodaslasdemsquehubiera)ycomandosqueseejecutenbajosudoyquerequierandeestavariablenola
tendrandisponible.
Defaultsenv_reset
Defaultsenv_check+=DISPLAY,PS1
La primera opcin 'env_reset' reinicializa las variables de entorno que sudo utilizar o tendr disponibles, y solo quedan disponibles LOGNAME, SHELL, USER y
USERNAME.Lasiguientelneaindicaqueagregue(+=)aloanterior,tambinlavariabledeentornoDISPLAYasuvalorestablecidoantesdelreset.
Reglasdeacceso
Aunquenoesobligatoriodeclararalias,niopciones(defaults),ydehechotampocoreglasdeacceso,pueselarchivo/etc/sudoersnotendraningunarazndesersino
secreanreglasdeacceso.Dehechopodramosconcretarnosacrearsolamentereglasdeacceso,sinopcionesnialiasypodrafuncionartodomuybien.
Las reglas de acceso definen que usuarios ejecutan que comandos bajo que usuario y en que equipos. La mejor y (segn yo, nica manera) de entender y aprender a
configurarsudoersesconejemplos,asiquedirectoalgrano:
usuariohost=comando1,comando2,...comandoN
Sintaxisbsica,'usuario'puedeserunusuario,unaliasdeusuariooungrupo(indicadopor%),'host'puedeserALLcualquierequipo,unsoloequipo,unaliasdeequipo,
una direccin IP o una definicin de red IP/mscara, 'comandox' es cualquier comando indicado con su ruta completa. Si se termina en '/' como en /etc/http/ entonces
indicatodoslosarchivosdentrodeesedirectorio.
danielaALL=/sbin/iptables
Usuario'daniela'encualquierhostoequipopuedeutiliariptables.
ADMINALL=ALL
Losusuariosdefinifosenelalias'ADMIN'desdecualquierhostpuedenejecutarcualquiercomando.
%gerentesdbserver=(director)/usr/facturacion,(root)/var/log/*
Unejemplomsdetallado.Losusuariosquepertenezcanalgrupodelsistemallamado'gerentes'puedenenelequipollamado'dbserver'ejecutarcomosifueranelusuario
'director'laaplicacinllamada'facturacion',ademscomousuarios'root'puedenverelcontendidodelosarchivosquecontengaeldirectorio/var/log.
Lo anterior intoduce algo nuevo, que en la lista de comandos es posible indicar bajo que usuario se debe ejecutar el permiso. Por defecto es el usuario 'root', pero no
siempretenerqueasi.Ademslalista'hereda'laprimeradefinicindeusuarioqueseindicaentreparntesis(),poresosisetienemsdealgunohayquecambiarde
usuarioenelcomandoconveniente,elejemploanteriortambinseravlidodelasiguientemanera:
%gerentesdbserver=/var/log/*,(director)/usr/facturacion
Noesnecesarioindicar(root)yaqueeselusuariobajoelcualseejecutanloscomandospordefecto.Tambinesvlidousar(ALL)paraindicarbajocualquierusuario.El
ejemplosiguientedapermisosabsolutos.
sergioALL=(ALL)ALL
Seestablecepermisoparaelusuario'sergio'encualquierhost,ejecutarcualquiercomandodecualquierusuario,porsupuestoincluyendolosderoot.
SUPERVISORESPRODUCCION=OPERACION
Unaregalaformadasoloporalias.Enelaliasdeusuario'SUPERVISORES'losusuariosqueestenindicadosenesealias,tendrnpermisoenlosequiposdefinidosenel
aliasdehost'PRODUCCION',deejecutarloscomandosdefinidosolistadosenelaliasdecomandos'OPERACION'.
En este ltimo ejemplo se aprecia lo ltil que pueden ser los alias, ya que una vez definida la regla, solo debemos agregar o eliminar elementos de las listas de alias
definidos previamente. Es decir, se agrega un equipo ms a la red, se aade al alias 'PRODUCCION', un usuario renuncia a la empresa, alteramos el alias
'SUPERVISORES'eliminndolodelalista,etc.
checoALL=/usr/bin/passwd*,!/usr/bin/passwdroot
Esteesunejemplomuyinteresantedelapotenciayflexibilidad.Alusuario'checo',desdecualquierequipo,tienepermisodecambiarlacontraseadecualquierusuario
(usando el comando 'passwd'), excepto '!' la contrasea del usuario 'root'. Lo anterior se logra mediante el uso de argumentos en los comandos. En el primer ejemplo

'/usr/bin/passwd *' el asterisco indica una expansin de comodin (wildcard) que indica cualquier argumento, es decir, cualquier usuario. En el segundo caso
'!/usr/bin/passwdroot',siindicaunargumentoespecfico'root',yla'!'comoyasesabeindicanegacin,negandoentonceselpermisoacambiarlacontraseaderoot.
Cuandoseindicaelcomandosinargumentos:/sbin/iptablessudolointerpretacomo'puedeusariptablesconcualquieradesusargumentos'.
mariajoseALL="/sbin/lsmod"
Al estar entre comillas dobles un comando, entonces sudo lo interpreta como 'puede hacer uso del comando lsmod pero sin argumentos'. En este caso el usuario
'mariajose'podrverlalistademdulosdelkernel,perosoloeso.
Tags(etiquetasdecomandos)

Cuandosedefinenreglas,enlalistadecomandos,estospuedentenercero(comoenlosejemplosanteriores)omstags.Existen6deestasetiquetasotags,
NOPASSWDYPASSWD
Por defecto sudo requiere que cualquier usuario se identifique o autntifique con su contrasea. Aprendimos en la seccin de 'Opciones' o 'Defaults' que es posible
indicarqueunusuariooaliasdeusuarionorequieradeautentificacin.Peroelcontrolgranularpropiodesudo,permiteiraunmslejosalindicaraniveldecomandos,
culesrequierencontraseaparasuusoyculesno.
gerardowebserver=NOPASSWD:/bin/kill,/usr/bin/lprm,/etc/httpd/conf/
Usuario 'gerardo' en el equipo 'webserver' no requerira contrasea para los comandos listados. El tag se hereda, es decir no solo el primer elemento de la lista de
comandos, sino los subsiguientes. Suponiendo que el ltimo '/etc/httpd/conf/' elemento, que permite modificar cualquier archivo contenido en el directorio, si deseamos
queusecontrasea,losiguienteloconseguir:
gerardowebserver=NOPASSWD:/bin/kill,/usr/bin/lprm,PASSWD:/etc/httpd/conf/
Aunqueyaquesolicitarcontraseaeseldefaultodefectopreestablecido,loanteriortambinfuncionardelasiguientemanera:
gerardowebserver=/etc/httpd/conf/,NOPASSWD:/bin/kill,/usr/bin/lprm,
NOEXECYEXEC
Esteesuntagmuyimportanteaconsiderarcuandosobreseotorganpermisossobreprogramasquepermitenescapesashell(shellescape),comoeneleditor'vi'que
medianteelusode'!'esposibleejecutaruncomandoenelshellsinsalirde'vi'.ConeltagNOEXECselograqueestonosuceda,aunquenohayquetomarlocomoun
hecho,yaquesiempreexistelaposibilidaddevulnerabilidadesnoconocidasenlosmltiplesprogramasqueutilizanescapesashell.Aligualquelostagsanteriores,el
tagseheredaysedeshabilitaconsutagcontrario(EXEC),encasodequeenlalistadecomandoshubieravarioscomandos.
valeriaALL=NOEXEC:/usr/bin/vi
SETENVYNOSETENV
Una de las mltiples opciones que pueden establecerse en la seccin 'Defaults' u 'opciones' es la opcin booleana o de flag 'setenv' que por defecto y para todos los
usuariosestaestablecidaen'off'.Estaopcinsiseactivaporusuario(Defaults:sergiosetenv)permitiralusuarioindicadocambiarelentornodevariablesdelusuariodel
cualtienepermisosdeejecutarcomandos,ycomogeneralmenteestees'root'puesesobvioqueresultabastantepeligrosaestaopcin.Aniveldelistadecomandos,es
posible entonces especificar el tag 'SETENV' a un solo comando o a una pequea lista de estos y solo cuando se ejecuten estos se podrn alterar su entorno de
variables.Esdecir,envezdeestablecerloporusuario,seramasconvenienteestablecerloporcomandoaejcutarsesolamente.
ADMINALL=SETENV:/bin/date,NOSETENVALL
Alosusuariosdefinidosenelaliasdeusuario'ADMIN'encualquierhost,puedenalterarlasvariablesdeentornocuandoejecutenelcomando'date'(quepuedesertilpor
ejemploparacambiarvariablesdeltipoLOCALE),ycualquierotrocomando,notendrestaopcinalhabilitareltagcontrario'NOSETENV'.Yyaqueesteeseldefault,
tambinseravlidodelasiguientemanerayharanlomismo:
ADMINALL=ALL,SETENV:/bin/date

ARCHIVO/ETC/SUDOERSDEEJEMPLO
Paraconcluirestemanual,veamosunpequeoejemplodeunarchivo/etc/sudoers:
# ***********************
# LinuxTotal.com.mx, ejemplo de un archivo sudoers
# sergio.gonzalez.duran@gmail.com
# ***********************
# ***********************
# DEFINCION DE ALIAS
# ***********************
# administradores con todos los privilegios
User_Alias ADMINS = sergio, ana
# administradores de red - network operators
User_Alias NETOPS = marcela, andrea
# webmasters User_Alias WEBMAS = cristina, juan
# supervisores de produccin (todos los del grupo de sistema supervisores)
User_Alias SUPPRO = samuel, %supervisores
# usuarios que pueden conectarse desde Internet
User_Alias INETUS = NETOPS, ADMINS, samuel
# servidores web
Host_Alias WEBSERVERS = 10.0.1.100, 10.0.1.101
# servidores de aplicaciones
Host_Alias APLICACIONES = WEBSERVERS, 10.0.1.102, 10.0.1.103, mailserver
# comandos de red permitidos
Cmnd_Alias REDCMDS = /sbin/ifconfig, /sbin/iptables
# comandos de apache
Cmnd_Alias APACHECMDS = /usr/sbin/apachectl, /sbin/service httpd *
# ***********************
# DEFINCION DE OPCIONES
# ***********************
# Los usuarios administradores, requieren autentificarse con la contrasea de 'root'
Defaults>ADMINS rootpw

# Para todos los usuarios, tienen hasta dos intentos para ingresar su contrasea y 3 minuto para que esta expire
Defaults passwd_tries = 4, passwd_timeout = 1
# Los usuarios que se conectan desde Internet, solo tienen una oportunidad y cero timeout lo que implica
# que cada comando que usen a travs de sudo requerira siempre de autentificacin.
Defaults:INETUS passwd_tries = 1, passwd_timeout = 0
# Mscara de directorios y archivos por default, para los que ejecuten sudo en los servidores web
Defaults@WEBSERVERS umask = 022
# ***********************
# DEFINCION DE REGLAS
# ***********************
# administradores todo se les permite en cualquier equipo (cuidado con esto en la vida real!!!!!
ADMINS ALL = (ALL) ALL
# administradores de red, en todos los equipos, los comandos de red
NETOPS ALL = REDCMDS
# webmasters, en los servidores web con los comandos indicados en apachecmds y adems sin necesidad
# de contrasea acceder a las btacoras de apache y reiniciar los servidores.
WEBMAS WEBSERVERS = APACHECMDS, NOPASSWD: /var/log/apache/, /sbin/reboot
# supervisores, pueden ejecutar los comandos indicados en los equipos indicados en el alias
# aplicaciones y adems son ejecutados bajo el usuario apps.
SUPPRO APLICACIONES = NOEXEC: (apps) /usr/local/facturacion.exe, /usr/local/ventas.exe, /usr/local/nomina.exe
# no definidos por alias previos, sino directamente
# regina es de recursos humanos y puede cambiar contraseas de cualquier usuario menos de root
regina ALL = /usr/bin/passwd *, !/usr/bin/passwd root
# david, puede apagar los equipos de aplicaciones
david APLICACIONES = /sbin/shutdown, /sbin/halt
# El equipo firewall de la red puede ser reiniciado (no apagado) por fernanda que es asistente de redes
fernanda firewall = /sbin/shutdown -r now

Referencias
Comosiempre,lareferenciamsalamanolatienesenlaspginasdemanual:
mansudo
manvisudo
mansudoers
Yenlossiguientessitiosencuentrasinformacinquecomplementaestamanual.
http://www.sudo.ws/sitiooficialdesudo
http://www.rpublica.net/sudo/sudo.html Aqui puedes consultar en espaol, varias de las opciones de sudo, adems de que es un buen manual de sudo en lo
general.
http://www.onlamp.com/pub/a/bsd/2002/08/29/Big_Scary_Daemons.htmlsitioeninglsconunaexplicacinmuycompletadecomofuncionasudo.

Linux Total.c om.mx Inf or mac iny s er v ic ios enLinux y OpenSour c einf o@linux total.c om.mx s er gio.gonz alez .dur an@gmail.c om

You might also like