Estoy tratando de configurar en masa algunas contraseñas de cuentas de usuario usando chpasswd
. Las contraseñas deben generarse al azar e imprimirse en stdout
(necesito escribirlas o guardarlas en un almacén de contraseñas), y también pasarlas chpasswd
.
Ingenuamente, haría esto así
{
echo student1:$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo '')
echo student2:$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo '')
} | tee >(chpasswd)
Sin embargo, me preocupa pasarle la nueva contraseña como argumento de la línea de comandos echo
, porque los argumentos generalmente son visibles para otros usuarios ps -aux
(aunque nunca vi echo
aparecer ninguna línea ps
).
¿Hay alguna forma alternativa de anteponer un valor a mi contraseña devuelta y luego pasarla chpasswd
?
echo
Es un shell incorporado. No aparecería en la tabla de procesos.Respuestas:
Su código debe ser seguro, ya
echo
que no aparecerá en la tabla de procesos, ya que es un shell incorporado.Aquí hay una solución alternativa:
Esto crea los nombres y las contraseñas de sus alumnos
n
, sin pasar ninguna contraseña en ninguna línea de comando de ningún comando.La
paste
utilidad une varios archivos como columnas e inserta un delimitador entre ellos. Aquí, usamos:
como delimitador y le damos dos "archivos" (sustituciones de proceso). El primero contiene la salida de unseq
comando que crea 20 nombres de usuario de estudiantes, y el segundo contiene la salida de una tubería que crea 20 cadenas aleatorias de longitud 13.Si tiene un archivo con nombres de usuario ya generados:
Estos guardarán las contraseñas y los nombres de usuario en el archivo en
secret.txt
lugar de mostrar las contraseñas generadas en el terminal.fuente
echo
oprintf
, sin embargo, el código es un poco incómodo de descifrarecho
embargo , no debe confiar en ser un constructor de conchas. En la mayoría de los proyectiles lo es, pero no hay absolutamente ningún requisito de que lo sea.tee secret.txt > >(chpasswd)
ytee secret.txt | chpasswd
? Esto último parece mucho más común, por lo que me pregunto por qué elegiste usar la sustitución del proceso en lugar de una tubería simpletee
). Ahora que lo has señalado, creo que realmente lo cambiaré (se ve mejor). Gracias.echo
es muy probable que esté integrado en el shell, por lo que no apareceráps
como un proceso separado.Pero no necesita usar la sustitución de comandos, solo puede tener la salida de la tubería directamente a
chpasswd
:Si desea cambiar varias contraseñas con una sola ejecución
chpasswd
, debería ser fácil repetir las partes esenciales. O conviértalo en una función:Como comentario: eso se
head /dev/urandom
siente un poco extraño yaurandom
que no está orientado a líneas. Puede leer cantidades excesivas de bytes, lo que afectará la noción del núcleo de entropía disponible, lo que a su vez puede conducir al/dev/random
bloqueo. Puede ser más limpio simplemente leer una cantidad fija de datos y usar algo comobase64
convertir los bytes aleatorios en caracteres imprimibles (en lugar de simplemente tirar alrededor de 3/4 de los bytes que obtienes).Algo como esto te daría aprox. 16 caracteres y números:
(es decir, 16 menos la cantidad
+
y/
caracteres en la salida debase64
. La posibilidad de cualquiera de ellos es 1/32 por carácter, así que si acerté mi combinatoria, eso da un 99% de posibilidades de dejar al menos 14 caracteres, y un 99.99% de posibilidades de dejar al menos 12.)fuente
printf
solución no hace lo que hace mi código original: devuelve varias líneas para varios nombres de usuario, pero agradezco sus comentarios sobrehead urandom
head -c 10 | base64
tubería, o la de Nilshead | tr
? Es muy probable que 10 "líneas" de bytes aleatorios sean cientos de bytes (dado que solo 1 de 256 serían líneas nuevas), aunque en teoría podría ser exactamente 10 bytes, pero las probabilidades de que sean completamente insignificantes. De manera similar cuando se usabase64
, si los bytes aleatorios son justos\xff
, entonces la base64 será solo una cadena de barras, pero eso también es bastante improbable. Si le importa, puede leer más de 10 bytes, reducir las probabilidades de eso y luego reducir la longitud de la salida resultante./dev/urandom
, pero el riesgo no es del 0%.