私はDebian Jessieを新しくインストールしてこれをテストしましたが、他のコンピュータでもこの問題がありました(例:Ubuntu 12.04)。基本設置以外に、、sudo
もsamba
設置してみましたcifs-utils
。
デフォルトのACLを使用する共有ディレクトリ
ルートファイルシステムでACLを有効にして共有ディレクトリを作成しました。
sudo mount -o remount,acl /
mkdir -p /home/ryan/shared
setfacl -d -m u:ryan:rwx /home/ryan/shared
サンバ構成
すべてのデフォルト値を維持し、/etc/samba/smb.conf
共有を追加しました。
[shared]
comment =
path = /home/ryan/shared
writable = yes
valid users = ryan
Sambaユーザーを追加
その後、自分をSambaユーザーとして追加し、サービスを再起動しました。
sudo smbpasswd -a ryan
sudo systemctl restart smbd
Linuxクライアント
次に、Samba共有用のマウントポイントを作成し、それをマウントして空のテキストファイルを作成しました。
mkdir -p /home/ryan/mnt/shared
sudo mount -t cifs -o user=ryan //127.0.0.1/shared /home/ryan/mnt/shared
touch /home/ryan/mnt/shared/linux.txt
Windowsクライアント
また、Windows 8コンピュータから接続してwindows.txt
。
共有ディレクトリのリスト
以降のディレクトリのリストは/home/ryan/shared
次のとおりです。
-rw-r--r--+ 1 ryan ryan 0 Jun 20 23:45 linux.txt
-rwxrwxr--+ 1 ryan ryan 0 Jun 20 23:46 windows.txt
ファイルACL
ACLはlinux.txt
次のとおりです。
# file: linux.txt
# owner: ryan
# group: ryan
user::rw-
user:ryan:rwx #effective:r--
group::r-x #effective:r--
mask::r--
other::r--
ACLはwindows.txt
次のとおりです。
# file: windows.txt
# owner: ryan
# group: ryan
user::rwx
user:ryan:rwx
group::r-x
mask::rwx
other::r--
質問
Linuxクライアントは、私が期待したように正確に動作します。 Windowsクライアントを使用するときはなぜ違いますか? WindowsクライアントにLinuxクライアントと同じ権限を設定させるにはどうすればよいですか?
答え1
Sambaにクライアントから送信されたすべてを標準化させることができますman smb.conf
。たとえば、次のようになります。
create mask = 0775
force create mode = 0660
directory mask = 2775
force directory mode = 2771
答え2
まず、これらの権限にはACLは必要ありません。 ACL は、ユーザー、グループ、その他の権限よりも細分化されています。
しかし、あなたの質問に答えると、私の意見では、Linuxで生成されたファイルはユーザーのumask設定から権限を取得します。おそらく、他のディレクトリからファイルを作成したときに取得するのと同じ権限です。
Windows環境にはumaskのようなものもなく、Unixグループの概念もわかりません。 Windowsで生成されたファイルは、smb.confの設定から権限を取得します。これらの設定を直接入力しなくてもデフォルトがあります。コマンドを使用してこれらの値を表示できますtestparm -s -v smb.conf | grep mask
。 smb.confのマスクは、同じumaskに比べて逆の値を持ちます。つまり、-rw-r--r--権限を持つファイルを取得するにはumask 022が必要ですが、samba生成マスクは644です。