質問
Linux クライアントと Microsoft Windows クライアントの間で共有されるディスク ディレクトリがあります。複数のユーザーがこのディレクトリ共有にアクセスする必要がありますが、Linux クライアントからファイルが作成または変更されると、Linux ファイルのアクセス許可が適用され、Windows クライアントがこれらのファイルにアクセスすることが困難または不可能になります。
これらのディスク リソースを均一な方法で共有したいと考えています。
解決策
全体的なメンテナンス戦略に応じて、次の手法のいずれかを使用できます。
1.ユーザーまたはグループの所有権の強制
/etc/samba/smb.conf ファイル内 次のディレクティブを使用できます:
force user = [user] force group = [group]
これにより、ファイルまたはディレクトリ アクセスの通常のファイル所有権属性が上書きされます。デフォルトでは、有効なユーザー資格情報が使用されます。上記のディレクティブのいずれか (または両方) を使用することにより、関連する資格情報を特定の値に強制できます。したがって、すべてのファイル アクセスは、アクセス プロセスが指定された資格情報で実行されているかのように実行されます。
ディレクティブが次の形式の場合:
force group = +[group]
その場合、すでに [グループ] のメンバーである Linux ユーザーのみが、アクセスの間、プライマリ グループが [グループ] に変更されます。 [グループ] のメンバーではない Linux ユーザーは、このディレクティブの影響を受けません。
2.ディレクトリ アクセス許可を使用する
/tmp ディレクタについて考えてみましょう。これは、複数のユーザーがファイルを作成、変更、または削除できるスクラッチパッドです。ユーザー A がユーザー B が所有するファイルを削除できないようにするために、ディレクトリにはスティッキー ビットが設定されています。
$ ls -ld /tmp drwxrwxrwt 14 root root 360 Mar 19 08:25 /tmp
t に注意してください 権限のフラグ:これは「スティッキー」を示します 」ビットがディレクトリに設定されます。すべてのユーザーがこのディレクトリにファイルを作成できますが、エントリを削除できるのは所有ユーザーだけです。ディレクトリには全世界の読み取り/書き込み/実行権限があるため、スティッキー ビットがなければ、誰でもファイルを削除できます。
1. この問題を回避する 1 つの方法は、共有 SAMBA ディレクトリを SAMBA ユーザーが所有するようにすることです:
# /bin/mkdir [/path/to/SAMBA/share] # /bin/chown -R [user]:[group] -R [/path/to/SAMBA/share]
2. 次に、ディレクトリの setgid ビットをオンにして、ディレクトリ エントリのグループ資格情報をそのディレクトリのグループ資格情報と強制的に一致させます。
# /bin/chmod g+s [/path/to/SAMBA/share] # /bin/ls -ld [/path/to/SAMBA/share] drwxrws--- 1 [user] [group] 0 Mar 19 09:07 [/path/to/SAMBA/share]
3. root ユーザーとして [/path/to/SAMBA/share] 内にファイルを作成します。ファイルは root が所有しますが、そのグループは [group] グループになります:
# /bin/mkdir /example # /bin/chown root:oracle /example # /bin/chmod g+s /example # /bin/ls -ld /example drwxr-sr-x 2 root oracle 4096 Mar 19 10:03 /example
4. 最後に、root ユーザーとして /example にファイルを作成します。
# id uid=0(root) gid=0(root) groups=0(root) # touch /example/file # ls -ld /example /example/file drwxrws--- 2 root oracle 4096 Mar 19 10:09 /example -rw-r--r-- 1 root oracle 0 Mar 19 10:09 /example/file
ファイルの作成に使用された資格証明は root:root でしたが、ファイル用に保存されたアクセス資格証明は root:oracle であることに注意してください。グループの所有権は、ディレクトリのグループに自動的に設定されました。
注意
上記の setgid メソッドは、代わりに setuid ビットが使用されている場合にも機能します。 chmod ステップでは、代わりにこれを行います:
# chmod u+s [/path/to/SAMBA/share]
次のように、ファイルの所有権とグループ メンバーシップの両方を上書きすることもできます:
# chmod u+s,g+s [/path/to/SAMBA/share]
魅力的な機能ですが、これは有用性が限られている可能性があります。
3.アクセス制御リスト (ACL) を使用する
アクセス制御リスト (ACL) は、通常の Linux ファイル所有者/グループ/その他のアクセス許可に加えて、追加のファイル属性セットが保存されるファイル システム機能です。 ACL を使用すると、特定のアクセス タイプに付与されるアクセスの正確なタイプを非常にきめ細かく制御できます。
Linux での SAMBA ファイル システムの実装はアクセス制御リストをサポートしていますが、この機能は acl マウント属性を介して明示的に有効にする必要があります。次のように、この機能を動的に有効にすることができます:
# mount -o remount,acl [/path/to/samba/mount/point]
例として、共有 /samba/office/ があり、すべてのユーザーにファイルの書き込みを許可しているが、グループの資格情報はオフィスに強制する必要があるとします。次のコマンドを使用できます:
# mount -o remount,acl /group # setfacl -R -d -m u::rwx,g:office:rwx,o::r-x /samba/office
# /bin/getfacl /samba/office # file: samba/office/ # owner: root # group: office user::rwx group::rwx other::rwx default:user::rwx default:group:office:rwx default:mask::rwx default:other::r-x
ディレクトリに対してこの ACL を確立しているため、含まれているファイルとサブディレクトリに適用されます。