エコ-e

エコ-e

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

以下の詳細をご覧くださいidhttps://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関数を使用できます。

関連情報