
Ich möchte ein Passwort für die Einrichtung eines samba
freigegebenen Verzeichnisses mithilfe eines Shell-Skripts festlegen. Ich habe das folgende Skript geschrieben test.sh
:
#!/bin/bash
pass=123456
(echo "$pass"; echo "$pass") | smbpasswd -s -a $(whoami)
Dies gibt Folgendes aus:
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
Wie es zeigt, habe ich es nicht als Root ausgeführt. Wenn ich es als Root ausführe, also , sudo ./test.sh
läuft es einwandfrei. Aber der Haken ist, dass es root
anstelle von hinzufügt noobuser
, was mein angemeldeter Benutzer ist.
Wie kann ich etwas hinzufügen, noobuser
indem ich etwas Ähnliches mache (ich habe das Gefühl, dass ich hier etwas übersehe)?
Antwort1
test.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"
Aufruf:
sudo ./test.sh
Antwort2
Dies ist ein Ausschnitt meiner Automatisierung smbpasswd -a
per Bash-Skript, funktioniert wunderbar.
username="bob"
pass="secret"
echo -e "$pass\n$pass" | smbpasswd -a -s $username
Dieses ist erweitert und fügt den aktuellen Benutzernamen für Sie ein. (ohne awk ist es kürzer und übersichtlicher)
pass="secret"
echo -e "$pass\n$pass" | smbpasswd -a -s $(id -un)
.
Weitere Einzelheiten finden Sie unten:
.
echo -e
Mit der Option -e können Sie die Interpretation zusätzlicher Instanzen des Zeilenumbruchzeichens durch Echo sowie die Interpretation anderer Sonderzeichen aktivieren, beispielsweise eines horizontalen Tabulators, der durch \t dargestellt wird.
Pipe-Symbol „|“
In Unix-ähnlichen Computerbetriebssystemen ist eine Pipeline ein Mechanismus zur Interprozesskommunikation mittels Nachrichtenübermittlung.
https://en.wikipedia.org/wiki/Pipeline_(Unix)
https://superuser.com/questions/756158/was-macht-das-linux-pipe-symbol
Der Kredit geht an:LawrenceC, Wikipedia
smbpasswd -s
Die Option -s bewirkt, dass smbpasswd still ist (d. h. keine Eingabeaufforderungen ausgibt) und seine alten und neuen Passwörter von der Standardeingabe liest, anstatt von /dev/tty (wie das Programm passwd(1) tut). Diese Option soll Leuten helfen, die Skripte für smbpasswd schreiben.
Ich würde -u -n
id
zeigt die Systemidentifikationen eines angegebenen Benutzers an.Ausgänge:
uid=0(root) gid=0(root) grupy=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
Einen Namen anstelle einer UID/GID anzeigen
Standardmäßig zeigt der Befehl id die Nummer für die Optionen -G, -g und -u an. Sie können den Befehl id zwingen, den Namen der UID oder GID anstelle der Nummer für die Optionen -G, -g und -u anzuzeigen, indem Sie die Option -n wie folgt übergeben:
id -ng {UserNameHere} id -nu {UserNameHere} id -nG {UserNameHere} id -nG vivek
Lesen Sie mehr über
id
:https://www.cyberciti.biz/faq/unix-linux-id-command-examples-usage-syntax/Der Kredit geht an:Brett(Lösung),Vivek-Ferienhaus(ausführliche Informationen)
ein kleiner Hinweis für den Fall von Problemen(Kredit an:Paul):https://superuser.com/a/343163/1169381
Antwort3
Wenn Sie dem Skript kein Argument übergeben möchten, können Sie Folgendes versuchen
#!/bin/bash
pass=123456
echo $pass
echo $pass | smbpasswd -s -a $(who am i | awk '{print $1}')
und rufen Sie dann das Skript auf.
Antwort4
Ich erstelle die Datei mit dem Namen smb.sh und dem Inhalt wie folgt
#!/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
und Sie können Parameter an smb.sh wie folgt senden
./smb.sh myusername mypassword
wie einfach, Sie können die Datei smb.sh mit der PHP-Sprache verwenden, verwenden Sie die PHP-Exec-Funktion