
シェル スクリプトを使用して共有ディレクトリを設定するためのパスワードを設定したいと思いますsamba
。次のスクリプトを作成しましたtest.sh
。
#!/bin/bash
pass=123456
(echo "$pass"; echo "$pass") | smbpasswd -s -a $(whoami)
次のように出力されます。
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
指摘されているように、私はこれを root として実行していませんでしたが、これを root として実行すると、つまり は正常に動作します。ただし、問題は、ログインしているユーザーであるの代わりにsudo ./test.sh
が追加されることです。root
noobuser
同様のことをして追加するにはどうすればいいでしょうかnoobuser
(ここで何かが欠けているような気がします)?
答え1
テスト:
#!/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"
呼び出し:
sudo ./test.sh
答え2
これは、bash スクリプトを使用して自動化する方法の一部ですsmbpasswd -a
が、うまく機能します。
username="bob"
pass="secret"
echo -e "$pass\n$pass" | smbpasswd -a -s $username
これは拡張されており、現在のユーザー名を挿入します。(awk を使用しない場合は短くてきれいです)
pass="secret"
echo -e "$pass\n$pass" | smbpasswd -a -s $(id -un)
。
詳細は以下をご覧ください:
。
エコー -e
-e オプションは、echo による改行文字の追加インスタンスの解釈と、\t で表される水平タブなどの他の特殊文字の解釈を有効にするために使用されます。
パイプ記号「|」
Unix 系コンピュータ オペレーティング システムでは、パイプラインはメッセージ パッシングを使用したプロセス間通信のメカニズムです。
https://en.wikipedia.org/wiki/パイプライン_(Unix)
https://superuser.com/questions/756158/linux パイプシンボルの機能
クレジット:ローレンスC、ウィキペディア
smbpasswd -s
-s オプションを指定すると、smbpasswd はサイレント状態 (つまりプロンプトを出さない) になり、古いパスワードと新しいパスワードを標準入力から読み取ります (passwd(1) プログラムのように /dev/tty から読み取るのではなく)。このオプションは、smbpasswd を動作させるスクリプトを作成するユーザーを支援するためのものです。
id -u -n
id
指定されたユーザーのシステム ID を表示します。出力:
uid=0(root) gid=0(root) grupy=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
UID/GIDの代わりに名前を表示する
デフォルトでは、id コマンドは -G、-g、および -u オプションの番号を表示します。次のように -n オプションを渡すと、id コマンドに -G、-g、および -u オプションの番号ではなく UID または GID の名前を表示させることができます。
id -ng {UserNameHere} id -nu {UserNameHere} id -nG {UserNameHere} id -nG vivek
詳細はこちら
id
:https://www.cyberciti.biz/faq/unix-linux-id-command-examples-usage-syntax/クレジット:ブレット(解決)、ヴィヴェック ジット(詳しい情報)
問題が発生した場合のちょっとしたヒント(出典:ポール):https://superuser.com/a/343163/1169381
答え3
スクリプトに引数を渡したくない場合は、これを試してみてください
#!/bin/bash
pass=123456
echo $pass
echo $pass | smbpasswd -s -a $(who am i | awk '{print $1}')
スクリプトを呼び出します。
答え4
smb.shというファイル名を作成します。内容は次のようになります。
#!/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
そして、次のようにsmb.shにパラメータを送信できます。
./smb.sh myusername mypassword
シンプルに言えば、PHP言語でsmb.shファイルを使うことができ、PHP exec関数を使うことができる。