
Me gustaría establecer una contraseña para configurar samba
el directorio compartido usando un script de shell. Escribí el siguiente guión test.sh
:
#!/bin/bash
pass=123456
(echo "$pass"; echo "$pass") | smbpasswd -s -a $(whoami)
Esto imprime lo siguiente:
When run by root:
smbpasswd [options] [username]
otherwise:
smbpasswd [options]
options:
-L local mode (must be first option)
-h print this usage message
-s use stdin for password prompt
-c smb.conf file Use the given path to the smb.conf file
-D LEVEL debug level
-r MACHINE remote machine
-U USER remote username
extra options when run by root or in local mode:
-a add user
-d disable user
-e enable user
-i interdomain trust account
-m machine trust account
-n set no password
-W use stdin ldap admin password
-w PASSWORD ldap admin password
-x delete user
-R ORDER name resolve order
Como señala, no lo estaba ejecutando como root cuando lo ejecuto como root, es decir sudo ./test.sh
, funciona bien. Pero el problema es que agrega root
en lugar de noobuser
, que es mi usuario que inició sesión.
¿Cómo puedo agregar noobuser
haciendo algo similar (tengo la sensación de que me falta algo aquí)?
Respuesta1
prueba.sh:
#!/bin/bash
pass=123456
if [ -z "$SUDO_USER" ]; then
echo "This script is only allowed to run from sudo";
exit -1;
fi
(echo "$pass"; echo "$pass") | smbpasswd -s -a "$SUDO_USER"
invocación:
sudo ./test.sh
Respuesta2
Este es un fragmento de cómo automatizo smbpasswd -a
mediante un script bash, funciona a las mil maravillas.
username="bob"
pass="secret"
echo -e "$pass\n$pass" | smbpasswd -a -s $username
este está extendido, inserta el nombre de usuario actual por usted. (sin awk es más corto y más limpio)
pass="secret"
echo -e "$pass\n$pass" | smbpasswd -a -s $(id -un)
.
encuentre más detalles a continuación:
.
eco -e
La opción -e se utiliza para permitir la interpretación de echo de instancias adicionales del carácter de nueva línea, así como la interpretación de otros caracteres especiales, como una pestaña horizontal, que está representada por \t.
símbolo de tubería “|”
En los sistemas operativos informáticos tipo Unix, una canalización es un mecanismo para la comunicación entre procesos mediante el paso de mensajes.
https://en.wikipedia.org/wiki/Pipeline_(Unix)
https://superuser.com/questions/756158/what-does-the-linux-pipe-symbol-do
el credito va a:lorenzoc, Wikipedia
smbcontraseña -s
La opción -s hace que smbpasswd esté en silencio (es decir, que no emita mensajes) y lea sus contraseñas antiguas y nuevas desde la entrada estándar, en lugar de desde /dev/tty (como lo hace el programa passwd(1)). Esta opción es para ayudar a las personas a escribir scripts para manejar smbpasswd.
identificación -u -n
id
muestra las identificaciones del sistema de un usuario específico.salidas:
uid=0(root) gid=0(root) grupy=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
Mostrar un nombre en lugar de un UID/GID
De forma predeterminada, el comando id muestra el número para las opciones -G, -g y -u. Puede forzar que el comando id muestre el nombre del UID o GID en lugar del número para las opciones -G, -g y -u pasando la opción -n de la siguiente manera:
id -ng {UserNameHere} id -nu {UserNameHere} id -nG {UserNameHere} id -nG vivek
leer más sobre
id
:https://www.cyberciti.biz/faq/unix-linux-id-command-examples-usage-syntax/El crédito es para:Brett(solución),Casa rural Vivek(información profunda)
una pequeña pista en caso de problemas(Crédito a:Pablo):https://superuser.com/a/343163/1169381
Respuesta3
Si no desea pasar un argumento al script, puede intentar esto
#!/bin/bash
pass=123456
echo $pass
echo $pass | smbpasswd -s -a $(who am i | awk '{print $1}')
y luego invocar el script.
Respuesta4
Estoy creando un nombre de archivo smb.sh, contenido como este
#!/bin/bash
mkdir /home/user_data/$1
#add owner
chown -R $1 /home/user_data/$1
#owner only
chmod -R 700 /home/user_data/$1
user=$1
pass=$2
#sleep 3
smbpasswd -a $user<<EOF
$pass
$pass
EOF
y puedes enviar parámetros a smb.sh así
./smb.sh myusername mypassword
simple, puedes usar el archivo smb.sh con lenguaje PHP, usar la función PHP exec