Sudo a Ubuntu
De SergiTurWiki
Contingut |
sudo
A Linux i Unix en general totes les màquines tenen un superusuari anomenat root. El superusuari pot fer-ho tot i per tant treballar amb aquest usuari per fer les tasques del dia a dia pot ser molt perillós. És molt fàcil carregar-se un sistema pel simple fet d'executar un comanda incorrecta.
Per defecte a Ubuntu el compte de root està bloquejat. Això significa que no ens podem autenticar com a superusuari. Ubuntu utilitza sudo. Durant la instal·lació Ubuntu dóna permís a l'usuari principal per executar comandes com a superusuari.
Notes:
- La contrasenya que cal introduir és la del usuari no la del superusuari (per aquesta raó no cal contrasenya de root a Ubuntu).
- La contrasenya és emmagatzemada per defecte durant 15 minuts. Passat aquest temps és necessari posar un altre cop la contrasenya.
- NOTA: La contrasenya no es mostra per pantalla ni tan sols amb els asteriscs!.
- Les aplicacions dels menús que necessitin permisos de superusuari i preguntaran una contrasenya.
- Per a les aplicacions gràfiques cal utilitzar gksu. Amb kde cal utilitzar kdesu.
Per executar comandes com a superusuari cal posar davant la comanda sudo. Per exemple:
$ sudo /etc/init.d/networking restart
Avantatges de sudo
- L'instal·lador d'Ubuntu ha de fer menys preguntes.
- Els usuaris no han de recordar una contrasenya extra.
- Evita que els usuaris ho puguin fer tot per defecte. Abans de fer cap canvi important es pregunta una contrasenya. Això permet pensar en les conseqüències del que fem abans de fer-ho.
- sudo afegeix un entrada en un fitxer de registre (/var/log/auth.log).
- La paraula de pas de root no la sap ningú. Augmenta la seguretat ja que els atacants no poden utilitzar l'usuari root.
- Permet administrar de forma més granular els permisos dels usuaris i per tant la política de seguretat de ela màquina.
Inconvenients de sudo
- Algunes comandes no es poden utilitzar amb sudo (com per exemple la comanda cd o les redireccions).
L'ordre cd no funciona per què es tracta d'una ordre interna de bash, i no la podem executar com un ordre amb sudo per què el procés fill (sudo) no pot accedir al directori de treball actual (CWD) del procés pare (la shell on s'ha executat sudo). S'executa una shell dins d'un altre, i per seguretat una subshell no pot modificar l'entorn de la shell pare.
Recursos:
Executar cd i redireccions
Per a les redireccions:
Afegir:
$ sudo sh -c 'echo letter >> /etc/papersize'
Sobreescriure:
$ sudo sh -c 'echo letter > /etc/papersize'
Una alternativa és utilitzar l'ordre tee:
Per afegir:
$ echo letter | sudo tee -a /etc/papersize
Per sobreescriure:
$ echo letter | sudo tee /etc/papersize
I per als cd:
$ sudo mkdir /root/restricted $ sudo touch /root/restricted/a $ sudo chmod 700 /root/restricted $ sudo sh -c 'cd /root/restricted'
NOTA: El problema és que s'executa el cd en una bash i es finalitza el procés bash, per tant ens quedem igual
Normalment quan fem un cd és per després executar un altre ordre. Aleshores cal indicar també l'ordre:
$ sudo bash -c 'cd /root/restricted;ls -la' total 8 drwx------ 2 root root 4096 2009-11-14 11:49 . drwx------ 13 root root 4096 2009-11-14 11:49 ..
També podeu fer:
$ sudo bash
Però equival a entrar com a root.
Un altre exemple:
$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
Recursos:
Instal·lar sudo
Passeu a superusuari:
$ su
I executeu:
# visudo
Afegiu la línia:
%admin ALL=(ALL) ALL
Al final del fitxer. Ara afegiu el vostre usuari al grup admin:
# groupadd admin # usermod -a -G admin etseib
Per exemple, si l'usuari és etseib, hauríeu d'executar:
# usermod -a -G admin etseib
Sortiu de root:
# exit
I comproveu que podeu utilitzar sudo:
$ sudo ls
NOTA: és possible que hageu de sortir de l'entorn gràfic i tornar a entrar. També podeu executar su nom_usuari per iniciar una nova sessió que ja tingui en compte el nou grup.
Comproveu els grups amb:
$ groups
Afegir un usuari als grups de sudoers
Tal i com podeu veure a la secció Fitxer /etc/sudoers el grup que dona permisos per executar sudo és el grup admin. Podem afegir un usuari al grup admin amb el gestor d'usuaris d'Ubuntu (Aplicació Usuaris i Grups del menú Sistema/Administració) o executant la comanda:
$ sudo usermod -a -G admin usuari
A l'aplicació Usuaris i Grups cal anar a la pestanya Privilegis i seleccionar la opció Administració del sistema:
Si a més voleu que tingui els mateixos permisos que la majoria d'usuaris del sistema, consulteu primer els grups d'un usuari existent, per exemple:
$ sudo groups sergi sergi adm dialout cdrom plugdev lpadmin sambashare admin
I feu:
$ sudo usermod -a -G adm,dialout,cdrom,plugdev,lpadmin,sambashare,admin usuari
Fitxer /etc/sudoers
En aquest fitxer s'indiquen els usuaris que tenen permís per executar sudo. Veiem un exemple:
NOTA IMPORTANT: No editeu mai directament aquest fitxer. Utilitzeu visudo. Un error durant la edició pot implicar una pèrdua completa del control de la màquina.
$ sudo cat /etc/sudoers Password: # /etc/sudoers # This file MUST be edited with the 'visudo' command as root. # See the man page for details on how to write a sudoers file. # Host alias specification # User alias specification # Cmnd alias specification # Defaults Defaults !lecture,tty_tickets,!fqdn # User privilege specification root ALL=(ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL
Aquest fitxer és el típic fitxer sudoers a Ubuntu. La sintaxi és la següent:
- Root: Nom de l'usuari amb permisos de root. Aquí hi podem posar també una llista d'usuaris o grups Unix.
- ALL=(ALL):
- ALL: La tercera columna són les comandes que es poden executar.
Per indicar un grup Linux en comptes d'un usuari s'afegeix un % a l'inici del nom de grup com a l'exemple anterior:
%admin ALL=(ALL) ALL
Amb sudo i el fitxer de configuració sudoers podem controlar amb molt de detall que poden o que no poden fer els usuaris. Per exemple, les següents línies permetrien apagar o reiniciar la màquina sense la necessitat de posar el password:
Cmnd_Alias SHUTDOWN_CMDS = /sbin/shutdown, /sbin/halt, /sbin/reboot sergi ALL=(ALL) NOPASSWD: SHUTDOWN_CMDS
El fitxer sudoers permet una gran varietat d'opcions. Les podeu consultar al manual Unix(man sudoers) o a Internet. Per exemple podeu consultar la wiki d'Ubuntu:
visudo
Permet editar el fitxer sudoers de forma segura ja que impedeix que guardem el fitxers amb errors.
Es pot canviar el editor amb:
$ sudo -i
# export EDITOR=${EDITOR:-/bin/nano}
# visudo
Gksu i kdesu
Cal evitar executar aplicacions gràfiques amb la comanda sudo. Per aquest tipus d'aplicacions hem d'utilitzar les comandes gksu per a gnome o kdesu per a KDE.
Si executem aplicacions gràfiques amb sudo podem provocar el següent error a l'intentar autenticar-nos:
"Unable to read ICE authority file"
Per solucionar aquest problema cal esborrar el fitxer /home/el_teu_usuari/.{ICE,X}authority:
" rm /home/el_teu_usuari/.{ICE,X}authority Media:Exemple.ogg
man sudo_root
$ man sudo _root
sudo_root - How to run administrative commands
SYNOPSIS
sudo command
sudo -i
INTRODUCTION
By default, the password for the user "root" (the system administrator) is locked. This means you cannot login as root or
use su. Instead, the installer will set up
sudo to allow the user that is created during install to run all administrative commands.
...
Exemples de configuració de sudo
Utilitzar la paraula de pas de root en comptes de la del usuari
Això es pot fer amb l'opció targetpw. Si afegiu la línia:
Defaults targetpw
Ara veureu que quan executeu sudo:
$ sudo ls root's password:
Us demana la paraula de pas de root.
Alias de comandes
Es poden especificar alies de comandes (com grups de comandes) amb:
## Command Aliases ## These are groups of related commands... ## Networking Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool ## Installation and management of software Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum ## Services Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig ## Updating the locate database Cmnd_Alias LOCATE = /usr/bin/updatedb ## Storage Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount ## Delegating permissions Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp ## Processes Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall ## Drivers Cmnd_Alias DRIVERS = /sbin/modprobe
Així es pot delegar en alguns usuaris tasque concretes, com per exemple les tasques de xarxa.
Permetre a un usuari executar certa comanda sense demanar paraula de pas
Amb sudo i el fitxer de configuració sudoers podem controlar amb molt de detall que poden o que no poden fer els usuaris. Per exemple, les següents línies permetrien apagar o reiniciar la màquina sense la necessitat de posar el password:
Cmnd_Alias SHUTDOWN_CMDS = /sbin/shutdown, /sbin/halt, /sbin/reboot sergi ALL=(ALL) NOPASSWD: SHUTDOWN_CMDS
Caducar la paraula de pas
Un cop introduida la paraula de pas amb sudo, a les pròximes comandes no es torna a demanar la paraula de pas fins que no passa un temps determinat. Podem forçar que caduqui "la sessió" amb:
$ sudo -k
Grup wheel
$ cat /etc/sudoers ... # Uncomment to allow people in group wheel to run all commands # %wheel ALL=(ALL) ALL # Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL
The wheel group is a unix legacy thing... it allows users in the wheel group to have access to root ( su sudo ) in a more controlled way.
Sorry forgot something important... ... you will need to add the pam wheel.so module to the auth config of su and sudo in the directory /etc/pam.d
Sudo a altres distribucions Linux
Linkat
A Linkat (al menys la versió 3) sudo ja es troba instal.lat però no funciona amb la configuració típica d'Ubuntu. Si observeu el fitxer de configuració:
# cat /etc/sudoers
Veureu les línies:
# In the default (unconfigured) configuration, sudo asks for the root password. # This allows use of an ordinary user account for administration of a freshly # installed system. When configuring sudo, delete the two # following lines: Defaults targetpw # ask for the password of the target user i.e. root ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
És a dir s'utilitza la opció targetpw. És a dir qualsevol usuari pot utilitzar sudo, si sap la comanda de root.
