
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
テスト.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"
移動する:
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オプションを使用すると、\ tで表される水平タブなどの他の特殊文字や改行文字の他のインスタンスに対するechoの解釈が可能になります。
パイプ記号「|」
Unixシリーズコンピュータオペレーティングシステムでは、パイプはメッセージ配信を使用するプロセス間通信のためのメカニズムです。
https://en.wikipedia.org/wiki/Pipeline_(Unix)
https://superuser.com/questions/756158/what-does-the-linux-pipe-symbol-do
クレジットは次のとおりです。ローレンスC、ウィキペディア
smbpasswd-s
-sオプションを使用すると、smbpasswdは自動的に実行され(つまり、プロンプトを表示しない)(passwd(1)プログラムと同様)、/ dev / ttyから読み取るのではなく、標準入力から古いパスワードと新しいパスワードを読み込みます。このオプションは、人々がsmbpasswdを駆動するスクリプトを書くのに役立ちます。
イドウン
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 オプションを次のように渡して、-G、-g、および -u オプションを使用して、id コマンドに数値の代わりに 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関数を使用できます。