¿Cómo decide sudo si solicita una contraseña, cuando se le da un comando que en realidad no necesita 'sudo'?

10

Cuando se aplica sudoa un comando que realmente no necesita sudo,

  • a veces no me pide mi contraseña. Por ejemplo debajo de mi $HOME, sudo ls.

  • Pero recuerdo que lo hace para algún otro comando, aunque olvido cuál.

Entonces, me preguntaba cómo sudodecide si solicitar una contraseña, cuando se le da un comando que realmente no necesita sudo. ¿Hay alguna regla para /etc/sudoersespecificar eso?

Mi verdadero problema es que cuando lo uso du, a veces muestra "permiso denegado" para algunos directorios, y a veces no, ¿probablemente porque no tengo permiso en algunos directorios? Solicito sudode todos dumodos, y pensé que me pedirían una contraseña de todos modos, pero en realidad no en mis propios directorios.

Tim
fuente
15
Decidir si un programa podría intentar hacer algo que sólo root puede hacer, o tener acceso a un archivo que el usuario que ejecuta está prohibido el acceso, sin tener que ejecutar el programa, es el problema de la parada en el encubrimiento. Así que puedes estar seguro de que eso no es lo que está haciendo sudo.
zwol
2
+1 porque aunque la pregunta se basa en un concepto erróneo, los síntomas se explican claramente y tiene una respuesta inequívoca.
dcorking

Respuestas:

22

En una configuración típica, el comando es irrelevante. Debe ingresar su contraseña la primera vez que usa sudo, y no necesita su contraseña en ese shell en particular durante los próximos 15 minutos.

Desde la perspectiva de la computadora, no existe tal cosa como un "comando que necesita sudo". Cualquier usuario puede intentar ejecutar cualquier comando. El resultado puede ser un mensaje de error como "Permiso denegado" o "No existe dicho archivo o directorio", pero siempre es posible ejecutar el comando.

Por ejemplo, si se ejecuta duen un árbol de directorios que tiene contenido para el que no tiene permiso de acceso, obtendrá errores de permiso. Eso es lo que significa "permiso denegado". Si ejecuta sudo du, sudo se ejecuta ducomo root, por lo que no obtiene errores de permiso (ese es el punto de la cuenta raíz: root¹ siempre tiene permiso). Cuando ejecuta sudo du, se duejecuta como root y sudono está involucrado en absoluto después de duhaber comenzado. Si du encuentra errores de permiso es completamente irrelevante para la forma en que opera sudo.

Hay comandos que necesitan sudo para hacer algo útil . La utilidad es un concepto humano. Debe usar sudo (u otros métodos para ejecutar el comando como root) si el comando hace algo útil cuando se ejecuta como root pero no cuando se ejecuta en su cuenta.

Si sudo le pide su contraseña depende de dos cosas.

  1. Según la configuración, sudo decide si necesita ser autenticado. Por defecto, sudo requiere una contraseña. Esto se puede desactivar de varias maneras, incluida la configuración de la authenticateopción en falso y tener una regla aplicable con la NOPASSWDetiqueta.
  2. Si sudo requiere su contraseña, puede ser contenido usar un valor en caché. Eso está bien porque la razón por la cual sudo necesita su contraseña no es para autenticar quién la está llamando (sudo sabe qué usuario la invocó), sino para confirmar que sigue siendo usted quien está en los comandos y no alguien que tomó el control de su teclado. De manera predeterminada, sudo está dispuesto a creer que todavía está en los comandos si ingresó su contraseña hace menos de 15 minutos (esto se puede cambiar con la timeoutopción). Debe haber ingresado la contraseña en la misma terminal (de modo que si permanece conectado en una terminal, deje esa terminal desatendida y luego use otra terminal, alguien puede "tty_tickets

¹ casi, pero eso está más allá del alcance de este hilo.

Gilles 'SO- deja de ser malvado'
fuente
Puede haber archivos que tengan el bit ejecutable establecido solo para root, no para otros. Esto podría ser caer bajo "necesita root para ejecutar". (Solo quisquilloso.)
Paŭlo Ebermann
@ PaŭloEbermann, escribí "cualquier usuario puede intentar ejecutar cualquier comando" para evitar que el caso sea raro. Siempre hay un nitpicker :(
Gilles 'SO- deja de ser malvado'
45

sudono sabe si el comando que debe ejecutar debe ejecutarse como otro usuario (generalmente root), todo lo que sabe es su configuración. Eso determina qué usuarios pueden ejecutar sudo, con qué usuarios como "objetivos" y para qué comandos; También determina si se necesita una contraseña, cuál, y si se debe mantener un token de autenticación.

Si está utilizando la configuración predeterminada de Debian, lo más probable es que lo último esté involucrado aquí: sudole pedirá su contraseña la primera vez que la use en cualquier terminal, luego mantendrá un token de autenticación durante un cierto período de tiempo. Si reutiliza sudoen el mismo terminal dentro de ese plazo, no le pedirá una contraseña.

Stephen Kitt
fuente
Gracias. ¿Quiere decir sudo du /path/to/some/dirque siempre debería necesitar mi contraseña o nunca, independientemente de /path/to/some/dir?
Tim
12
Si. Siempre necesitará su contraseña (o no). Claramente, si necesita su contraseña pero ya la ha almacenado en el caché, no le pedirá que la ingrese.
dr_
55
Estrictamente hablando, podría depender de la ruta, porque /etc/sudoerspuede especificar comandos y sus argumentos. Sin embargo si no se ha añadido nada parecido a sudoers(y si tiene, eso espero que sería consciente de ello), los argumentos no importará (tampoco lo hará el comando si tiene acceso general a la raíz a través sudo ).
Stephen Kitt
19
sudono almacena su contraseña en el caché, solo la información de que su identidad ya ha sido verificada una vez con una verificación de contraseña. Dado que sudoes un programa setuid-root, ya tiene todos los permisos que necesita para ejecutar cualquier cosa como cualquiera, pero se confía en que solo permitirá a los usuarios usarlo exactamente como se especifica en el sudoersarchivo y rechazar todos los demás intentos de usarlo . Por eso es importante que sudosea ​​un programa tan pequeño y muy bien estudiado.
telcoM
6

a un comando que en realidad no necesita sudo

No es que un comando necesite o no necesite sudo. Cuando corres

sudo -u user command

el sistema se ejecuta commandcomo el user.

Si la invocación es exitosa o no, y si se solicita una contraseña o no, depende de la política de seguridad sudoers(generalmente configurada en /etc/sudoers).

Dr_
fuente