
Gostaria de definir uma senha para configurar samba
o diretório de compartilhamento usando um script de shell. Eu escrevi o seguinte script test.sh
:
#!/bin/bash
pass=123456
(echo "$pass"; echo "$pass") | smbpasswd -s -a $(whoami)
Isso imprime o seguinte:
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 aponta, eu não estava rodando como root, quando executo como root, ou seja sudo ./test.sh
, ele roda bem. Mas o problema é que ele adiciona root
em vez de noobuser
, que é meu usuário logado.
Como posso adicionar noobuser
fazendo algo semelhante (tenho a sensação de que estou faltando alguma coisa aqui)?
Responder1
teste.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"
invocação:
sudo ./test.sh
Responder2
Este é um fragmento de como eu automatizo smbpasswd -a
via script bash, funciona perfeitamente.
username="bob"
pass="secret"
echo -e "$pass\n$pass" | smbpasswd -a -s $username
este é estendido, insere o nome de usuário atual para você. (sem awk é mais curto e mais limpo)
pass="secret"
echo -e "$pass\n$pass" | smbpasswd -a -s $(id -un)
.
encontre mais detalhes abaixo:
.
eco -e
A opção -e é usada para permitir a interpretação do echo de instâncias adicionais do caractere de nova linha, bem como a interpretação de outros caracteres especiais, como uma tabulação horizontal, que é representada por \t.
símbolo de barra vertical “|”
Em sistemas operacionais de computador do tipo Unix, um pipeline é um mecanismo para comunicação entre processos usando passagem de mensagens.
https://en.wikipedia.org/wiki/Pipeline_(Unix)
https://superuser.com/questions/756158/what-does-the-linux-pipe-symbol-do
o crédito vai para:LawrenceC, Wikipédia
smbpasswd -s
A opção -s faz com que o smbpasswd fique silencioso (ou seja, não emita prompts) e leia suas senhas antigas e novas a partir da entrada padrão, em vez de /dev/tty (como o programa passwd(1) faz). Esta opção é para ajudar as pessoas a escrever scripts para dirigir o smbpasswd
eu -você -n
id
exibe as identificações do sistema de um usuário especificado.saídas:
uid=0(root) gid=0(root) grupy=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
Exibir um nome em vez de um UID/GID
Por padrão, o comando id exibe o número das opções -G, -g e -u. Você pode forçar o comando id a exibir o nome do UID ou GID em vez do número das opções -G, -g e -u passando a opção -n da seguinte maneira:
id -ng {UserNameHere} id -nu {UserNameHere} id -nG {UserNameHere} id -nG vivek
leia mais sobre
id
:https://www.cyberciti.biz/faq/unix-linux-id-command-examples-usage-syntax/O crédito vai para:Brett(solução),Casa de turismo rural Vivek(informações profundas)
uma pequena dica em caso de problemas(Crédito para:Paulo):https://superuser.com/a/343163/1169381
Responder3
se você não quiser passar o argumento para o script, você pode tentar isto
#!/bin/bash
pass=123456
echo $pass
echo $pass | smbpasswd -s -a $(who am i | awk '{print $1}')
e então invoque o script.
Responder4
Estou criando o nome do arquivo smb.sh, conteúdo 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
e você pode enviar parâmetros para smb.sh assim
./smb.sh myusername mypassword
simples, você pode usar o arquivo smb.sh com a linguagem PHP, usar a função PHP exec