smbcacls — Windows NT 上のファイルやディレクトリの ACL の取得や設定
smbcacls
{//server/share} {/filename} [-D|--delete=ACL] [-M|--modify=ACL] [-a|--add=ACL] [-S|--set=ACLS] [-C|--chown=USERNAME] [-G|--chgrp=GROUPNAME] [-I|--inherit=STRING] [--recurse] [--propagate-inheritance] [--save=savefile] [--restore=restorefile] [--numeric] [--sddl] [--query-security-info=INT] [--set-security-info=INT] [-t|--test-args] [--domain-sid=SID] [-x|--maximum-access] [-?|--help] [--usage] [-d|--debuglevel=DEBUGLEVEL] [--debug-stdout] [--configfile=CONFIGFILE] [--option=name=value] [-l|--log-basename=LOGFILEBASE] [--leak-report] [--leak-report-full] [-R|--name-resolve=NAME-RESOLVE-ORDER] [-O|--socket-options=SOCKETOPTIONS] [-m|--maxprotocol=MAXPROTOCOL] [-n|--netbiosname=NETBIOSNAME] [--netbios-scope=SCOPE] [-W|--workgroup=WORKGROUP] [--realm=REALM] [-U|--user=[DOMAIN/]USERNAME[%PASSWORD]] [-N|--no-pass] [--password=STRING] [--pw-nt-hash] [-A|--authentication-file=FILE] [-P|--machine-pass] [--simple-bind-dn=DN] [--use-kerberos=desired|required|off] [--use-krb5-ccache=CCACHE] [--use-winbind-ccache] [--client-protection=sign|encrypt|off] [-V|--version]
このツールは samba(7) システムの一部である。
smbcacls
は、SMB ファイル共有内の ACL
(Access Control Lists)を操作するプログラムである。
ACL はなにもないか、特定のユーザーやグループに対するアクセス制限を行う、
1 つ以上の ACE(Access Control Entries)から構成される。
smbcacls
コマンドでは以下のオプションが
利用可能である。ACL の形式は、ACL FORMAT セクションで記述する。
エントリを、指定された ACL に追加する。既存の ACE は変更されない。
コマンドラインで指定された ACE の mask 値 (パーミッション)を変更する。オブジェクトの ACL に指定された ACE が存在しない場合、 その ACL ごとにエラーが出力される。
コマンドラインで指定された ACE を削除する。 オブジェクトの ACL に指定された ACE が存在しない場合、その ACL ごとにエラーが 出力される。
このコマンドは、コマンドラインで指定された ACL のみをオブジェクトに設定する。存在する ACL は削除される。 呼び出しを成功させるためには、指定する ACL に最低限リビジョン、タイプ、 所有者とグループが含まれている必要がある。
-C
オプションを利用することで、
ファイルやディレクトリの所有者を name で指定したアカウントに変更することが可能である。
name は S-1-x-y-z 形式の sid で指定するか、
最初の引数で指定したサーバーが認識可能な名前で指定する。
このコマンドは -M OWNER:name の短縮形になる。
ファイルやディレクトリのグループ所有者は、
-G
オプションを利用することで指定した name
に変更することが可能である。名前は S-1-x-y-z 形式の sid で指定するか、
先頭の引数で指定したサーバーが認識可能な name で指定する。
このコマンドは -M GROUP:name の短縮形になる。
-I
オプションを使うことで Windows の
"Allow inheritable permissions" チェックボックスの設定/解除を
行う。設定するとチェックボックスに許可が渡される。解除すると
チェックボックスには削除かコピーのどちらかが渡される。削除は
すべての継承された ACE を削除するコピーの場合には、すべての
継承された ACE がコピーされる。
inheritance フラグが付いているディレクトリツリー 全体に対して、ACE の追加、変更削除または設定を行う。詳細については INHERITANCE 節を参照のこと。
指定されたファイル又はあフォルダの DACL を あとでの復元操作で使用できるように、sddl 形式で格納する。 SACLS、所有者又は integrity ラベルは格納されない。
ディレクトリ中のファイルに格納された DACLS を 適用する。
ディレクトリとその配下の全てのファイル/ ディレクトリで操作が行われることを表示する (save オプションに対して のみ適用できる)。
このオプションは、全ての ACL 情報を数値形式で 表示させる。デフォルトでは、SID は名前に、ACE の type と mask は、 可読性のある文字列形式に変換される。
これは、ユーザーに対して、smbcacls がサーバー接続時に使用する 最上位の SMB プロトコルを選択出来るようにする。既定値では、 これは、SMB1 プロトコルの最上位である NT1 に設定されている。 SMB2 または SMB3 プロトコルで接続する場合、おのおの SMB2 または SMB3 という文字列を指定する。通信路の暗号化を使って Windows 2012 Server に接続する場合、max-protocol は SMB3 が必要である ことに注意。
実際に処理は行わず、指定した引数の正当性を検証する。
問い合わせにおける security-info フラグ。
問い合わせにおける security-info フラグ。
sddl 形式による acl の入出力。
sddl 処理に使う SID。
ACLを追加で表示する場合、有効な最大パーミッションを 得るためにサーバに問合せする。これは、 SMB プロトコルバージョン 2 以降 でのみサポートされていることに注意。
コマンドラインオプションの要約を表示する。
簡単な使用法を表示する。
level
は0から10までの整数値である。
このパラメータが設定されていない場合の規定の値は、
クライアントアプリケーションに対しては、1 である。
この値を大きくするほど、サーバーの動作に関するより詳細な情報が ログファイルに記録される。レベル 0 では、致命的なエラーと重大な警告 のみが記録される。レベル 1 は日々の運用に適しており、少量の稼働状況 に関する情報を生成する。
1 より上のレベルは大量のログが生成されるので、問題解決の時にのみ 使用すべきである。 3 より上のレベルは開発者だけが利用するように設計されて おり、莫大な量のログデータが生成される。そのほとんどは非常に謎めいた内容 となっている。
このパラメーターの指定は、${prefix}/etc/smb.conf
ファイル中の、
log level パラメーターの
指定よりも優先する事に注意。
このパラメータはデバッグ出力を STDOUT にリダイレクトする。既定では、 すべてのクライアントはログを STDERR に出力する。
クライアントが必要とする詳細な設定を含むファイルを指定する。
このファイル中にある情報は、クライアントまたはサーバに対して
一般的であるか、あるいは、
client smb encrypt
のような、クライアント固有のオプションのみを提供することが
できる。詳細については ${prefix}/etc/smb.conf
を参照のこと。既定の
設定ファイルの名前はコンパイル時に決定される。
コマンドラインから smb.conf(5) オプション "<name>" に値 "<value>" を設定する。 これはコンパイル時の既定値と設定ファイルから読み込まれた オプションを上書きする。名前または値に空白が入っていた場合、 引用符で --option=name=value 全体を囲む。
ログ/デバッグファイルのベースディレクトリ名。拡張子
".progname"
が追加される (たとえば
log.smbclient, log.smbd など)。ログファイルは
クライアントによって削除されることはない。
終了時の talloc リークレポートを有効にする。
終了時の完全な talloc リークレポートを有効にする。
プログラムのバージョン番号を表示する。
このオプションは、ホスト名と IP アドレスの名前解決のために どのようなネーミングサービスをどのような順序で使用するかを決める のに使用される。このオプションには、異なった名前解決オプションを 空白で区切って並べる。--name-resolve=NAME-RESOLVE-ORDER 全体を 引用符でくくるのがもっとも良いやり方である。
指定できるオプションは: "lmhosts", "host", "wins" and "bcast" である。 それぞれにおいて、名前解決は次のように行われる:
lmhosts
:
Samba lmhosts ファイルで IP アドレスが検索される。
lmhosts の行に NetBIOS名にアタッチされるネームタイプが
ない場合(詳細については
lmhosts(5)を参照)、ネームタイプがどれであるかは
検索結果に影響しなくなる。
host
:
システムの /etc/hosts
、NIS、
DNS ルックアップを使用した、ホスト名 - IP アドレス間の
標準の名前解決が行われる。名前解決の方法の詳細な部分は、
IRIX、Solaris といった OS によって変わる。
/etc/nsswitch.conf
で制御できる場合も
ある。この方法は、検索される NetBIOS 名のタイプが 0x20
(サーバー) である時にのみ使用できる点に注意。さもなければ
指定しても無視される。
wins
:
wins server
パラメーターに指定
された IP アドレスを持つ名前が検索される。WINS サーバーが
指定されていなければ、この方法は無視される。
bcast
:
interfaces
パラメーターに指定された
既知のローカル・インターフェースそれぞれについてブロード
キャストを行う。ターゲット・ホストがローカル接続サブネット
上にある場合にしか使えないので、最も信頼性の低い名前
解決法である。
このパラメーターが設定されなかった場合、名前解決方法の使用順序は
${prefix}/etc/smb.conf
ファイル中のパラメーター
(name resolve order)に指定されたとおりになる。
既定の順番は lmhosts, host, wins, bcast である。このパラメータがない
場合か何らかのエントリがname resolve order
the ${prefix}/etc/smb.conf
ファイル中のパラメータにある場合は、名前解決の手段は
この順で行われる。
クライアントのソケットに設定する TCP のソケットオプション。
有効なオプションの一覧については、${prefix}/etc/smb.conf
マニュアルページ
中の socket options パラメーターを参照のこと。
このパラメータの値(文字列)は、クライアントによってサポートされる、 もっとも高位のプロトコルレベルである。
ここでこのパラメータを指定すると、${prefix}/etc/smb.conf
ファイル中の
client max protocol パラメータを
上書きすることに注意。
このオプションは Samba 自身が使う NetBIOS名を上書きする。
これは、${prefix}/etc/smb.conf
ファイル中の netbios name
パラメータで設定することと同じである。しかし、コマンド行での設定は
${prefix}/etc/smb.conf
での設定よりも優先する。
nmblookup
が、通信用のNetBIOS名を生成する時に
使うNetBIOS スコープを指定する。NetBIOS スコープの詳細な利用方法に
ついては、 RFC 1001 と RFC 1002 を参照のこと。NetBIOSスコープは
ごく稀にしか利用されない。NetBIOS システム
全体を運営している管理者が、そのシステム内の相手と通信する場合にのみ、
このパラメーターを設定する。
ユーザー名の SMB ドメインを指定する。このオプションは、 smb.conf 内のデフォルトのドメイン設定よりも優先される。 ドメイン名としてサーバーの NetBIOS 名を指定すると、クライアントは (ドメインの SAM ではなく) サーバーのローカル SAM を使用して ログオンを試みる。
ここでこのパラメータを指定すると、${prefix}/etc/smb.conf
ファイル中の
workgroup パラメータを上書きすることに注意。
ドメインのレルムを指定する。
ここでこのパラメータを指定すると、${prefix}/etc/smb.conf
ファイル中の
realm パラメータを上書きすることに注意。
SMB のユーザー名、またはユーザー名とパスワードを指定する。
もしも %password を指定しないと、ユーザーにパスワードの入力を求める。
クライアントはまず初めにUSER
、LOGNAME
の
順に環境変数の存在を調べ、もしもどちらかが存在するならば、その文字列を
大文字にする。環境変数が存在しない場合、ユーザー名として
GUEST
が用いられる。
このほかに、平文のユーザー名とパスワードを記述した認証ファイルを使用する
3番目のオプションがある。このオプションは主にスクリプト向けに用意されて
おり、認証情報をコマンドラインや環境変数に含めたくない場合に有用である。
このオプションを利用するときは、ファイルのパーミッションを確認し、ほかの
ユーザーから参照されないように注意すること。詳細は
-A
オプションを参照のこと。
パスワードをスクリプトに含める場合は注意すること。セキュリティを確保する ため、必要に応じてクライアントにパスワードを要求させることを推奨する。
このオプションを指定すると、クライアントはユーザーへの パスワード入力要求をしなくなる。パスワードが必要ないサービスに アクセスするときに有用である。
コマンドラインにパスワードが指定されておらず、このオプションも指定 されていないと、クライアントはパスワードを要求する。
もしも、パスワードがコマンドライン上で指定され、このオプションも 定義されていた場合、コマンドライン上のパスワードは無視され、 パスワードは使われない。
コマンド行上でパスワードを指定する。
パスワードをスクリプトに含める場合は注意すること。セキュリティを確保する ため、必要に応じてクライアントにパスワードを要求させることを推奨する。
提供したパスワードは NT ハッシュである。
このオプションは、指定したファイルから、接続時に使用する ユーザー名とパスワードを読み込むために使用する。 ファイルの形式は次の通り:
username = <value> password = <value> domain = <value>
ファイルのパーミッションを確認し、他のユーザーから参照されない ように注意すること。
保存されたマシンパスワードアカウントを使用する。
シンプルバインドで使う DN。
このパラメータは、Samba クライアントツールが Kerberos を 使って認証を試みるかを決定する。Kerberos 認証では、サービスに 接続する際、IP アドレスではなく、DNS 名を使用する必要がある。
ここでこのパラメータを指定すると、${prefix}/etc/smb.conf
ファイル中の
client use kerberos パラメータを
上書きすることに注意。
Kerberos認証用の資格情報キャッシュの場所を指定する。
これは --use-kerberos=required も同時に設定する。
winbindによってキャッシュされた資格情報を使うようにする。
クライアントツールが使うべき接続の保護を設定する。
ここでこのパラメータを指定すると、${prefix}/etc/smb.conf
ファイル中の
client protection パラメータを
上書きすることに注意。
さらに細かな制御が必要な場合は、以下を使用できる:
--option=clientsmbencrypt=OPTION
,
--option=clientipcsigning=OPTION
,
--option=clientsigning=OPTION
.
ACL の形式は、カンマか改行記号で 1 つ以上の エントリを区切ったもの である。ACL エントリは以下のいずれかの形式をとる:
REVISION:<revision number> OWNER:<sid or name> GROUP:<sid or name> ACL:<sid or name>:<type>/<flags>/<mask>
Control bits related to automatic inheritance
OD - "Owner Defaulted" - セキュリティ記述子の所有者の SID が、既定のメカニズムによって提供されたことを示す。
GD - "Group Defaulted" - セキュリティ記述子グループの SID が、既定のメカニズムによって、提供されたことを示す。
DP - "DACL Present" - discretionary access control list (DACL) を持っているセキュリティ記述子を示す。
DD - "DACL Defaulted" - 既定の DACL を持つセキュリティ記述子を示す。
SP - "SACL Present" - system access control list (SACL) を持つセキュリティ記述子を示す。
SD - "SACL Defaulted" - セキュリティ記述子の元のプロバイダではなく、既定のメカニズムが SASL を提供した。
DT - "DACL Trusted"
SS - "Server Security"
DR - "DACL Inheritance Required" - 継承可能なアクセス制御エントリ(ACE)の既存の子オブジェクトへの自動継承をサポートするように、DACL が設定されている必須のセキュリティ記述子を示す。
SR - "SACL Inheritance Required" - 継承可能なアクセス制御エントリ(ACE)の既存の子オブジェクトへの自動継承をサポートするように、SACL が設定されている必須のセキュリティ記述子を示す。
DI - "DACL Auto Inherited" - 継承可能なアクセス制御エントリ(ACE)の既存の子オブジェクトへの自動継承をサポートするように、DACL が設定されているセキュリティ記述子を示す。
SI - "SACL Auto Inherited" - 継承可能な ACE の既存の子オブジェクトへの自動継承をサポートするように、SACL が設定されているセキュリティ記述子を示す。Indicates a security descriptor in which the SACL is set up to support automatic propagation of inheritable ACEs to existing child objects.
PD - "DACL Protected" - 継承可能な ACL によって、セキュリティ記述子の DACL が変更されないようにする。
PS - "SACL Protected" - 継承可能な ACL によって、セキュリティ記述子の SACL が変更されないようにする。
RM - "RM Control Valid" - リソースマネージャ制御が有効であることを示す。
SR - "Self Relative" - 自己相対セキュリティ記述子であることを示す。
REVISION は、セキュリティディスクリプタに対する内部的な Windows NT ACL のリビジョンを表す。特に指定されない場合のデフォルトは 1 である。 1 以外の値を指定した場合は、挙動がおかしくなることがある。
OWNER と GROUP はオブジェクトの所有者およびグループの sid を指定する。 SID が S-1-x-y-z の形式で指定された場合はそのまま用いられ、 それ以外の場合、指定された名前はファイルやディレクトリが存在するサーバーに よって解析される。
ACE は "ACL:" プレフィックスで指定され、SID に対して与えられるパーミッション を指定する。この SID も S-1-x-y-z の形式で指定するか、名前で指定することが可能で、後者の場合、 ファイルやディレクトリが存在するサーバーによって解析される。 type, flag, mask の値は、SID に対して与えられたアクセスの種類を指定する。
typeは ALLOWED か DENIED のどちらかで、SID に対する許可および拒否に 対応する。
フラグフィールドは、継承を実行するときに、どのように ACE を考慮
するかを定義する。smbcacls
は、
- -propagate-inheritance
が指定されて実行された
時にこれらのフラグを使う。
flag の値は 10進又は16進値か、縦棒 "|" で区切られた それぞれの (XX) 別名で指定できる。
(OI) Object Inherit 0x1
(CI) Container Inherit 0x2
(NP) No Propagate Inherit 0x4
(IO) Inherit Only 0x8
(I) ACE was inherited 0x10
mask は SID に対して与えられたアクセス権を表現する値である。それは 10 進数もしくは 16 進数で設定するか、NT のファイルパーミッションと同じ名称である 以下の文字列のうちの一つを利用して設定することができる。
R - 読み取りの許可
W - 書き込みの許可
X - オブジェクトの実行
D - オブジェクトの削除
P - パーミッションの変更
O - 所有権の取得
以下の複合パーミッションも指定可能である。
READ - 'RX' パーミッションと等価である。
CHANGE - 'RXWD' パーミッションと等価である。
FULL - 'RWXDPO' パーミッションと等価である。
ACE 毎の継承フラグは ACE フラグフィールド中で設定できる。既定では、
inheritable ACEs、すなわち、オブジェクト継承 (OI) またはコンテナ継承 (CI) としてマークされたもの
で、これらはサブファイル又はフォルダには伝搬しない。しかし、
--propagate-inheritance
引数を指定すると、
このような ACE は自動的にいくつかの継承ルールによって伝搬される。
Inheritable (OI)(OI) ACE フラグはフォルダにのみ 適用される。
サブフォルダ又はフォルダに適用される任意の inheritable ACE は、inherited (I) フラグが付けられる。Inheritable ACE は、no propagation (NP) フラグが設定されていたとしてもフォルダに 適用される。
(OI) フラグのみが設定された ACE が、子のフォルダに 伝搬された時は、inheritance only フラグ (IO) も設定される。 これは、 ACE に関連づけられたパーミッションはフォルダそれ自身に 適用されない(その子のファイルにのみ)と言うことを示している。 子に ACE を適用する場合、ACE は通常通り伝搬される。
(CI) フラグのみが設定された ACE が子のファイルに 伝搬されたときは、特に何も影響はなく、このフォルダに伝搬されたときは、 通常通り継承する。
(OI) & (CI) とフラグ両方が設定された ACE は、 フォルダとファイル両方に対して通常通り伝搬される。
(OI)(READ) を親フォルダに追加r
+-parent/ (OI)(READ) | +-file.1 (I)(READ) | +-nested/ (OI)(IO)(I)(READ) | +-file.2 (I)(READ)
(CI)(READ) を親フォルダに追加r
+-parent/ (CI)(READ) | +-file.1 | +-nested/ (CI)(I)(READ) | +-file.2
(OI)(CI)(READ) を親フォルダに追加r
+-parent/ (OI)(CI)(READ) | +-file.1 (I)(READ) | +-nested/ (OI)(CI)(I)(READ) | +-file.2 (I)(READ)
(OI)(NP)(READ) を親フォルダに追加r
+-oi_dir/ (OI)(NP)(READ) | +-file.1 (I)(READ) | +-nested/ | +-file.2
(CI)(NP)(READ) を親フォルダに追加r
+-oi_dir/ (CI)(NP)(READ) | +-file.1 | +-nested/ (I)(READ) | +-file.2
(OI)(CI)(NP)(READ) を親フォルダに追加
+-parent/ (CI)(OI)(NP)(READ) | +-file.1 (I)(READ) | +-nested/ (I)(READ) | +-file.2
保護された ACL があるファイルとフォルダは、inheritable な
パーミッション(-I
で設定)を許可しない。そのような
オブジェクトは、(CI) 又は (OI) がある継承用に ACE にフラグが付いている
ものを受け取らない。
smbcacls
コマンドは、操作が成功したか、
その他の結果になったかに応じた戻り値を設定する。
戻り値は、以下の値のいずれかになる。
操作が成功した場合、smbcacls
は戻り値として 0
を返す。もし smbcacls
が指定したサーバーに接続できなかったか、
ACL を取得または設定する際にエラーが発生した場合、戻り値として 1 が返される。
コマンドライン引数の解析に失敗した場合は、戻り値として 2 が返される。
オリジナルの Samba ソフトウェアと関連するユーティリティは、Andrew Tridgell によって作成された。現在 Samba は Samba Team によって、Linux カーネルの開発と同様のオープンソースプロジェクトとして開発が行なわれている。
smbcacls
は Andrew Tridgell と Tim Potter
によって書かれた。
Samba 2.2 における DocBook 形式への変換は、Gerald Carter によって行なわれた。Samba 3.0 における DocBook XML 4.2 形式への変換は、 Alexander Bokovoy によって行われた。