bertvv.samba
Ansibleロール bertvv.samba
Sambaをファイルサーバーとして設定するためのAnsibleロールです。
時間とリソースが不足しているため、このロールのメンテナンスを@vladghに引き継ぎました。私はもはや問題やPRを追跡することができず、新しいリリースが実際に使用できるほどの高品質であることを確認することもできません。
- 新しいGitHubリポジトリはこちらで見つけることができます: https://github.com/vladgh/ansible-collection-vladgh-samba
- Ansible Galaxyページ: https://galaxy.ansible.com/vladgh/samba
ansible-galaxy collection install vladgh.samba --upgrade
でインストール
これまでサポートを示してくださったすべての方々、すべての貢献者、特にメンテナンスを引き受けてくれた@vladghに感謝の気持ちを伝えます。
このロールの主な責任は次のとおりです:
- 必要なパッケージのインストール
- SELinux設定の構成(SELinuxがアクティブな場合)
- 共有ディレクトリの作成
- Sambaユーザーとパスワードの管理
- 共有へのアクセス管理
以下の項目はこのロールの関心事項ではなく、別のロールを使用して設定する必要があります(例:bertvv.rh-base):
- ファイアウォール設定の管理
- システムユーザーの作成。Sambaユーザーはすでにシステムユーザーとして存在する必要があります。
このロールを気に入っている/使用している場合は、ぜひスターを付けてください!ありがとうございます!
CVE-2017-7494
リモートコード実行の脆弱性がSambaサーバーのインストールに影響を与える可能性があります。Sambaバージョン3.5.0と4.6.4以前のものが影響を受けます。システムにSELinuxが有効になっている場合、これは影響を受けません。
このロールはインストールされたSambaのバージョンが脆弱性の影響を受けているか確認し、提案された回避策を適用します: 設定の[global]
セクションにnt pipe support = no
を追加します。この設定は、Windowsクライアントによる共有のブラウジングを無効にします。
必要に応じて、ロール変数samba_mitigate_cve_2017_7494
をfalse
に設定すると、この修正を明示的に無効にできます。
詳細情報: https://access.redhat.com/security/cve/cve-2017-7494
要件
特別な要件はありません。
ロール変数
変数 | デフォルト | コメント |
---|---|---|
samba_apple_extensions |
no | yesの場合、Apple特有のSMB拡張のサポートを有効にします。Time Machineのサポートに必要です。 |
samba_create_varwww_symlinks |
false | trueの場合、ウェブドキュメントルートに共有へのシンボリックリンクが作成されます。 |
samba_cups_server |
localhost:631 | グローバルオプションcups server の値(samba_printer_type が"cups"の場合のみ必要)。 |
samba_domain_master |
true | trueの場合、smbdがWAN全体のブラウズリストを集約します。 |
samba_global_include |
- | [global]セクションに読み込まれるSamba互換の設定ファイル(下記参照)。 |
samba_guest_account |
- | 不明なユーザーのためのゲストアカウント。 |
samba_homes_include |
- | [homes]セクションに読み込まれるSamba互換の設定ファイル(下記参照)。 |
samba_interfaces |
[] | ブラウジング、名前登録などに使用されるネットワークインターフェースのリスト。 |
samba_load_homes |
false | trueの場合、ユーザーのホームディレクトリにアクセス可能になります。 |
samba_load_printers |
false | trueの場合、ホストに接続されたプリンタが共有されます。 |
samba_local_master |
true | trueの場合、nmbdがサブネットのローカルマスターになろうとします。 |
samba_log |
- | ログファイルを設定します。未定義のままにすると、syslogでのロギングが行われます。 |
samba_log_size |
5000 | ログファイルの最大サイズを設定します。 |
samba_log_level |
0 | Sambaのログレベルを設定します。0は最も詳細でなく、10は大量のデバッグ出力です。 |
samba_map_to_guest |
bad user |
未登録ユーザーが共有にアクセスしたときの動作。 |
samba_mitigate_cve_2017_7494 |
true | CVE-2017-7494の緩和策が、macOS High Sierraなどの一部のクライアントに影響を与えます。 |
samba_netbios_name |
{{ ansible_hostname }} |
このサーバーのNetBIOS名。 |
samba_passdb_backend |
tdbsam |
パスワードデータベースのバックエンド。 |
samba_preferred_master |
true | trueの場合、nmbdがワークグループの優先マスターブラウザであることを示します。 |
samba_realm |
- | レルムドメイン名。 |
samba_printer_type |
cups | グローバルオプションprinting およびprintcap name の値。 |
samba_security |
user |
Sambaのセキュリティ設定。 |
samba_server_max_protocol |
- | サーバーが提供する最大プロトコルバージョンを指定します。 |
samba_server_min_protocol |
- | サーバーが提供する最小プロトコルバージョンを指定します。 |
samba_server_string |
fileserver %m |
サーバーのコメント文字列。 |
samba_shares_root |
/srv/shares |
共有用のディレクトリがこのディレクトリ内に作成されます。 |
samba_shares |
[] | 共有定義を含む辞書のリスト。詳細は下記を参照。 |
samba_users |
[] | 共有にアクセスできるユーザーを定義する辞書のリスト。 |
samba_wins_support |
true | trueの場合、SambaがWINSサーバーとして動作します。 |
samba_workgroup |
WORKGROUP |
サーバーのワークグループ名。 |
ユーザーの定義
ユーザーが共有にアクセスできるようにするには、Samba用のパスワードを取得する必要があります:
samba_users:
- name: alice
password: ecila
- name: bob
password: bob
- name: charlie
password: eilrahc
残念ながら、パスワードは現在平文でなければなりません。また、このロールは既存のユーザーのパスワードを変更しません。
これらのユーザーはすでにホスト上にアカウントを持っている必要があります!システムユーザーの作成はこのロールの関心事項ではないため、別途行う必要があります。一つの方法は、私のロールbertvv.rh-baseを使用することです。例:
rhbase_users:
- name: alice
comment: 'Alice'
password: !!
shell: /sbin/nologin
groups:
[...]
このユーザーはシステム上でログインできず(例:SSHで)、Sambaの共有にのみアクセスできるようになります。
共有の定義
Sambaの共有を定義し、アクセス制御を構成することは難解で、Sambaの設定が正しいだけでなく、ユーザーとファイルのアクセス権、SELinux設定も関与するため、簡単ではありません。このロールはこのプロセスを簡素化することを試みます。
共有を指定するには、少なくとも名前を指定する必要があります:
samba_shares:
- name: readonlyshare
これにより、登録ユーザーの読み取り専用アクセスを持つ共有が作成されます。ゲストは共有の内容を見ることができません。
共有に対する書き込みアクセスを設定する良い方法は、システムユーザーグループを作成し、そのグループにユーザーを追加し、そのグループが共有のディレクトリに書き込みアクセスできるようにすることです。このロールは、グループがすでに設定されていて、ユーザーが書き込みアクセスを制御するグループのメンバーであることを前提としています。jack
とteach
という2人のユーザーがpirates
グループのメンバーだと仮定します。この共有の定義は、pirates
に対して読み書き権限を付与します:
samba_shares:
- name: piratecove
comment: 'A place for pirates to hang out'
group: pirates
write_list: +pirates
ゲストはこの共有にアクセスできず、登録ユーザーは読み取り可能です。アクセス制御はさらに調整できます。読み取りアクセスをゲストにも拡張することができます(public: yes
を追加)または特定のユーザーまたはグループに制限することができます(valid_users: +pirates
を追加)。書き込みアクセスは特定の海賊(例えば、write_list: jack
)に制限できます。共有に追加されたファイルは指定されたグループに追加され、グループの書き込みアクセスはデフォルトで付与されます。
以下は、glusterfsボリュームを共有するために複数のVFSオブジェクトモジュールを設定する例です。VFSオブジェクトオプションはオプションです。必要なVFSオブジェクトモジュールはこのロールの外で存在/インストールされている必要があります。このケースでは、centosにsamba-glusterfsがインストールされていました。どのようにインストールするか、またデフォルトのVFSオブジェクトモジュールについてはSambaのドキュメントを参照してください。
samba_shares:
- name: gluster-app_deploys
comment: 'For samba share of volume app_deploys'
vfs_objects:
- name: audit
options:
- name: facility
value: LOCAL1
- name: priority
value: NOTICE
- name: glusterfs
options:
- name: volume
value: app_deploys
- name: logfile
value: /var/log/samba/glusterfs-app_deploys.%M.log
- name: loglevel
value: 7
path: /
read_only: no
guest_ok: yes
write_list: tomcat
group: tomcat
共有オプションの完全な概要は以下の通りです。name
のみ必須で、他はオプションです。
オプション | デフォルト | コメント |
---|---|---|
browseable |
- | この共有がファイルブラウザに表示されるかどうかを制御します。 |
comment |
- | 共有のためのコメント文字列。 |
create_mode |
0664 |
詳細についてはSambaのドキュメントを参照。 |
directory_mode |
0775 |
詳細についてはSambaのドキュメントを参照。 |
include_file |
- | この共有用に含まれるSamba互換の設定ファイル(下記参照)。 |
force_create_mode |
0664 |
詳細についてはSambaのドキュメントを参照。 |
force_directory_mode |
0775 |
詳細についてはSambaのドキュメントを参照。 |
group |
users |
共有内のファイルに追加されるユーザーグループ。 |
guest_ok |
- | ゲストアクセスを許可します。 |
name (必須) |
- | 共有の名前。 |
owner |
root |
パスのオーナーを設定します。 |
path |
/{{samba_shares_root}}/{{name}} | 共有ディレクトリへのパス。 |
public |
no |
ゲストユーザーの読み取りアクセスを制御します。 |
setype |
samba_share_t |
共有ディレクトリのSELinuxタイプ。 |
valid_users |
- | 登録ユーザーの読み取りアクセスを制御します。対応するSamba設定の構文を使用。 |
vfs_objects |
- | 詳細についてはSambaのドキュメントを参照。 |
writable |
- | ゲスト向けの書き込み可能。 |
write_list |
- | 登録ユーザーの書き込みアクセスを制御します。対応するSamba設定の構文を使用。 |
valid_users
およびwrite_list
の値は、カンマ区切りのユーザーリストとする必要があります。名前の前に+
または@
が付けられたものはグループとして解釈されます。 Sambaの設定に関するドキュメントにはこれらのオプションに関する詳細があります。
任意の設定ファイルの追加
このロールでサポートされていない設定を、メイン設定ファイルから含めるカスタム設定ファイルを追加できます。インクルードファイルには3つのタイプがあります: グローバルセクション用、ホームセクション用、個々の共有用です。カスタム設定ファイルは、マスタープレイブックの場所に対して相対的にtemplates
というサブディレクトリに置いてください。そして、それらをsamba_global_include
、samba_homes_include
、またはsamba_shares
定義のinclude_file
変数で指定します。
カスタム設定ファイルはJinjaテンプレートと見なされるため、その中でAnsible変数を使用することができます。設定ファイルは構文が正しいことが検証されます。
例えば、templates/global-include.conf
を含めるには、以下のように設定します:
samba_global_include: global-include.conf
templates/
ディレクトリを指定する必要はありません。
同様に、piratecove
共有用のtemplates/piratecove-include.conf
を含めるには(上記の例を参照)、以下のように設定します:
samba_shares:
- name: piratecove
comment: 'A place for pirates to hang out'
group: pirates
write_list: +pirates
include_file: piratecove-include.conf
test playbookにはいくつかの例があります。カスタム設定ファイルは、docker-testsブランチで見つけることができます。
依存関係
依存関係はありません。
例プレイブック
test playbookを参照してください。
テスト
このロールはAnsible Moleculeを使用してテストされます。テストは各コミットやPRの後にTravis CIで自動的に実行されます。
このMolecule設定は以下を行います:
- YamllintとAnsible Lintを実行
- Dockerコンテナを作成
- 構文チェックを実行
- test playbookでロールを適用
- BATSで受け入れテストを実行
このプロセスはサポートされているLinuxディストリビューションごとに繰り返されます。
ローカルテスト環境
ローカルテスト環境を設定したい場合は、Vagrant+VirtualBoxに基づく再現可能なセットアップを使用できます: https://github.com/bertvv/ansible-testenv。必要なツールを手動でインストールする手順:
- Docker、BATS、およびsmbclientをマシンにインストールしてください(Linuxで動作することを前提とします)。テストを開始するときにDockerコンテナが実行されていないことを確認します。
- Moleculeによって推奨されるように、Pythonの仮想環境を作成します。
- ソフトウェアツールをインストールします
python3 -m pip install molecule docker yamllint ansible-lint
- ロールディレクトリのルートに移動し、
molecule test
を実行します。
Moleculeはテスト後に自動的にコンテナを削除します。コンテナを直接確認したい場合は、molecule converge
の後にmolecule login --host HOSTNAME
を実行します。
Dockerコンテナは、Jeff GeerlingによってAnsibleテスト専用に作成されたイメージに基づいています(geerlingguy/docker-DISTRO-ansible
と名付けられたイメージを探してください)。彼のイメージのいずれかを使用できますが、meta/main.ymlで言及されているディストリビューションのみがサポートされています。
デフォルトの設定ではCentOS 7のコンテナが起動します。異なるディストリビューションを選択するには、次のコマンドでMOLECULE_DISTRO
変数を設定します:
MOLECULE_DISTRO=debian9 molecule test
または
MOLECULE_DISTRO=debian9 molecule converge
両方のサーバーで受け入れテストを実行するには、molecule verify
を使用するか、手動で次のように実行します:
SUT_IP=172.17.0.2 bats molecule/default/files/samba.bats
SUT_IP
を初期化する必要があり、これはテストされるシステムのIPアドレスです。サーバーsmb1
はIPアドレス172.17.0.2を持つ必要があります。
貢献
問題、機能リクエスト、アイデアなどは大歓迎で、Issueセクションに投稿できます。
プルリクエストも大歓迎です。PRを提出する最良の方法は、このGitHubプロジェクトをフォークし、提案する変更のトピックブランチを作成し、そのブランチを自分のフォークにプッシュすることです。GitHubはそのブランチに基づいてPRを簡単に作成できます。下記の貢献者リストにも自分を追加することをお忘れなく!
ライセンス
2条項BSDライセンス、詳細はLICENSE.mdを参照。
貢献者
このロールは、以下の人々の貢献によって実現されました。さらなる改善アイデアがあれば、ぜひ提案してください!
問題、機能リクエスト、アイデア、提案などは、Issueセクションに投稿できます。
プルリクエストも大歓迎です。提案した変更のためのトピックブランチを作成してください。さもなくば、マージ後にフォークでコンフリクトが発生します。プルリクエストで、下記の貢献者リストに自分を追加することも躊躇しないでください!
Ben Tomasik、 Bengt Giger、 Bert Van Vreckem (メンテナー)、 Birgit Croux、 DarkStar1973、 George Hartzell、 Ian Young、 Jonas Heinrich、 Jonathan Underwood、 Karl Goetz、 morbidick、 Paul Montero、 Slavek Jurkowski、 Sven Eeckeman、 Tiemo Kieft、 Tobias Wolter、 Tomohiko Ozawa、 Robin Ophalvens。
This role installs and configures Samba as a file server. Deprecated, please use vladgh.samba instead.
ansible-galaxy install bertvv.samba