Sambaパスワードは保護されていますが、安全なスクリプトを書く

Sambaパスワードは保護されていますが、安全なスクリプトを書く

Sambaユーザーとパスワードに追加のスクリプトを作成したいです。

私はhereに似た解決策を見ました。

パスワードをsmbpasswdにパイプ

echo -ne "$PASS\n$PASS\n" | smbpasswd -a -s $LOGIN

ただし、パスワードはスクリプトを表示するすべての人に表示されます。ハッシュをどのように使用し、パスワードとして使用できますか?

答え1

smb.confでpassdb backend = tdbsam設定したシステムの暗号化されたパスワードでファイルをエクスポートできる場合は、次のようにします。

sudo pdbedit -e smbpasswd:/tmp/smbpasswd

/tmp/smbpasswdこれにより、ユーザー名とハッシュを含むファイルが作成されます。興味のないユーザーを含む行を簡単に表示および削除できるテキストファイル。

次のコマンドを使用してユーザーを再インポートできます。

sudo pdbedit -i smbpasswd:/tmp/smbpasswd -e tdbsam:/var/lib/samba/private/passdb.tdb

のユーザーは/tmp/smbpasswdSambaユーザーデータベースに追加されるか、すでに存在する場合は上書きされます。

/var/lib/samba/private/passdb.tdbUbuntuのSambaユーザーデータベースファイルの場所。

答え2

スクリプトにパスワードへのアクセス権が必要です。パスワードのハッシュは使用できません。使用する場合、ハッシュはいパスワードは、ハッシュがある人なら誰でもログインできることを意味します。

パスワードを別のファイルに入れてスクリプトから読む必要があります。パスワードを正確に再現するように注意してください(例:echo -e "$PASS"バックスラッシュエスケープを解釈するため、使用しないでください)。

IFS= read -r password </somewhere/private/file.password
printf '%s\n%s\n' "$password" "$password" | smbpasswd -a -s "$LOGIN"

または

IFS= read -r password </somewhere/private/file.password
smbpasswd -a -s "$LOGIN" <<EOF
$password
$password
EOF

外部コマンドに渡された引数は、コマンドの実行中に他のプロセスに表示される可能性があるため、printfシェルの外部コマンドの場合は、最初の回避策を使用しないでください。現在、ほとんどのシェルにはこの機能がprintf組み込まれています。typeコマンドを使用して確認するか、ここでドキュメントを確認してください。

パスワードを含むファイルは、スクリプトを実行する必要があるユーザーだけが読み取ることができることを確認してください。もちろん、そのユーザーとして実行されるすべてのコマンドはスクリプトを読み取ることができます。望ましくない場合は、別のユーザーとしてスクリプトを実行する必要があります(または別の分離メカニズムを使用しますが、別のユーザーを設定するのが最も簡単です)。 。

関連情報