1.10. smbcacls で SMB 共有上の ACL の管理
smbcacls
ユーティリティーは、SMB 共有に保存されたファイルおよびディレクトリーの ACL をリスト表示、設定、および削除できます。smbcacls
を使用して、ファイルシステムの ACL を管理できます。
- 高度な Windows ACL または POSIX ACL を使用するローカルまたはリモートの Samba サーバー
- Red Hat Enterprise Linux で、Windows でホストされる共有の ACL をリモートで管理
1.10.1. アクセス制御エントリー
ファイルシステムオブジェクトの各 ACL エントリーには、以下の形式のアクセス制御エントリー (ACE) が含まれます。
security_principal:access_right/inheritance_information/permissions
例1.3 アクセス制御エントリー
AD\Domain Users
グループに、Windows 上の このフォルダー、サブフォルダー、およびファイル
に適用される 変更
権限がある場合、ACL には以下の ACE が含まれます。
AD\Domain Users:ALLOWED/OI|CI/CHANGE
ACE には、以下が含まれます。
- セキュリティープリンシパル
- セキュリティープリンシパルは、ACL の権限が適用されるユーザー、グループ、または SID です。
- アクセス権
-
オブジェクトへのアクセスが許可または拒否されるかどうかを定義します。値は
ALLOWED
またはDENIED
です。 - 継承情報
次の値を取ります。
表1.1 継承の設定
値 詳細 マップ先 OI
オブジェクトの継承
このフォルダーおよびファイル
CI
コンテナーの継承
このフォルダーおよびサブフォルダー
IO
継承のみ
ACE は、現在のファイルまたはディレクトリーには適用されません。
ID
継承済
親ディレクトリーから ACE が継承されました。
また、値は以下のように組み合わせることができます。
表1.2 継承設定の組み合わせ
値の組み合わせ Windows の 適用先
設定にマップします。OI|CI
このフォルダー、サブフォルダー、およびファイル
OI|CI|IO
サブフォルダーおよびファイルのみ
CI|IO
サブディレクトリーのみ
OI|IO
ファイルのみ
- 権限
この値は、Windows の権限または
smbcacls
エイリアスを表す 16 進値になります。1 つ以上の Windows の権限を表す 16 進値。
次の表に、Windows の高度な権限とそれに対応する値を 16 進法で表示します。
表1.3 Windows の権限とそれに対応する smbcacls 値を 16 進法で設定
Windows の権限 16 進値 完全な制御
0x001F01FF
フォルダーのスキャンおよびファイルの実行
0x00100020
フォルダーのリスト表示 / データの読み取り
0x00100001
属性の読み取り
0x00100080
拡張属性の読み取り
0x00100008
ファイルの作成/データの書き込み
0x00100002
フォルダーの作成/データの追加
0x00100004
属性の書き込み
0x00100100
拡張属性の書き込み
0x00100010
サブフォルダーおよびファイルの削除
0x00100040
削除
0x00110000
権限の読み取り
0x00120000
権限の変更
0x00140000
所有権の取得
0x00180000
ビット単位の
OR
演算を使用すると、複数の権限を 1 つの 16 進値として組み合わせることができます。
詳細は、ACE マスク計算 を参照してください。
smbcacls
エイリアス。以下の表には、利用可能なエイリアスが表示されます。表1.4 既存の smbcacls エイリアスとそれに対応する Windows の権限
smbcacls
エイリアスWindows の権限へのマッピング -R
読み取り
READ
読み取りおよび実行
W
主な機能:
- ファイルの作成/データの書き込み
- フォルダーの作成/データの追加
- 属性の書き込み
- 拡張属性の書き込み
- 権限の読み取り
D
削除
%P
権限の変更
O
所有権の取得
X
スキャン / 実行
CHANGE
修正
FULL
完全な制御
注記権限を設定する際に、1 文字のエイリアスを組み合わせることができます。たとえば、Windows の権限の
Read
およびDelete
を適用するようにRD
を設定できます。ただし、1 文字以外のエイリアスを複数組み合わせたり、エイリアスと 16 進値を組み合わせることはできません。
1.10.2. smbcacls を使用した ACL の表示
SMB 共有で ACL を表示するには、smbcacls
ユーティリティーを使用します。--add
などの操作パラメーターを付けずに smbcacls
を実行すると、ユーティリティーは、ファイルシステムオブジェクトの ACL を表示します。
手順
たとえば、//server/example
共有のルートディレクトリーの ACL をリスト表示するには、以下のコマンドを実行します。
# smbcacls //server/example / -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
REVISION:1
CONTROL:SR|PD|DI|DP
OWNER:AD\Administrators
GROUP:AD\Domain Users
ACL:AD\Administrator:ALLOWED/OI|CI/FULL
ACL:AD\Domain Users:ALLOWED/OI|CI/CHANGE
ACL:AD\Domain Guests:ALLOWED/OI|CI/0x00100021
コマンドの出力は以下のようになります。
-
REVISION
- セキュリティー記述子の内部 Windows NT ACL リビジョン -
CONTROL
- セキュリティー記述子の制御 -
OWNER
- セキュリティー記述子の所有者の名前または SID -
GROUP
- セキュリティー記述子のグループの名前または SID -
ACL
エントリー。詳細は、アクセス制御エントリー を参照してください。
1.10.3. ACE マスク計算
ほとんどの場合、ACE を追加または更新するときは、既存の smbcacls エイリアスとそれに対応する Windows アクセス許可に リストされている smbcacls
エイリアスを使用します。
ただし、Windows の権限と それに対応する smbcacls 値を 16 進法でリストしたように高度な Windows の権限 を設定する場合は、ビット単位の OR
操作を使用して正しい値を計算する必要があります。以下のシェルコマンドを使用して値を計算できます。
# echo $(printf '0x%X' $(( hex_value_1 | hex_value_2 | ... )))
例1.4 ACE マスクの計算
以下の権限を設定します。
- フォルダーのスキャン / ファイルの実行 (0x00100020)
- フォルダーのリスト表示 / データの読み取り (0x00100001)
- 属性の読み取り (0x00100080)
以前の権限の 16 進値を計算するには、以下を入力します。
# echo $(printf '0x%X' $(( 0x00100020 | 0x00100001 | 0x00100080 )))
0x1000A1
ACE を設定または更新する場合は、戻り値を使用します。
1.10.4. smbcacls を使用した ACL の追加、更新、および削除
smbcacls
ユーティリティーに渡すパラメーターに応じて、ファイルまたはディレクトリーから ACL を追加、更新、および削除できます。
ACL の追加
このフォルダー、サブフォルダー、およびファイル
の CHANGE
権限を AD\Domain Users
グループに付与する //server/example
共有のルートに ACL を追加するには、以下のコマンドを実行します。
# smbcacls //server/example / -U "DOMAIN\administrator --add ACL:"AD\Domain Users":ALLOWED/OI|CI/CHANGE
ACL の更新
ACL の更新は、新しい ACL の追加に似ています。ACL を更新する場合は、--modify
パラメーターと既存のセキュリティープリンシパルを使用して ACL を上書きします。smbcacls
が ACL リスト内でセキュリティープリンシパルを検出すると、ユーティリティーは権限を更新します。これを行わないと、以下のエラーでコマンドが失敗します。
ACL for SID principal_name not found
たとえば、AD\Domain Users
グループの権限を更新し、このフォルダー、サブフォルダー、およびファイル
の READ
に設定するには、以下のコマンドを実行します。
# smbcacls //server/example / -U "DOMAIN\administrator --modify ACL:"AD\Domain Users":ALLOWED/OI|CI/READ
ACL の削除
ACL を削除するには、正確な ACL を持つ --delete
パラメーターを smbcacls
ユーティリティーに渡します。以下に例を示します。
# smbcacls //server/example / -U "DOMAIN\administrator --delete ACL:"AD\Domain Users":ALLOWED/OI|CI/READ