ファイル共有
Samba サーバーの設定
Samba サーバー概要
Samba サーバーは Windows の SMB プロトコルにより、ファイルやプリンターの共有を行うサービスである。 プライマリ、バックアップドメインコントローラー機能や、NetBIOS 名と IP アドレスの対応を提供する WINS サーバー機能がある。
SMB の下位層プロトコルは NetBIOS であり、NetBIOS over TCP/IP により 139/TCP ポートで待ち受ける。 SMB では直接 TCP/IP 層を持つ CIFS (Fommon Internet File System) を提供している。 サーバープロセスは次の 2 つがある。
サーバープロセス | ポート番号 | 説明 |
---|---|---|
smbd | 445/tcp, 139/tcp | ファイル共有、プリンタ共有などの SMC サービス |
nmdb | 137/tcp, 138/tcp | NetBIOS のネームサービス |
デフォルトの設定ファイルは /etc/samba/smb.conf
である。 ディストリビューションやインストールの仕方によっては /etc
, /usr/samba/lib
などにも置かれる。 設定ファイルは複数のセクションで構成され、予約されたセクション名がある。 それ以外のセクションは任意の名前をつけることができ、セクション名が共有名となる。 共有するディレクトリは path パラメーターで指定する。 セクション名の最後に $ をつけた場合は Windows からは非表示になる。
セクション名 | 説明 |
---|---|
[global] | サーバー全体に関するパラメーターを設定するセクション |
[homes] | ユーザーのホームディレクトリの共有に関するパラメーターを設定するセクション |
[printers] | プリンターの共有に関するパラメーターを設定するセクション |
homes が指定されている場合、ユーザーは自分のユーザー名を共有名としてホームディレクトリにアクセスできる。 この時、書き込みをするには次のいずれかである必要がある。
writable = yes
もしくはwriteable = yes
readlonly = no
認証
Samba サーバー自身が認証をする場合は security=user を設定する。 その場合、パスワードデータベースの種類を指定する。 直接 Linux ユーザーのパスワードファイルで認証を行うことはできない。
Security の設定
Security の設定値 | 説明 |
---|---|
user | ユーザー名とパスワードでローカル認証を行う設定 |
share | パスワードだけで認証を行う設定 |
domain | ドメインコントローラーにより認証を行う設定 |
server | 他の SMB サーバーにより認証を行う設定 |
ads | AD ドメインのドメインコントローラーで認証を行う設定 |
Passdb backend の設定
Passdb backend の設定値 | 説明 |
---|---|
tdbsam | TDB (Trivial DataBase) を使用する |
ldapsam | LDAP を使用する |
smbpasswd | smbpasswd ファイルを使用する |
Samba 関連のコマンド
- pdbedit: ユーザーの表示、登録、変更、削除
- smbpasswd: パスワードの変更
- testparm: 設定ファイルの構文チェック
- smbstatus: クライアント接続情報の表示
- nmblookup: NetBIOS 情報の検索
- smbclient: ftp コマンドに似たクライアントコマンド
パスワード同期
unix password sync = yes
とすることで Samba ユーザーのパスワードが変更された際にシステムパスワードにも同期する。
unix password sync = yes
: パスワード同期の有効化passwd program = /usr/bin/passwd %u
: パスワード設定コマンドを指定 (root が実行)passwd chat = * %n\n * %n\n *
: パスワード設定コマンドとシステムの会話文字列を指定
pdbedit コマンド
Samba ユーザーの表示、登録、変更、削除をする。 ユーザーは事前に Linux のユーザーアカウントとして登録する必要がある。
pdbedit [オプション]
- -a: ユーザーの登録
- -L: ユーザーの一覧表示
- -x: ユーザーの削除
smbpasswd コマンド
Samba ユーザーの登録、パスワード変更、削除をする。
smbpasswd [オプション]
- -a: ユーザーの登録
- -x: ユーザーの削除
- -U: パスワード変更するユーザーの指定
testparm コマンド
smb.conf ファイルの書式をチェックする。
- -s: 書式チェック後に確認を求めることなく設定内容を表示
- -v: smb.conf に指定していないデフォルト値も表示
ユーザーマッピング
Linux ユーザー名に複数の Windows ユーザーを紐づけて共有する場合は次のようにマッピングファイルに記述する。 マッピングファイルは username map
パラメーターで指定する。
[Linux ユーザー名] = [マッピングするクライアントユーザー名のリスト]
ファイルの非表示
veto fires = [/ファイル名]
: 指定したファイルを非表示にし、アクセスできなくするhide files = [/ファイル名]
: 指定したファイルを非表示にするが、アクセスはできる
NW アクセス許可
host allow = [ホストもしくはネットワークのリスト]
: アクセスを許可するhost deny = [ホストもしくはネットワークのリスト]
: アクセスを拒否する
プリンター共有
[print] セクションにプリンタードライバーのパスを指定する。 Windows では print]セクションにプリンタードライバーのパスを指定する。Windowsではprint から最初にデバイスドライバーを検索する。
Winbind
Windows NT ドメイン、あるいは Windows Active Directory ドメインのアカウントを Samba サーバー上で UNIX アカウントとして利用する仕組みである。
- winbindd: Windows ドメインからユーザー情報を取得するデーモン
- wbinfo: winbindd が Windows ドメインから取得したユーザーアカウントなどを表示するコマンド
- -u: Windows ドメインから取得したユーザーアカウントを表示
- pam_winbind.so: winbindd が取得したユーザーの認証を行う PAM モジュール
- libnss_winbind.so: winbindd からユーザーアカウントを取得するための NSS (Name Service Switch) 共有ライブラリ
Winbind 設定手順
手動、もしくは authconfig, authconfig-tui, authconfig-gtk などのツールを実行して設定する。
/etc/nsswitch.conf
にキーワードwinbind を追加する
passwd: files winbind
group: files winbind
/etc/pam.d/system-auth
に pam_winbind.so の記述を追加する
auth sufficient pam_winbind.so use_first_pass
account [default=bad success=ok user_unknown=ignore] pam_winbind.so
password sufficient pam_winbind.so use_authtok
- 必要に応じて、
/etc/samba/smb.conf
に Winbind の設定を追加する
[global]
idmap config * : range = 30000-40000
Windows Active Directory
Windows Server で提供されるディレクトリサービスである。
- LDAP によるユーザー、グループ、コンピューター、サービスの管理
- Kerberos によるユーザー認証
- DNS によるドメイン内の名前解決
Kerberos 認証
MIT で開発されたユーザー認証システムである。 ネットワーク上の Kerberos サーバー (KDC) がユーザー名やユーザーキーなど、ユーザー認証情報を管理する。 クライアントはサービスを受けたいサーバーに接続する前に Kerberos サーバーに接続し、認証のためのチケットを発行する。 そのチケットを持って、サーバーとクライアント間で暗号化された通信で認証を行う。 Kerberos 認証システムによって管理される領域をレルム (realm) と呼ぶ。
- クライアントは TGT (Ticket Granting Ticket) の発行を認証サーバーへリクエストする
- 認証サーバーはユーザーの秘密鍵で暗号化した TGT をユーザーに送信する
- ユーザーは TGT を自分の秘密鍵で復号化し、チケット発行サーバーにサービスチケットの発行をリクエストする
- チケット発行サーバーは TGT のユーザー情報を KDC の TGT 秘密鍵により復号化してプリンシパルを検証し、サーバーの秘密鍵で暗号化したサービスチケットをユーザーに送信する
- ユーザーはサービスチケットをサーバーに送信する
- サーバーは自分の秘密鍵でサービスチケットを復号化し、内容を検証する
Samba サーバーをメンバーサーバーに追加
- 次のように
smb.conf
で設定する。- workgroup: ドメイン名の最下層要素名を指定
- realm: ドメイン名を大文字で指定
- netbios name: サーバーの DNS ホスト名を指定
- server role: member server と指定
- security: ads と指定
- Kerberos 認証のため設定ファイル
/etc/krb5.conf
を編集する。- [libdefaults]: kinit などのコマンド実行時のデフォルト値を指定
- [realms]: kdc にレルムを管理する Kerberos サーバーの DNS ホスト名あるいは IP アドレスを指定
- [domain_realm]: 左端に . をつけてドメイン名からレルム名への対応を記述
- Active Directory ドメインに参加する。
- kinit コマンドで Kerberos サーバーから管理者のチケットを取得
net ads join
コマンドを実行し、Active Directory ドメインに参加
NFS サーバーの設定
Network File System は Sun Microsystems で開発された UNIX 系システムのファイル共有の標準である。 ネットワーク上のサーバーのディレクトリをローカルのディレクトリに接続して共有できる。
NFSv3 サーバーは次の 2 つのサービスで構成される。
- mountd: クライアントからのマウント要求に対するサービス
- nfsd: マウント後のファイルアクセスに対するサービス
また、 NFSv3 まではセッション層のプロトコルである RPC (Remote Procedure Call) とプレゼンテーション層のプロトコルである XDR (eXternal Data Representation) 上で実装されている。 RPC では portmap デーモン (portmapper) が RPC プログラム番号とポート番号のマッピング情報を提供する。 クライアントは NFS サーバーにリクエストを出す前に portmap に RPC プログラム番号と対応するポート番号を問い合わせ、そのポート番号にリクエストを出す。 ポート番号と RPC プログラム番号のマッピング情報は rpcinfo
コマンドで表示できる。
NFSv4 では固定的なポート番号 2049 でサービスを提供する。 これにより、NFS をファイアウォール越しにも使えるようになった。
ACL
クライアントに対するアクセス制御は /etc/exports
に記述する。 NFS での共有の許可は export と呼ぶ。
ディレクトリ ホスト名(オプション,...) ホスト名(オプション,...)
- ディレクトリ: エクスポートするディレクトリを指定
- ホスト名: クライアントのホスト名を指定
- オプション: エクスポートのオプション
オプション
主なオプション | 説明 |
---|---|
ro | read-only で共有許可する (デフォルト) |
rw | read と write で共有許可する |
root_squash | root 権限でのアクセスを anonymous ユーザーでのアクセスにマップする (デフォルト) |
no_root_squash | root 権限でのアクセスを許可する |
all_squash | すべてのアクセスの uid と gid を anonymous uid (65534) と gid (65534) にマップする |
anonuid=uid | squash 時にマッピングする uid を指定する |
anonuid=gid | squash 時にマッピングする gid を指定する |
sync | ディスクへの書き込み後に応答を返す (デフォルト) |
async | ディスクへの書き込み前に応答を返す。パフォーマンスが改善されるが障害時にデータ損失の可能性がある |
fsid=0 | 擬似ルートとしてディレクトリをマウントする |
擬似ルートとしてマウントしたディレクトリは他のディレクトリを配下のディレクトリとして共有される。 擬似ルート以下は単独のファイルシステムとしてエクスポートオプションを指定可能。
exportfs コマンド
ディレクトリのエクスポート、アンエクスポートの実行及び現在のエクスポート設定を表示する。
exportfs
exportfs [-u] [-o オプション] クライアント名:ディレクトリ
exportfs -a [-u]
exportfs -r
exportfs -v
- -a:
/etc/exports
ファイルに記述されたすべてのディレクトリをエクスポートする - -o:
/etc/exports
と同じ形式でオプションを指定する - -r:
/etc/exports
ファイルの記述に従って、再度エクスポート及びアンエクスポートする - -u: 指定されたディレクトリをアンエクスポートする
- -v: 詳細情報を表示する
NFS サーバーのマウント
NFS サーバーのファイルシステムをマウントするには mount コマンドを使用する。 起動時に自動でマウントするには /etc/fstab
に設定を記述する。
mount [-t nfs] -o [オプション] NFS サーバー名:ディレクトリ マウントポイント
- rw: 読み書き可能でマウントする (デフォルト)
- ro: 読み込みのみでマウントする
- hard: サーバーから応答があるまで要求を繰り返す (デフォルト)
- soft: サーバーから応答がなければタイムアウトとなりエラー終了する
- fg: サーバーから応答がない場合、フォアグラウンドで mount を実行する (デフォルト)
- bg: サーバーから応答がない場合、バックグラウンドで mount を実行する
- intr: サーバーから応答がない場合、インタラプトシグナルにより mount を終了する
- nfsvers=バージョン: NFS のバージョンを指定する
NFS のデーモン
プログラム | v3 | v4 | 説明 |
---|---|---|---|
rpc.nfsd | ◯ | ◯ | NFS サービスを提供 |
rpc.idmapd | – | ◯ | ユーザー名のマッピングを提供 |
rpc.mountd | ◯ | – | マウントサービスを提供 |
rpc.statd | ◯ | – | NFS サーバー及びクライアントのリブート通知のモニタリングとリブート後のロックを回復する |
idmapd の設定
設定ファイルは /etc/idmapd.conf
である。
- Mapping: ローカルアカウントに一致しないユーザー及びグループをローカルアカウント及びローカルグループにマッピングする
- Translation: ユーザー名のマッピングメソッドを指定する (nsswitch, umich_ldap, static)
- Static: Translation セクションで static メソッドを指定した場合の GSS 認証での
プリンシパル名@レルム名
からローカルアカウントへのマッピングを指定する
nfsstat コマンド
クライアントが発行した NFS リクエストと RPC リクエスト、サーバーが受信した NFS リクエストと RPC リクエストなどについての統計情報を表示する。 オプションなしで実行した老婆愛のデフォルトは -scrn
である。
nfsstat [オプション]
- -s: サーバー側の統計表示
- -c: クライアント側の統計表示
- -n: NFS の統計表示
- -r: RPC の統計表示
- -o ファシリティ: 指定したファシリティの統計を表示する
- nfs: NFS の統計表示
- rpc: RPC の統計表示
- net: ネットワーク層の統計表示
- fh: サーバーのファイルハンドルキャッシュの統計表示
- rc: サーバーの応答キャッシュの統計表示
- all: すべて表示
showmount コマンド
NFS サーバーの mountd に問い合わせて NFS の共有についての情報を表示する。
showmount [オプション] [NFS サーバー]
- -e: NSF サーバーがエクスポートしているディレクトリとクライアントの一覧を表示する
- -a: クライアントのホスト名とマウントしているディレクトリの一覧を表示する
コメント