Cuando uso sudo

De HackLab
Saltar a: navegación, buscar


sudo es un comando para ejecutar otro comando con permisos de usuario root. Esto quiere decir que cualquier comando al que le agreguemos sudo adelante, va a ser capaz de modificar partes del sistema a las que como usuaria normal no tenemos acceso. Sin embargo hay que saber distinguir cuándo es necesario usarlo y cuándo no.


Esto es muy largo y no me interesa

Cuando necesites modificar un archivo, preguntate:

  • Está dentro de mi home o un directorio al que tengo acceso? No uso sudo.
  • Modifica un archivo del sistema, fuera de mi home? Uso sudo.

Cuando necesites modificar muchos archivos como root, convertite en root directamente:

   sudo su

Qué pasa cuando uso sudo

sudo es un programa que obtiene temporalmente permisos de superusuaria, mejor conocida como root y a veces como supervaca (!). En la práctica quiere decir que si no sabemos la contraseña de root, podemos hacer de cuenta que somos root usando nuestra contraseña por un rato.

Es muy común en distribuciones GNU/Linux basadas en Ubuntu, como Mint o Hackmenta, porque la persona que administra el sistema no tiene que recordar dos contraseñas.

Por ejemplo, en una terminal, escribir los siguientes comandos (escribí lo que viene después de $):

   $ cd /tmp
   $ sudo touch hola_con_sudo
   $ touch hola
   $ ls -hal hola*

Probablemente veamos algo como esto:

   -rw-r----- 1 user users 0 mar 30 18:16 hola
   -rw-r----- 1 root root  0 mar 30 18:16 hola_con_sudo

Las cuarta y quinta columnas muestran las usuarias y grupos que tienen permisos sobre los archivos que acabamos de crear. El archivo que se creó con sudo pertenece a root, el otro no.

Esto quiere decir que como usuaria normal no puedo tener acceso al archivo:

   $ cat hola_con_sudo 
   cat: hola_con_sudo: Permiso denegado
   $ cat hola

Sin embargo, con sudo tengo permiso para ver los dos:

   $ sudo cat hola_con_sudo
   $ sudo cat hola

Esto quiere decir que si querés crear un archivo al que quieras acceder como usuaria normal, nunca uses sudo.

Cuándo usarlo

Por lo general solo hay que usar sudo cuando queremos modificar un archivo del sistema, o hacer acciones que modifican archivos del sistema (recordemos que en Linux como en todos los Unix, casi cualquier recurso es un archivo).

Por ejemplo, para editar la configuración de un servicio (escribí después del $ y apretá enter):

   $ nano /etc/hosts
   (editamos editamos y al guardar nos dice que no tiene permisos)
   $ sudo nano /etc/hosts
   (editamos y nos deja guarda)

O para instalar programas:

   $ apt-get install anarchism
   E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
   E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

En general vas a ver que dice "Permission denied", que es el mensaje estándar para no poder acceder a un archivo por falta de permisos.


Cuándo no usarlo

Cuando el archivo es accedido por nuestra cuenta normal, por ejemplo un archivo que está en nuestro directorio personal (es decir la home, el ~ o /home/usuaria) no hace falta usar sudo. Es más, si lo usamos vamos a tener problemas después.

Por ejemplo cuando queremos crear una llave SSH, deberían aparecer los archivos en ~/.ssh/, pero si lo hacemos con sudo no aparece nada:

   $ sudo ssh-keygen
   $ ls ~/.ssh

Esto es porque el programa ssh-keygen genera las llaves en el directorio personal de la usuaria. Como lo hicimos con permisos de root, no están en el nuestro:

   $ sudo ls /root/.ssh

(El directorio personal de root no es /home/root sino /root)

A veces el problema es más complejo, porque distribuciones como Ubuntu/Mint/Hackmenta suelen cambiar el directorio personal de root y ponerlo igual al de la usuaria que lo llama. Entonces para el ejemplo de ssh-keygen los archivos se crean en ~/.ssh de nuestra usuaria, pero no tenemos permisos de lectura, que es peor que que estén en otro lado.

Para recuperar permisos que perdimos

Si usamos sudo cuando no hacía falta, solo hay que usar el comando chown que cambia la usuaria que tiene acceso al archivo o directorio. Como el archivo pertenece a root, solo root puede cederselo a la usuaria:

   $ sudo touch hola_con_sudo
   cat: hola_con_sudo: Permiso denegado
   $ chown usuaria hola_con_sudo
   chown: changing ownership of ‘hola_con_sudo’: Operación no permitida
   $ sudo chown usuaria hola_con_sudo
   $ cat hola_con_sudo