Sambaクライアントに報告されたUID(およびGID)を再マップできますか?オプションがあるように見えますが、idmap
私がやろうとしている単純な再マッピングと比較して複雑すぎるように見え、これが正しいアプローチであるかどうか混乱しています。
両方のマシンAとBを考えてみましょう。マシンAにはsmbuser
UIDを持つユーザーがいます701
。マシンBにはroot
UIDを持つユーザーが1人だけです0
。
smb.conf
機械Aからの抜粋:
[share1]
path = /tmp/share1
valid users = smbuser
マシンBから:
mount -t cifs -o username=smbuser,pass=**** //10.1.1.11/share1 /mnt
ls -l /mnt
わかります:
drwx------ 701 701 0 Jan 1 00:00 .
drwx------ root root 0 Jan 1 00:00 ..
-rw------- 701 701 42 Jan 1 00:00 testfile
私の考えでは:
drwx------ root root 0 Jan 1 00:00 .
drwx------ root root 0 Jan 1 00:00 ..
-rw------- root root 42 Jan 1 00:00 testfile
701 -> 0
重要な要約:クライアントにディレクトリリストを提供するときにUIDを再マッピングするには、Sambaが必要です。
答え1
uid
forceuid
とgid
マウントオプションの組み合わせが必要ですforcegid
。これにより、特定のUIDとGIDを割り当てて、SMBクライアントに常にこれらのファイルを所有するように指示できます。また、このためにSMBサーバー構成を変更する必要はありません。
cifs.mount
マンページを参照してください。https://linux.die.net/man/8/mount.cifs:
uid=arg
サーバーが所有権情報を提供しない場合、インストールプログラムはマウントされたファイルシステム内のすべてのファイルまたはディレクトリのuidを所有します。ユーザー名または数値 uid で指定できます。指定しない場合、デフォルトは uid 0 です。数値以外の形式でuid指定をサポートするには、mount.cifsヘルパーがバージョン1.10以降である必要があります。詳細については、以下のファイルとディレクトリの所有権と権限に関するセクションを参照してください。
forceuid
ファイルとディレクトリに対してサーバーによって提供されたすべてのuidを無視し、常にuid =オプションの値で所有者を指定するようにクライアントに指示します。詳細については、以下のファイルとディレクトリの所有権と権限に関するセクションを参照してください。
gid=arg
サーバーが所有権情報を提供しない場合、インストールプログラムはマウントされたファイルシステム内のすべてのファイルまたはディレクトリのgidを所有します。グループ名または数値 gid で指定できます。指定しない場合、デフォルトは gid 0 です。数値ではなく gid 仕様をサポートするには、mount.cifs ヘルパーがバージョン 1.10 以降である必要があります。詳細については、以下のファイルとディレクトリの所有権と権限に関するセクションを参照してください。
forcegid
ファイルとディレクトリに対してサーバーによって提供されたすべてのgidを無視し、常に所有者をgid =オプションの値として指定するようにクライアントに指示します。詳細については、以下のファイルとディレクトリの所有権と権限に関するセクションを参照してください。
場合によっては、次を使用できます(UID / GIDを指定しない場合はデフォルト値0が使用されます)。
mount -t cifs -o username=smbuser,pass=****,uid,forceuid,gid,forcegid //10.1.1.11/share1 /mnt
dynperm
また、あなたに役立つ可能性のあるオプションも確認してください。
参考までに、「ファイルとディレクトリの所有権と権限」セクションは次のとおりです。
ファイルとディレクトリの所有権と権限
コアCIFSプロトコルは、ファイルとディレクトリのUNIX所有権情報またはモードを提供しません。したがって、ファイルとディレクトリは通常、uid =またはgid =オプションで設定された値が所有しているように見え、インストールのデフォルトのfile_modeおよびdir_modeに設定された権限を持ちます。 chmod / chownを介してこれらの値を変更しようとすると成功を返しますが、効果はありません。
クライアントとサーバーがUnix拡張子をネゴシエートすると、ファイルとディレクトリにはサーバーによって提供されるuid、gid、およびモードが割り当てられます。 CIFS マウントは通常単一ユーザーであり、どのユーザーがマウントにアクセスするかにかかわらず同じ資格情報が使用されるため、新しく作成されたファイルとディレクトリには、共有のマウントに使用される資格情報に対応する所有権が通常付与されます。 。
クライアントとサーバーで使用されているuidとgidが一致しない場合は、forceuidオプションとforcegidオプションが役に立ちます。ただし、このモードをオーバーライドする適切なオプションがないことに注意してください。 forceuidまたはforcegidが適用されたときにファイルに割り当てられた権限は、実際の権限を反映しない可能性があります。
Unix拡張がネゴシエートされない場合は、「dynperm」インストールオプションを使用してサーバー上でローカルにエミュレートすることもできます。このインストールオプションが適用されると、新しく作成されたファイルとディレクトリに見かけに適切な権限が付与されます。ただし、これらの権限はサーバーに保存されず、将来いつでも消える可能性があります(カーネルがinodeキャッシュをフラッシュする場合)。通常、このインストールオプションは使用しないことをお勧めします。
noperm オプションを使用すると、クライアントの権限確認を完全に無視することもできます。サーバー側の権限確認は上書きできません。サーバーが実行する権限の確認は、必ず共有のマウントに使用された資格情報と一致し、必ずしも共有にアクセスするユーザーと一致するわけではありません。