web-dev-qa-db-ja.com

Samba経由で作成されたファイルが、クライアントOSに応じて異なるACL(マスク)権限を取得するのはなぜですか?

私はこれをDebian Jessieのクリーンインストールでテストしましたが、他のマシン(Ubuntu 12.04など)でもこの問題があります。基本インストールに加えて、Sudosamba、およびcifs-utilsをインストールしました。

デフォルトACLを持つ共有ディレクトリ

ルートファイルシステムでACLを有効にし、共有ディレクトリを作成しました。

Sudo mount -o remount,acl /
mkdir -p /home/ryan/shared
setfacl -d -m u:ryan:rwx /home/ryan/shared

Samba設定

すべてのデフォルトを/etc/samba/smb.confのままにして、1つの共有を追加しました。

[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

linux.txtのACLは次のようになります。

# file: linux.txt
# owner: ryan
# group: ryan
user::rw-
user:ryan:rwx           #effective:r--
group::r-x              #effective:r--
mask::r--
other::r--

windows.txtのACLは次のようになります。

# file: windows.txt
# owner: ryan
# group: ryan
user::rwx
user:ryan:rwx
group::r-x
mask::rwx
other::r--

ご質問

Linuxクライアントからの動作は私が期待するものです。 Windowsクライアントを使用する場合、なぜ異なるのですか? WindowsクライアントにLinuxクライアントと同じ権限を設定するにはどうすればよいですか?

4
Ryan J

まず第一に、それらの権限のみでACLは必要ありません。 ACLは、ユーザー、グループなどよりもきめ細かいアクセス許可用です。

しかし、あなたの質問に答えるために、私の推測では、Linuxによって作成されたファイルは、ユーザーのumask設定からその権限を取得します。おそらく、他のディレクトリにファイルを作成するときに取得する権限と同じです。

Windows環境には、umaskなどはありません。UNIXグループの概念については何も知りません。 Windowsで作成されたファイルは、smb.confの設定から許可を取得します。このような設定を自分で入力しなかった場合でも、デフォルト値があります。これらの値は、testparm -s -v smb.conf | grep maskコマンドで確認できます。 smb.confのマスクには、同じumaskと比較して逆の値があります。つまり、権限が-rw-r--r--のファイルを取得するには、022のumaskと644のSamba作成マスクが必要です。

1