¿Por qué no tengo una contraseña para "su"? Problemas con el "sudo"

34

He instalado Ubuntu usando la GUI, dándome una contraseña y todo. No recuerdo intrincadamente el proceso. Sin embargo, lo que me preocupa es que no conozco la siguiente contraseña:

$ su
Password: <the only password I've ever created on this machine>
su: Authentication failure

Simplemente no sé qué hacer. No estoy en problemas, pero solo quiero saber qué está pasando aquí. También puedo bloquearme de los directorios:

starkers@ubuntu:~/Desktop$ mkdir foobs
starkers@ubuntu:~/Desktop$ sudo chmod 777 -R foobs
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for starkers: <the only password I've ever created on this machine> 
starkers@ubuntu:~/Desktop$ cd foobs
bash: cd: foobs: Permission denied

Estoy un poco confundido. ¿Cómo puedo encerrarme así? Creo que sudoes el comando de teclado aquí. Pero estoy haciendo el foobsarchivo lo más abierto posible chmod, ¿por qué me bloquea?

Starkers
fuente
66
Casi nunca debería hacerlo chmod -R 777 whatever, a menos que quiera causar un gran riesgo de seguridad.
1
@BroSlow Gracias por la parte superior. Fuera de esta pregunta, pero ¿cómo establecería uno privilegios de lectura y escritura en un directorio de forma segura? 666?
Starkers
1
Definitivamente mejor, pero depende de lo que intentes hacer. por ejemplo, ¿realmente necesita que todos los usuarios tengan acceso de r / w a todo? De lo contrario, podría hacer algo como 644 (solo lectura para todos excepto para usted). Y en general, sería muy cuidadoso al hacer recursivo chmodque solo está cambiando los archivos que pretendía.
1
@broslow ¿Estás drogado? 666 es 1) todavía se puede escribir en el mundo y, por lo tanto, el mismo grado de riesgo de seguridad, y 2) elimina el bit ejecutable, lo que significa que ya no podría volver a ingresar a ese directorio.
Shadur
@Starkers El verdadero problema de seguridad que estoy viendo aquí es que, por alguna razón loca, /var/lib/sudoestá configurado para escribir en el mundo. Esto no debería estar sucediendo y debería intentar averiguar por qué sucedió.
Shadur

Respuestas:

49

Por defecto, la cuenta de superusuario ( root) está deshabilitada y no tiene ninguna contraseña. Puede crear uno ejecutando:

$ sudo passwd root

Luego podrá iniciar sesión como root ejecutando suesta contraseña.

En cuanto a chmod, el comando correcto sería:

$ chmod 777 -R foobs

También puedes usar:

$ sudo -i

para iniciar sesión como root utilizando su contraseña (sin crear una contraseña de root como se describe anteriormente).

Oli
fuente
44
@Oli Quizás puedas editar tu pregunta para agregarla sudo su. Esto también le otorga derechos permanentes en la terminal.
Despertar
13
no lo use sudo su, ya que dañará el medio ambiente y las cosas se romperán. en lugar de usar sudo -i.
strugee
20
No establezca una contraseña de root. No , no establecer una contraseña de root.
wchargin
44
chmod 777 es casi siempre malo (el bit adhesivo está exento; como se usa con / tmp). Esta respuesta es un riesgo de seguridad. Además, establecer una contraseña de root no es la forma en que se debe usar Ubuntu; nuevamente invitando a un riesgo de seguridad. Por favor, siga la respuesta de neon_overload.
Rinzwind
44
@WChargin, ¿por qué sugiere no tener una cuenta raíz / contraseña? Tengo una curiosidad genuina como usuario de Archlinux.
Rob
67

1. ¿Por qué no tienes una contraseña de root?

Mientras que usted puede crear una contraseña para la cuenta de superusuario lo que le permite conectarse como root con su, vale la pena mencionar que esta no es la forma habitual de hacer las cosas con Ubuntu (o cada vez más, otras distribuciones también). Ubuntu optó por no dar un nombre de usuario y la contraseña root de forma predeterminada por una razón. En cambio, un defecto de instalación de Ubuntu usará sudopara dar privilegios de superusuario. En una instalación de Ubuntu por defecto la persona que instaló el sistema operativo se da "sudo" permiso de forma predeterminada.

Cualquier persona con permiso total "sudo" puede llevar a cabo algo "como superusuario" por dejar pendiente con anterioridad sudoa su mando. Por ejemplo, para ejecutar apt-get dist-upgradecomo superusuario, se puede utilizar:

sudo apt-get dist-upgrade

Verá este uso de sudo prácticamente en cualquier lugar donde lea un tutorial sobre Ubuntu en la web. Es una alternativa a hacer esto.

su
apt-get dist-upgrade
exit

Con sudo, usted elige de antemano qué usuarios tienen acceso a sudo. No es necesario que recuerden una contraseña de root, ya que usan su propia contraseña. Si tiene varios usuarios, puede revocar uno de acceso de superusuario al retirar su permiso sudo, sin necesidad de cambiar la contraseña de root y notificar a todo el mundo de una nueva contraseña. Incluso puede elegir qué comandos puede ejecutar un usuario usando sudo y qué comandos están prohibidos para ese usuario. Y, por último, si hay una violación de seguridad, en algunos casos puede dejar una mejor pista de auditoría que muestra qué cuenta de usuario se vio comprometida.

Sudo facilita la ejecución de un solo comando con privilegios de superusuario. Con su, se deja caer permanentemente a un shell de superusuario que debe salir con exito logout. Esto puede hacer que las personas permanezcan en el shell de superusuario por más tiempo del necesario solo porque es más conveniente que cerrar la sesión y volver a iniciarla más tarde.

Con sudo, todavía tiene la opción de abrir un shell de superusuario permanente (interactivo) con el comando:

sudo su

... y esto todavía se puede hacer sin ninguna contraseña de root, porque sudootorga privilegios de superusuario al sucomando.

Y de manera similar, en lugar de su -un shell de inicio de sesión, puede usar sudo su -o su acceso directo sudo -i.

Sin embargo, al hacerlo, solo debe tener en cuenta que está actuando como superusuario para cada comando. Es un buen principio de seguridad no permanecer como superusuario por más tiempo del necesario, solo para disminuir la posibilidad de causar accidentalmente algún daño al sistema (sin él, solo puede dañar los archivos que posee su usuario).

Solo para aclarar, puede , si lo desea, dar al usuario root una contraseña que le permita iniciar sesión como root como se describe en la respuesta de @ Oli, si específicamente desea hacer las cosas de esta manera. Solo quería informarle sobre la convención de Ubuntu de preferir en su sudolugar y hacerle saber que hay una alternativa.


2. Los problemas con su comando chmod 777 -R

Su pregunta también tiene una segunda parte: sus problemas con el comando sudo chmod 777 -R foobs.

En primer lugar, la siguiente advertencia indica un problema de seguridad potencialmente grave en su máquina:

sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700

Esto significa que en algún momento, se ha configurado /var/lib/sudopara que se pueda escribir en todo el mundo. Me imagino que has hecho esto en algún momento usando un comando como sudo chmod 777 -R /. Desafortunadamente, al hacer esto, probablemente haya roto todos los permisos de archivos en todo su sistema. Es poco probable que este sea el único archivo importante del sistema cuyos permisos se hayan modificado para poder escribirse en todo el mundo. Esencialmente, ahora tiene un sistema fácilmente pirateable, y la única forma fácil de recuperarlo sería reinstalarlo.

En segundo lugar, el comando que estaba usando:

sudo chmod 777 -R foobs

Al manipular archivos dentro de su directorio de inicio, en este caso ~/Desktop, no debería tener que usar sudo. De todos modos, todos los archivos que cree en su directorio de inicio deben ser modificables por usted (y si no, está sucediendo algo gracioso).

Además, debe ser plenamente consciente de las consecuencias de cambiar los permisos de archivos en masa, como hacerlo de forma recursiva o en una gran cantidad de archivos. En este caso, está cambiando cuidadosamente los permisos de archivos configurados para que se puedan escribir en todo el mundo. Cualquier otro usuario, o cualquier software de servidor con errores en la máquina, puede tener acceso fácil para sobrescribir todos estos archivos y directorios.

Es casi seguro que chmod 777 -R [dir]es no una solución apropiada para cualquier problema que estaban tratando de resolver (y como he mencionado anteriormente, hay evidencia de que ha hecho a los archivos del sistema en / var / lib también, y supongo que a mucha otra lugares).

Un par de reglas básicas:

  • Si solo está jugando con sus propios archivos en su directorio personal, escritorio, etc., nunca debería necesitar usar sudoderechos de superusuario. Si lo hace, es una señal de advertencia de que está haciendo algo mal.

  • Nunca debe modificar manualmente los archivos del sistema propiedad de los paquetes. Excepción: a menos que lo esté haciendo específicamente en formas documentadas por esos paquetes, como modificando su configuración en /etc. Esto también se aplica al cambio de permisos de archivos. Si un tutorial o un intento de solucionar el problema requiere sudoo derechos de superusuario, y no se trata simplemente de un cambio en una configuración en / etc /, es una señal de advertencia de que está haciendo algo mal.

thomasrutter
fuente
Impresionante explicación ...
aprobado
77
Creo que "sudo -i" es la forma "oficial" de obtener un shell raíz, en lugar de "sudo su"
Max
3
Sí, deberías usar sudo -imás sudo su.
Seth
sudo -i(o sudo su -) no son universalmente mejores, sino simplemente diferentes: lanzan un shell de inicio de sesión que simula un entorno de inicio de sesión del usuario raíz, que ejecuta, por ejemplo, el .profilearchivo o .loginarchivo del usuario raíz. Estos son mejores si desea que el entorno en el shell se parezca más a un shell de inicio de sesión raíz que a un shell interactivo que sucede con privilegios de superusuario. Probablemente sea mejor usar shells basados ​​en inicio de sesión si se usa un shell, pero eso es discutible: el punto de la respuesta es que Ubuntu está diseñado principalmente para usar sudocomandos de ejecución con privilegios de superusuario.
thomasrutter