¿Cómo puedo asignar una contraseña inicial / predeterminada a un usuario en Linux?

10

Encontré una guía que explica cómo configurar la contraseña de un usuario . Estoy tratando de automatizarlo y enviar un correo electrónico al usuario como:

userid created with password XYZ.
request to change the initial password.

De acuerdo con el documento anterior, se debe crear una contraseña cifrada usando Python y se debe alimentar al usermodcomando de esta manera:

 usermod -p "<encrypted-password>" <username>

¿Hay alguna otra forma más sencilla de hacer esto? No quiero descargar ninguna utilidad especial para hacerlo; debe generalizarse tanto como sea posible.


Editar : Incluso el método proporcionado en el enlace anterior no parece funcionar para mí:

bash-3.00# python
Python 2.4.6 (#1, Dec 13 2009, 23:43:51) [C] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt; print crypt.crypt("<password>","<salt>")
<sOMrcxm7pCPI
>>> ^D
bash-3.00# useradd -g other -p "sOMrcxm7pCPI" -G bin,sys -m -s /usr/bin/bash mukesh2
UX: useradd: ERROR: project sOMrcxm7pCPI does not exist.  Choose another.
UX: useradd: sOMrcxm7pCPI name should be all lower case or numeric.
munish
fuente
Aquí hay un enlace más que encontré, pero parece haber un problema de seguridad también con el uso de la opción -p usermodcuando alguien usa pspara ver que el proceso que enumera la contraseña está visible
munish

Respuestas:

13

Puedes usarlo chpasswdpara hacerlo, así:

echo "username:newpassword" | chpasswd

Puede canalizar chpasswddesde otros programas echo, si es conveniente, pero esto será suficiente.

Editar: para generar la contraseña dentro del script de shell y luego configurarla, puede hacer algo como esto:

# Change username to the correct user:
USR=username
# This will generate a random, 8-character password:
PASS=`tr -dc A-Za-z0-9_ < /dev/urandom | head -c8`
# This will actually set the password:
echo "$USR:$PASS" | chpasswd

Para obtener más información sobre chpasswd, consulte http://linux.die.net/man/8/chpasswd

(El comando para generar la contraseña era de http://nixcraft.com/shell-scripting/13454-command-generate-random-password-string.html )

Dominick Pastore
fuente
gracias @Dominick hmm, chpasswd está quizás en AIX ... no lo he usado. y evrytime tengo que escribir una contraseña ... ¿No pueden ser generados por el guión como en las preguntas Enlace ... por desgracia, incluso eso no funcionó para mí
Munish
@munish No estoy muy seguro de lo que quieres decir con generar en el script, pero actualicé mi respuesta para poder ser más útil.
Dominick Pastore
No funciona. "Error de manipulación de token de autenticación"
Cerin
@Cerin ¿Por casualidad estás haciendo algo así sudo echo "username:newpass" | chpasswd? Debido a que los permisos elevados de sudono pasan a través de la tubería, también chpasswdse ejecutará como un usuario normal. Se puede arreglar moviendo el sudo, como en echo "username:newpass" | sudo chpasswd. También hay otros problemas que pueden causar ese mensaje de error, pero los errores de permisos como este son probablemente los más comunes.
Dominick Pastore
1
Las contraseñas en la línea de comando pueden ser visibles para otros usuarios registrados en la misma máquina usando w, ps u otros comandos que muestran información sobre otros procesos. El usuario debe cambiar las contraseñas establecidas de esta manera lo antes posible.
Mnebuerquo
3

Puede usar OpenSSL para generar la contraseña aleatoria (16 caracteres, en este caso):

# 1000 bytes should be enough to give us 16 alphanumeric ones
p=$(openssl rand 1000 | strings | grep -io [[:alnum:]] | head -n 16 | tr -d '\n')

Luego alimente la contraseña con hash useraddousermod

# omit the "-1" if you want traditional crypt()
usermod -p $(openssl passwd -1 "$p") <username>

Crédito donde se debe: la generación de la contraseña se adapta de un método similar que utiliza en /dev/urandomlugar de openssl.

James Sneeringer
fuente
2

useradd debería funcionar (lo he hecho en Ubuntu). Tal vez verifique que cada uno de sus argumentos sea correcto (existen grupos, la ruta es correcta para golpear). Puede ejecutar el comando con solo una contraseña y un usuario, y luego usar userdel para eliminar y luego volver a intentar con más parámetros, para ver qué causa el problema (enfoque de fuerza bruta).

También hay usuarios nuevos (vea la página del manual), al menos en Ubuntu, donde le da un archivo con contraseña como información, incluyendo contraseñas de texto sin formato y creará esos usuarios. Buena manera de hacer muchos usuarios a la vez.

pcm
fuente
+1 por mencionar el newuserscomando para Ubuntu
Levon
1

La forma más simple que encontré:


PASSWD="mySeCr3t-default-pa55" 
echo ${PASSWD} | passwd --stdin username_here
MelBurslan
fuente
¿Incluso probaste esto? passwd: unrecognized option '--stdin'
Cerin
Sí, lo usé muchas veces, pero, como con casi cualquier otro comando, no es la solución de facto para el problema en cuestión. Algunas variaciones de passwd binary no admiten el modificador --stdin.
MelBurslan