smbcacls — Windows NT 上のファイルやディレクトリの ACL の取得や設定
smbcacls
{//server/share} {/filename} [-D|--delete acl] [-M|--modify acl] [-a|--add acl] [-S|--set acl] [-C|--chown name] [-G|--chgrp name] [-I allow|remove|copy] [--numeric] [-t] [-U username] [-d] [-e] [-m|--max-protocol LEVEL] [--query-security-info FLAGS] [--set-security-info FLAGS] [--sddl] [--domain-sid SID] [-x|--maximum-access]
このツールは 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" チェックボックスの設定/解除を
行う。設定するとチェックボックスに許可が渡される。解除すると
チェックボックスには削除かコピーのどちらかが渡される。削除は
すべての継承された ACL を削除するコピーの場合には、すべての
継承された ACL がコピーされる。
このオプションは、全ての 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までの整数値である。
既定値の値は、パラメーターが設定されていなければ0である。
この値を大きくするほど、サーバーの動作に関するより詳細な情報が ログファイルに記録される。レベル 0 では、致命的なエラーと重大な警告 のみが記録される。レベル 1 は日々の運用に適しており、少量の稼働状況 に関する情報を生成する。
1 より上のレベルは大量のログが生成されるので、問題解決の時にのみ 使用すべきである。 3 より上のレベルは開発者だけが利用するように設計されて おり、莫大な量のログデータが生成される。そのほとんどは非常に謎めいた内容 となっている
このパラメーターの指定は、smb.conf
ファイル中の、
log level パラメーターの
指定よりも優先する事に注意。
プログラムのバージョン番号を表示する。
サーバーが必要とする詳細な設定を含む設定ファイルを
指定する。このファイルには、サーバーが提供するサービスに関する記述や、
どの printcap ファイルを利用するかといった情報が含まれている。詳細は
smb.conf
を参照のこと。設定ファイルの名前の既定値は、コンパイル時
に決定される。
ログ/デバッグファイルのファイル名。拡張子として
".progname"
が追加される(例えば log.smbclient,
log.smbd,など)。ログファイルはクライアントによって削除されることはない。
コマンドラインから smb.conf(5) オプション "<name>" に値 "<value>" を設定。 これはコンパイル時の既定値と設定ファイルから読み込まれたオプションを上書きする。
このオプションを指定すると、クライアントはユーザーへの パスワード入力要求をしなくなる。パスワードが必要ないサービスにアクセスする ときに有用である。
コマンドラインにパスワードが指定されておらず、このオプションも指定 されていないと、クライアントはパスワードを要求する。
もしも、パスワードがコマンドライン上で指定され、このオプションも 定義されていた場合、コマンドライン上のパスワードは無視され、パスワードは 使われない。
Kerberos による認証を試みる。アクティブディレクトリ環境でのみ有効である。
winbindによってキャッシュされた資格情報を使うようにする。
このオプションは、指定したファイルから、接続に使用する ユーザー名とパスワードを読み込むために使用する。ファイルの形式は次の通り:
username = <value> password = <value> domain = <value>
ファイルのパーミッションを確認し、ほかのユーザーから参照されない ように注意すること。
SMB のユーザー名、またはユーザー名とパスワードを指定する。
もしも %password を指定しないと、ユーザーにパスワードの入力を求める。
クライアントはまず初めにUSER
、LOGNAME
の順に
環境変数の存在を調べ、もしもどちらかが存在するならば、その文字列を大文字にする。
環境変数が存在しない場合、ユーザー名としてGUEST
が用いられる。
このほかに、平文のユーザー名とパスワードを記述した認証ファイルを使用する
オプションがある。このオプションは主にスクリプト向けに用意されており、認証情報を
コマンドラインや環境変数に含めたくない場合に有用である。このオプションを利用する
ときは、ファイルのパーミッションを確認し、ほかのユーザーから参照されないように
注意すること。詳細は-A
オプションを参照のこと。
パスワードをスクリプトに含める場合は注意すること。多くのシステムでは、実行
中のプロセスのコマンドラインはps
コマンドで参照することが
できてしまう。安全のため、必ず、rpcclient
を使用して、
パスワード入力を要求し、直接入力するようにしておくこと。
クライアント署名ステートの設定。
保存されたマシンパスワードアカウントを使用する。
このコマンドラインパラメーターは、UNIX拡張をサポートするか、 SMB3プロトコルを選択したリモートサーバーを必要とする。 コネクション要求は暗号化される。SMB暗号化は、SMB3あるいはUNIX拡張 のどちらかを、GSSAPI経由を使って調停される。暗号化の調停に与えられた 資格情報を(kerberosまたはNTLMv1/v2)、ドメイン/ユーザー名/パスワードの 3回利用する。暗号化が調停不能だった場合、接続は失敗する。
提供されたパスワードはNTハッシュである。
このオプションは Samba 自身が使う NetBIOS名を上書きする。
これは、smb.conf
ファイル中の netbios name パラメータ
で設定することと同じである。しかし、コマンド行での設定は
smb.conf
での設定よりも優先する。
nmblookup
が、通信用のNetBIOS名
を生成する時に使うNetBIOS スコープを指定する。NetBIOS スコープの詳細な
利用方法については、 RFC 1001 と RFC 1002 を参照のこと。NetBIOSスコープ
はごく稀にしか利用されない。NetBIOS システム
全体を運営している管理者が、そのシステム内の相手と通信する場合にのみ、
このパラメーターを設定する。
ユーザー名の SMB ドメインを指定する。このオプションは、 smb.conf 内のデフォルトのドメイン設定よりも優先される。ドメイン名として サーバーの NetBIOS 名を指定すると、クライアントは (ドメインの SAM では なく) サーバーのローカル SAM を使用してログオンを試みる。
クライアントのソケットに設定する TCP のソケットオプ
ション。有効なオプションの一覧については、smb.conf
マニュアルページ
中の socket options パラメーターを参照のこと。
コマンドラインオプションの要約を表示する。
簡単な使用法を表示する。
ACL の形式は、カンマか改行記号で 1 つ以上の エントリを区切ったもの である。ACL エントリは以下のいずれかの形式をとる:
REVISION:<revision number> OWNER:<sid or name> GROUP:<sid or name> ACL:<sid or name>:<type>/<flags>/<mask>
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は SID に対する許可および拒否に対応する(訳注: 実際は type は ALLOWED か DENIED を指定し、それぞれ SID に対するアクセス許可および拒否に対応する、が正しい(fumiya))。 flag の値はファイルの ACE の場合通常 0 であり、ディレクトリの ACE の場合は通常 9 か 2 である。 共通的な flags は以下の通りである。
#define SEC_ACE_FLAG_OBJECT_INHERIT 0x1
#define SEC_ACE_FLAG_CONTAINER_INHERIT 0x2
#define SEC_ACE_FLAG_NO_PROPAGATE_INHERIT 0x4
#define SEC_ACE_FLAG_INHERIT_ONLY 0x8
現在のところ flag の値は 10 進数もしくは 16 進数でのみ指定することができる。
mask は SID に対して与えられたアクセス権を表現する値である。それは 10 進数もしくは 16 進数で設定するか、NT のファイルパーミッションと同じ名称である 以下の文字列のうちの一つを利用して設定することができる。
R - 読み取りの許可
W - 書き込みの許可
X - オブジェクトの実行
D - オブジェクトの削除
P - パーミッションの変更
O - 所有権の取得
以下の複合パーミッションも指定可能である。
READ - 'RX' パーミッションと等価である。
CHANGE - 'RXWD' パーミッションと等価である。
FULL - 'RWXDPO' パーミッションと等価である。
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 によって行われた。