He pirateado este script bash que prueba si el usuario tiene privilegios de superusuario y si no los tiene, los solicita. En última instancia, estoy tratando de invertir la segunda instrucción 'if' para poder eliminar las siguientes dos líneas (el eco "contraseña ok" y el otro en la siguiente línea)
# Root user only
if [[ "$EUID" != 0 ]]; then
sudo -k # make sure to ask for password on next sudo
if sudo true; then
echo "Password ok"
else
echo "Aborting script"
exit 1
fi
fi
echo "do my ops"
¿El propósito de "verdadero" en la cuarta línea es solo una declaración nula?
Necesito invertir la prueba en la cuarta línea, ¿cómo lo hago? Esto es lo que he intentado:
if sudo false; then
if sudo true == false; then
if [!(sudo true)]; then

echo "Aborting script" >&2Respuestas:
trueen bash no es una palabra clave, es un programa que sale instantáneamente con un código de salida exitoso. Del mismo modo,falsees un programa que sale con un código de salida fallido.Puede probar esto ejecutando ambos programas desde su terminal y luego leyendo la
$?variable, que contiene el código de salida del último programa;if sudo trueNo es equivalente aif sudo == true.if sudo trueestá ejecutando eltrueprograma usandosudoy verificando el código de salida.Por lo tanto:
if sudo false; thenestá ejecutando el programafalsecomo sudo. La devolución siempre será falsa.if sudo true == falseejecutará el programatruecon los argumentos==yfalseusandosudo. Obviamente, esto no es lo que quieres.if [!(sudo true)]es una sintaxis no válidaLo que probablemente estás buscando es
fuente
trueyfalseson "incorporados", comandos interpretados directamente por el shell; en sistemas similares a Unix en general , también existen como programas independientes en el sistema de archivos. La diferencia no importa mucho aquí, pero que yo sepa,sudo trueejecutará el programa independiente, no el bash incorporado.trueyfalseson los títulos en sus páginas de manual:true - do nothing, successfullyyfalse - do nothing, unsuccessfullytrueno existiera, el código en la pregunta muestra por qué uno podría necesitar inventarlo. Es un programa mínimo que solo puede fallar si el sistema en el que se encuentra está realmente alterado. Por lo tanto, se puede usar para establecer si las credenciales de acceso están bien.¿Siento que la respuesta aceptada en realidad no respondió a tu pregunta?
El propósito de hacer esto es verificar que realmente puedas
sudo.La forma en que se realiza esta verificación es a través del
trueprograma como se explica en la respuesta aceptada.fuente
sudo truetambién es bastante fácil, aunque un poco hacky.sudoser instalado, por lo que las comprobaciones no serían del todo equivalentes ... podría estar en el grupo de sudoers y aún así no podría sudo. (Esto puede surgir especialmente si, por ejemplo, está escribiendo un script para configurar una nueva imagen desde un tarball mínimo de rootfs, que podría no tener sudo.)sudosin estar en el grupo de sudoers si usted (ya sea personalmente o como miembro de algún otro grupo) está incluido en la lista/etc/sudoers. Pero inclusosudo trueno es infalible, ya que elsudoacceso se puede otorgar solo para comandos específicos, por lo que puedesudo true, pero no puede hacerlosudo something_else, o viceversa. No hay otra forma de probar con un revestimiento de hierro que no sea intentar ejecutar el comando con el que realmente desea ejecutarsudo.sudoersgrupo y no poder hacerlosudoporque elsudoersgrupo no figura en elsudoersarchivo. Un grupo con las cuatro letrassudoen su nombre no es una indicación válida de si un usuario en ese grupo puede hacer algo en particular o cualquier cosa usandosudo.Como veo en este guión. Solo está comprobando si sudo está habilitado, eso es todo ...
verdadero solo devuelve verdadero.
Entonces, en este caso, si necesitan ejecutar algún comando con sudo, primero verifica al inicio y solo les pide la contraseña una vez.
La condición funciona así: si sudo está ejecutando el comando verdadero correctamente, devolverá verdadero para la condición if, entonces sudo está habilitado y el usuario escribió la contraseña correctamente, de lo contrario, escribió la contraseña incorrectamente o sudo no está habilitado, el script No debe continuar.
Los otros comandos no necesitan solicitar la contraseña de sudo, porque su autenticación se realizó correctamente la primera vez (pero esto depende de la configuración de sudo, por lo que estos scripts dependen mucho de la configuración del entorno)
El 'echo password ok' lo demuestra también. el script de shell ya no pedirá la contraseña.
fuente
sudo trueysudo -k. Este último no requiere explícitamente una contraseña. Ninguno de los otros comandos en el script se ejecuta a través de sudo, por lo que, por supuesto, no requerirán contraseñas, independientemente de si la autenticación fue exitosa la primera vez.