2010-09-08 15 views

Respuesta

10

No porque puede verlo a través de /proc/$PID/cmdline.

Sugiero no intentar reinventar las herramientas de seguridad. El programa sudo puede almacenar en caché su contraseña.

+2

Puede haber una ventana muy corta mientras existe la entrada/proc para el comando echo, pero 'corto' es el término operativo, me parece (como en milisegundos o menos). –

+1

Do 'strace -o bash.strace -f bash -c 'contraseña de eco | cat'' y examina el archivo 'bash.strace'. Verá la línea con 'execve ("/bin/cat ", [" cat "], [/ * 53 vars * /]) = 0', pero no verá el eco allí (excepto en la primera línea donde se pasa a bash): es un bash incorporado. Por lo tanto, lanzar el script en bash es suficiente para mantenerlo a salvo. – ZyX

+0

@ZyX - gracias por la explicación del riesgo. No habría considerado este tipo de solución anteriormente, sin embargo, mi situación me obliga a usarla. Me alegro de que no sea tan inseguro como temía. – MountainX

4
echo $password | sudo -S apt-get install -y foo bar 

Esto es un poco peligroso. Si el usuario ya está autenticado para sudo, sudo no volverá a solicitar la contraseña y se enviará a apt-get, lo que podría generar resultados extraños (por ejemplo, si el script postinstall hace una pregunta). Sugeriría utilizar

sudo -k       # remove previous sudo timestamp 
echo $password | sudo -v -S  # create a new one for 15 minutes 
sudo apt-get ...    # execute the command 

en su lugar.

EDITAR: Dirk tiene razón acerca de la contraseña siendo visible durante un tiempo muy corto mientras se ejecuta echo. Por favor vea mi respuesta como un comentario extendido en lugar de una respuesta a su pregunta.

+0

¿Por qué usar la variable? ¿Por qué no dejar que sudo maneje las instrucciones? Creo que la segunda línea debería convertirse en 'sudo -v -S'. La única razón para guardarlo sería porque 'read -s' no repite la contraseña, pero tampoco lo hace 'sudo', ¿verdad? –

+0

@Jonathan: Es cierto. Sin embargo, tales scripts a menudo se usan para ejecutar sudo en varias computadoras (vea aquí un ejemplo: http://www.heinzi.at/projects/upgradebest.sh/). Entonces, tiene sentido no tener que ingresar la contraseña varias veces. – Heinzi

+0

Lo suficientemente justo: olvidé contabilizar la minimización a los efectos de hacer la pregunta en SO. –

11

Un mejor enfoque sería para editar el archivo sudoers y añadir su programa que no requieren contraseña ...

Hacer un sudo visudo y añadir siguiente para habilitar su grupo de administración para ejecutar apt-get w/o contraseña: %admin ALL = NOPASSWD: /usr/bin/apt-get

Consulte la página man de sudoers para obtener más información.

-1

sudo es open source, por lo que puede compilar su propia versión que toma la contraseña como un parámetro de línea de comando.

+2

Recomiendo encarecidamente que no se use una versión casera de una parte tan importante del sistema operativo sin una * muy * buena razón. (Tendría que aplicar manualmente y volver a compilar cada parche, etc.) – Heinzi

Cuestiones relacionadas