Cuando uso sudo
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.
Contenido
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