ローカルネットワークにのみ共有を提供するSamba(バージョン4.15.13-Ubuntu)を実行するシンプルなホームUbuntuサーバーがあります。目的は、Unixユーザーを "sambashare"グループに割り当て、SambaユーザーがゲストアクセスではなくこのUnixグループのメンバーである場合にのみ共有へのアクセスを許可することです。さらに、ユーザーはセッション中にUnixグループ「sambashare」に強制的に参加する必要があり、すべてのファイル/ディレクトリがそのグループの所有者として保持されるため、すべての「sambashare」ユーザーが読み書きできます。
smb構成ファイル
[global]
server string = Samba
client min protocol = SMB3
server min protocol = SMB2
security = user
max log size = 1000
smb ports = 445
log level = 3
server role = standalone server
map to guest = bad user
; options to allow iOS devices
fruit:delete_empty_adfiles = yes
fruit:veto_appledouble = no
fruit:posix_rename = yes
fruit:wipe_intentionally_left_blank_rfork = yes
vfs objects = fruit streams_xattr
fruit:model = MacSamba
fruit:nfs_aces = no
fruit:metadata = stream
[%h]
path = /samba/share
valid users = @sambashare
browseable = yes
writeable = yes
public = no
force group = +sambashare
create mask = 660
force create mode = 660
directory mask = 770
force directory mode = 770
共有ディレクトリに対する権限は using chgrp -R sambashare share
and に設定され、chmod -R 770 /samba/share
ディレクトリとその中のすべてのエントリが正しいグループを継承します。
ls -l /サンバ
drwxrws--- 3 root sambashare 4096 May 25 14:48 share
私のユーザーalexが存在し、「sambashare」グループに正しく割り当てられています。 SSH経由でサーバーにアクセスできますが、問題ありません。smbpasswd -a alex
Assign Passwordを実行し、smbpasswd -e alex
Sambaでユーザーを有効にしました。
私はアレックスです
uid=1000(alex) gid=1000(alex) groups=1000(alex),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),123(sambashare)
ただし、他のデバイスから共有にアクセスすると、ディレクトリにアクセスする権限がないというエラーメッセージが表示されます。これは、私のユーザー名やパスワードが間違っているという意味ではなく、認証後に権限がないことを意味します。 /var/log/samba/log.smbdにログインすると、識別されたユーザーが "sambashare"グループに属していないことを示します。
/var/log/samba/log.smbd
mobile (ipv4:192.168.64.109:56107) connect to service %h initially as user alex (uid=1000, gid=1000) (pid 282287)
[2023/05/25 15:03:24.162311, 0] ../../source3/smbd/service.c:168(chdir_current_service)
chdir_current_service: vfs_ChDir(/samba/share) failed: Permission denied. Current token: uid=1000, gid=1000, 7 groups: 1000 4 24 27 30 46 110
[2023/05/25 15:03:24.162376, 3] ../../source3/smbd/smb2_server.c:3954(smbd_smb2_request_error_ex)
smbd_smb2_request_error_ex: smbd_smb2_request_error_ex: idx[1] status[NT_STATUS_ACCESS_DENIED] || at ../../source3/smbd/smb2_server.c:3246
明らかに、正しいユーザーはuid、gid、および他のグループとして識別されていましたが、ログにはグループ123 "sambashare"アクセスが表示されていないため、共有ディレクトリに変更しようとしました。
ディレクトリ権限を777に変更すると、同じユーザーがファイル/ディレクトリを参照して作成できます。これらのすべてのファイル/ディレクトリは、「sambashare」グループを正しく継承し、共有にアクセスする他のユーザーに表示されます。ただし、この共有へのゲストアクセスを許可したくありません。このプライベートグループのメンバーであるユーザーにのみアクセス、読み取り、または書き込みを許可する必要があります。また、UnixユーザーとSambaユーザー(smbpasswd)以外のユーザーを使用してユーザーを管理したくありません。
認証中に正確なグループ情報が不足する原因を理解するのに役立つ人はいますか?それとも構成に別のミスがありましたか?
ありがとう
答え1
共有に制限を設定するには、明示的に設定することをお勧めします。私は共有に固定名を使用します(あなたは本物サーバー名と動的に一致させるのが良い理由です。また、バリアントを使用する代わりに直接グループ名を使用するように強制します+
。
[sharename]
path = /samba/share
valid users = @sambashare
browseable = yes
writeable = yes
public = no
force group = sambashare
create mask = 660
force create mode = 660
directory mask = 770
force directory mode = 770
/samba/share
理想的には、グループ書き込みアクセスと/samba
グループ読み取りアクセスに設定することをお勧めします。
chgrp root:sambashare /samba /samba/share
chmod g=rx /samba
chmod g=rwx /samba/share
所有者/samba/share
もグループの一部である場合は、グループsambashare
権限と一致するように所有者権限を設定する必要があります。 (これは{所有者、グループ、その他}権限セットが相互に排他的であるためです。
これらの変更を行った後は、Sambaサービスを再起動する必要があり、新しい設定で再起動できるように、未処理の子プロセスをすべて終了する必要があります。[global]
この問題を解決するのに役立つレベルオプションはですdeadtime = 10
。
私のサーバーにはごみ箱とCatiaも設定されています。[global]
構成定義レベルで:
# Recycle settings, where enabled with "vfs objects = recycle"
recycle:repository = $Recycle.Bin
recycle:keeptree = yes
recycle:versions = yes
recycle:touch = yes
recycle:mtime = no
hide files = $Recycle.Bin/.recycle
# Mapping illegal characters, where enabled with "vfs objects = catia"
mangled names = no
catia:mappings = 0x22:0xa8,0x2a:0xa4,0x2f:0xf8,0x3a:0xf7,0x3c:0xab,0x3e:0xbb,0x3f:0xbf,0x5c:0xff,0x7c:0xa6
[share]
その後、アクティブにしたい各場所について
vfs objects = recycle catia
答え2
同じ問題が発生し、根本的な原因が見つかりませんでしたが、解決策が見つかりました。
既存のグループの名前変更(すべてrootとして実行されます):
groupmod -n cursedgroup sambashare
名前は同じですが、新しいグループIDを使用して新しいグループを作成します。
groupadd sambashare
古いグループのメンバーを新しいグループにコピーします。
for user in $(members cursedgroup); do usermod -A sambashare "$user"; done
その後、Sambaを再起動してSambaログを再確認し(デバッグレベル10)、新しいグループがセカンダリグループとして表示されることを確認しました。
それからあなたが持っているすべてのファイルを修正し、cursedgroup
次のように変更する必要がありましたsambashare
。
find / -group cursedgroup -exec chgrp -h sambashare {} \;
注:
この特定のgidがSambaによってフィルタリングされる理由がわからないので、これは非常に不満足な解決策です。わかりましたら名前ではなくGIDでした。私の特定のシステムではgid 107ですが、それは特別だとは思いません。私のSambaデータベースに私が見つけることができないものがあるようです。あなたとは異なり、sambashare
私のものにはまったく表示されませんsmb.conf
。また、Sambaデータベースを確認しましたが、/var/lib/samba
グループIDへの参照が見つかりませんでした。