Samba共有の認証

Samba共有の認証

私はUbuntu Linuxを実行しているいくつかのコンピュータを使用する傾向があります。コンソールユーザーを認証する中央サービスが必要です。すべてのユーザーファイル(ホームディレクトリ)は1つの場所になければなりません。 NFS、LDAP、Kerberos、またはMicrosoft Active Directoryを介して共有ファイルサーバーをエクスポートすることを含む(これに限定されない)、これには合理的なソリューションがたくさんあることがわかります。しかし、予算の削減のため、これらのいずれも得られませんでした。私が持っている唯一のものはSamba共有を持つファイルサーバーです。単一の共有では、各ユーザーには自分だけが書き込むことができるターゲットディレクトリがあります。 Samba共有に対してコンソールユーザーを認証できますか?

答え1

ガイドライン

ここにはいくつかの部分があります。

  1. 認証自体(「このユーザーはこのコンピュータを使用できますか?」)
  2. アカウントデータには、ユーザー情報、IDマッピング、グループメンバーシップなどが含まれます(データなどgetent passwd)。

確認する

Samba共有の資格情報(ユーザーとパスワード)を確認するのは比較的簡単です。あなたはそれを使用することができますsmbclient

smbclient --user="$PAM_USER" --password="$password" --directory "$PAM_USER" --command="quit" "\\\\fileserver.example.com\\homes"

このコマンドは、資格情報が正しい場合は成功し、サーバーが資格情報を拒否すると失敗します。あなたはそれを使用することができますpam_exec。 pam_execについては、この回答の最後にある完全な例を参照してください$PAM_USER$passwordこれ質問の意図も似ています。

PAMに追加承認するステップは認証を処理しますが、ログイン操作はそれ自体では行われません。

アカウント

実際にシステムを使用するには、システムがユーザーを知っている必要があります。これはネームサービススイッチ(nss)によって処理されます。しかし、私はサンバ関連のモジュールを知りません。さらに、実際には必要ありません。ユーザーが提供した資格情報がSambaサーバーによって確認されていることが既にわかっているので、簡単にローカルユーザーを動的に作成し、同じパスワードを提供できます。また、sambahome一般のローカルユーザー(ルートなど)とホームページが共有内のユーザーを簡単に区別できるように、ユーザーを特別なグループに追加したいと思います。

adduser "$PAM_USER" --quiet --gecos "" --home "/home/$PAM_USER" --no-create-home --add_extra_groups --disabled-password &&
echo "$PAM_USER:$passwd" | chpasswd &&
adduser "$PAM_USER" "sambahome"

保存

ユーザーのホームディレクトリはSamba共有にあるため、次のものを使用できます。pam_mount共有はログイン中に自動的にマウントされます。

実装する

確認する

これが私のデフォルトで、数行に/etc/pam.d/common-auth拡張されます。

auth    [success=3 default=ignore]  pam_unix.so nullok
auth    optional    pam_exec.so expose_authtok /usr/local/sbin/pam-addsmbuser
auth    [success=1 default=ignore]  pam_unix.so nullok
auth    requisite           pam_deny.so
auth    required            pam_permit.so

auth    [success=ok default=1] pam_succeed_if.so quiet_fail user ingroup sambahome
auth    optional    pam_mount.so 

最初の行(含むpam_unix)はローカルユーザーの資格情報を確認します。
成功すると、次の3行をスキップしてpam_permit適用されます。
ローカルユーザーがいない場合は、2 行目を検討してください。これpam_execにより、pam-addsmbuser新しいローカルユーザーが作成されます。次に、pam_unixもう一度クエリします(3行目)。

どちらの場合もpam_mount実行されますが、ユーザーのホームディレクトリが実際にSamba共有にある場合にのみ実行されます。これを保護するpam_succeed_ifことはオプションですが、認証ログをきれいに保ちます。

アカウント

全体的に/usr/local/sbin/pam-addsmbuser次のようになります。

#!/bin/sh
read password
if smbclient --workgroup="AD.FH-WEDEL.DE" --user="$PAM_USER" --password="$password" --directory "$PAM_USER" --command="quit" "\\\\fs1.ad.fh-wedel.de\\tux-homes"
then
    adduser --disabled-password --gecos "" --home "/home/ad/$PAM_USER" --no-create-home --quiet --add_extra_groups "$PAM_USER" &&
    echo "$PAM_USER:$password" | chpasswd &&
    adduser "$PAM_USER" "sambahome"
fi

これは$PAM_USER環境変数であり、$password標準入力から読み取られます。

保存

関連ライン/etc/security/pam_mount.conf.xml

<volume fstype="cifs" server="fileserver.example.com" path="homes/%(USER)" mountpoint="/home/%(USER)" options="uid=%(USER),gid=%(USERGID),dir_mode=0700,file_mode=0700,nosuid,nodev,mfsymlinks" />
<mkmountpoint enable="1" remove="true" />

必要に応じて最後のオプションを調整する必要があります。私はこれについていくつかの感情を持っていますmfsymlinks

会議

作業するには、次のpam_mount地域にもいる必要があります/etc/pam.d/common-session

session [success=ok default=1] pam_succeed_if.so quiet_fail user ingroup sambahome
session optional    pam_mount.so

結果

私は数ヶ月間この設定を使用してきました。これまでは十分信頼できるようです。

ガイドライン

私が知っている限り、資格情報を確認するこの方法は、ユーザー名とパスワードでのみ機能します。 SSHによる公開鍵認証などのパスワードのない方法は機能しない可能性があります。私は確認しませんでした。

システムはパスワード変更を正しく処理しません。ローカルパスワードを変更すると認証は成功しますpam_unixが、Sambaサーバーはパスワードを拒否してpam_mount失敗します。サーバー側のパスワードを変更すると同様の問題が発生します。この問題は、より複雑なスクリプトを使用して解決できます。

ローカル UID はシステムでは同じではありません。しかし、私はこれに問題がないと思います。

関連情報