ユーザーが特定のユーザーグループのフォルダーを含む共有に接続する単純なSambaサーバーセットアップを実行しています。フォルダはchmod 2770
なので、正しいグループに属するユーザーのみが読み取り/書き込みを行うことができます。
問題は、グループメンバーシップを変更した場合(つまり、ユーザーをグループから削除したり、ユーザーをグループに追加したり、変更はクライアントとサーバー間で同期されている場合)、sambaはユーザーのグループメンバーシップを自動的に再読み込みしないため、グループに書き込むことができることです。変更を適用するには、共有に再接続するか、sambaを再起動する必要があります。
Sambaでグループキャッシュを防止したり、グループメンバーシップのリロードを有効にしたりする方法はありますか?
私のsmb.conf:
[global]
interfaces = ethlan
bind interfaces only = yes
smb ports = 445
workgroup = WORKGROUP
security = user
passdb backend = tdbsam:/var/lib/mysamba/samba.tdb
disable netbios = yes
nt acl support = no
invalid users = root
read only = no
case sensitive = yes
load printers = no
unix extensions = yes
log file = /var/log/samba.log
log level = 1
syslog = 0
use sendfile = yes
[groups]
path = /home/groups
browseable = yes
force create mode = 0770
force directory mode = 2770
hide unreadable = yes
Sambaサービス全体を再起動する代わりに、シグナルSIGHUP
を送信するだけで、構成ファイルを強制的に再ロードできるはずです。
構成ファイルとそれに含まれるファイルは、変更された場合、毎分自動的に再ロードされます。 SIGHUPをサーバーに送信することで、強制的にリロードできます。構成ファイルを再ロードしても、すでに確立されているサービスへの接続には影響しません。ユーザーがサービスから切断するか、smbdを強制終了して再起動する必要があります。
最後の2つの文は重要です:現在の接続はこれの影響を受けません。
ユーザーの接続を処理する方法は、状況によって大きく異なる場合があります。
接続を積極的に使用している場合は、変更を有効にするためにコンピューターを再起動するように指示する方が簡単な場合があります。そうすれば、彼らが何かの真っ只中にいる場合、彼らは彼らの暇なときにそれをすることができます。
個々のユーザーの場合、接続プロセスを強制終了できます(SIGHUP
は機能する可能性がありますが、現時点ではわかりません)。ただし、接続が切断されるため、共有で開いている可能性のあるものをすべて保存および/または閉じるようにすることができます。共有に再度アクセスすると、新しいアクセスで新しい接続が生成されます。 smbstatus
を使用して、現在の接続に関する情報を見つけることができます。
Sambaを再起動します。これはかなり抜本的なアプローチですが、特定の状況で必要になる場合があります。これにより、現在のすべての接続が強制終了され、新しい接続が確立されます。
待ってください。特定の時間に変更が必要ない場合は、クライアントに自分で接続を再確立させることができます。
私も同じ問題を抱えていると思います。私の場合、グループメンバーシップはsambaセッションプロセスごとにキャッシュされますsmbstatus -p
。
このスクリプトを使用して、プロセスを強制終了し、メンバーシップ情報を「更新」します。
#/bin/sh
VICTIM="$1"
[ -z "$VICTIM" ] && exit 1
if [ "$VICTIM" = "!" ]; then
L="$(smbstatus -p 2>/dev/null)"
else
L="$(smbstatus -p -u "${VICTIM}" 2>/dev/null)"
fi
echo "$L" | while read PID USER GROUP CLIENT IP; do
getent passwd "$USER" >/dev/null || continue
kill "$PID" 2>/dev/null
echo -n .
done
echo " done!"
Windowsは自動的にsambaに再接続するため、問題はありません。ユーザーは、次の呼び出しまでに最小限の遅延しかありません。 ただし:すべてのアクティブなファイル転送がキャンセルされ、ユーザーにI/Oエラーがスローされます。
私はこれをバッチファイルとcronジョブで自動化しました。このようにして、ユーザーはダブルクリック(およびI/Oエラーの問題について読む)を介して自分のセッションを強制終了できます。