こんにちは、質問があるのですが、適切な回答が見つからないようです。状況としては、Samba サーバーを設定し、Windows マシンからファイルとフォルダーを作成しようとしているところです。すべて期待どおりに動作しますが、Samba がファイル上のグループとその他から x ビットを削除するという小さな問題があります。簡単なサンプル コード:
drwx--x--x. 4 root root 4096 Dec 13 20:01 smb
drwxrwx--x. 2 root amikon 4096 Dec 15 22:17 pokus
[pokus]
path = /smb/pokus
public = no
writable = yes
valid users = @amikon
[root@wserver pokus]# ls -l
drwxr-xr-x. 2 vanek amikon 4096 Dec 21 10:14 dir
-rwxr--r--. 1 vanek amikon 0 Dec 21 10:14 file.txt
私が行った多くの実験から、Windows からエントリ (ファイルまたはディレクトリ) を作成するときに、Samba は Windows マシンからのデフォルトのマスクと権限から論理 AND を実行するということがわかりました。この動作は、作成マスクと強制作成モード (およびディレクトリ用の他のセット) を使用することで多少影響が出る可能性があります。問題なく期待どおりに動作します。
0011 が欠落するという問題は、create mask 755 を使用しても解決しないことがわかりました。x ビットはファイルから削除されたままです。唯一のオプションは、force create mode 755 を使用することです。その後は、OR が追加するため、ビットはそのまま残ります。
他のマスク作成オプションをテストしましたが、ファイルから 0011 が毎回削除されるようです。755、777、333... つまり、グループから x を削除し、所有者以外のユーザーがスクリプトを実行できないようにする何らかの保護メカニズムのようです。
しかし、私の質問はまさに上記の例についてです。なぜ結果は d755 なのに -744 になるのでしょうか。0011 を失う魔法はどこで起こったのでしょうか。
ヒントがあればよろしくお願いします。
答え1
0011 が失われるという魔法は、それが Samba のデフォルトの動作であるために発生します。
ドキュメントからの抜粋:
マスクの作成: このパラメータのデフォルト値は、UNIXモードからグループおよびその他の書き込みおよび実行ビットを削除します。
デフォルト: 作成マスク = 0744
リンクはこちらです:http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html
検索するcreate mask (S)
このドキュメントでは、Samba チームがこのデフォルトの動作を実装することを選択した理由については説明していませんが、私にとっては、セキュリティ メカニズムについて考えるのは簡単です (あなたが述べたように)。
ディレクティブを使用して、新しいファイルに親フォルダーのアクセス許可を継承させることができますinherit permissions = yes
が、これは x ビットには影響しません。したがって、あなたの場合、これは次のようにレンダリングされます。
-rwxrw-r--. 1 vanek amikon 0 Dec 21 10:14 file.txt
また、おっしゃるとおり、この動作を変更するには、独自のマスクを明示的に定義する必要があります。さて、「作成」と「強制作成」の主な違いは次のとおりです。
create mask
権限を削除します(ANDマスク)force create mode
その後に追加します(ORマスク)
また、create mask
グループやその他の x ビットを処理することもできません。
したがって、何らかの目標を達成するには、両方の指令に対処する必要がある場合があります。
いくつかのサンプルを試してみましょう:
1) グループとその他に x ビットのみが必要な場合は、次のように組み合わせる必要があります。
create mask = 0700 #Remove r bit from group and others
force create mode = 0711 #Add x bit only to group and others
結果 : -rwx--x--x 1 kris kris 0 Dec 21 14:20 file.txt
2) グループやその他のために r ビットと x ビットが必要な場合は、create mask
ディレクティブを削除し (デフォルトはすでに 0744 であるため)、以下を追加します。
;create mask = 0700 #remove r bit from group and others (commented)
force create mode = 0711 #Add x bit only to group and others
結果 : -rwxr-xr-x 1 kris kris 0 Dec 21 14:17 file.txt
等々...
Samba の動作を理解するのに少しでも役立つことを願っています。