2011-05-07 23 views
8

Esto puede ser una pregunta estúpida.sudo para un solo comando en script bash

Tengo un script que quiero ser portátil entre Mac OS X y un cuadro de Linux que uso. En OS X, un comando en el script requiere sudo, donde en el cuadro de Linux, no.

Para abreviar, ¿cómo se ejecuta un comando en un script con sudo, mientras se eliminan los privilegios elevados para el resto del script?

He intentado utilizar

su - 

y

su -c 

pero ambos parecen a error a cabo. (Dicen "lo siento" y continúan, supongo que porque está intentando ejecutar como root y root no tiene una contraseña).

Sé que tiene que haber una manera tonta y fácil de hacer esto, ¿qué sugiere todo el mundo?

Respuesta

6

Puede 'revocar' el permiso sudo (en realidad: cerrar la ventana de tiempo sudo antes de tiempo) haciendo:

sudo -k 

Además, se puede configurar sudo para permitir sólo permisos elevados en ciertos comandos, o incluso a suplantar no raíz para comandos específicos. Ver man sudoers. La sección de ejemplos deja muy claro que virtualmente no hay límite para la capacidad de configuración de sudo (roles, hosts, comandos, permitir escapes, permitir sudo usuarios, excepciones a cosas permitidas, contraseña menos autorización, etc.).

Con suerte un ejemplo interesante en su contexto:

El usuario Fred puede ejecutar comandos como cualquier usuario en los Runas_Alias ​​DB (Oracle o Sybase) sin dar una contraseña.

fred   ALL = (DB) NOPASSWD: ALL 

Si no puede/no realmente quiere entrometerse en/etc/sudoers (visudo!) Entonces sugiero usar algo como

{ 
    trap "sudo -k" EXIT INT QUIT TERM 
    sudo ls # whatever 
} 
+0

esto era exactamente lo que necesitaba. ejecuta el comando, luego ejecuta sudo -k. muchas gracias. – rick

+0

Gracias por sudoers; era justo lo que necesitaba. –

0

Pruebe sudo su en lugar de su para volver a la norma anterior.

+0

cuando intento "sudo su umount/dev/disk1", ​​obtengo "su: unknown login: umount". mirando a través de sudo hombre, solo puedo concluir que está buscando un usuario llamado "umount"? – rick

+0

@rick: Sí, está buscando un usuario llamado 'umount'. 'su' es para cambiar a un usuario diferente (generalmente root) y solo se puede ejecutar como root, por lo que el argumento que toma es un nombre de usuario. 'sudo' es para ejecutar un solo comando como un usuario diferente.En su ejemplo, usted está diciendo que quiere ejecutar el comando 'su umount/dev/disk1' como root, que luego dice que quiere cambiar al usuario' umount' (con un argumento extra ignorado). –

0

Uso sudo sin su:

#!/bin/bash 
whoami # Runs under your regular account 
sudo whoami # Runs as root 
whoami # Runs under your regular account again 

Aquí está la salida cuando I ru n it:

$ ./sudotest 
gordon 
Password: 
root 
gordon 
Cuestiones relacionadas