bertvv.samba

Ansibleロール bertvv.samba

Sambaをファイルサーバーとして設定するためのAnsibleロールです。

時間とリソースが不足しているため、このロールのメンテナンスを@vladghに引き継ぎました。私はもはや問題やPRを追跡することができず、新しいリリースが実際に使用できるほどの高品質であることを確認することもできません。

これまでサポートを示してくださったすべての方々、すべての貢献者、特にメンテナンスを引き受けてくれた@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_7494falseに設定すると、この修正を明示的に無効にできます。

詳細情報: 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

これにより、登録ユーザーの読み取り専用アクセスを持つ共有が作成されます。ゲストは共有の内容を見ることができません。

共有に対する書き込みアクセスを設定する良い方法は、システムユーザーグループを作成し、そのグループにユーザーを追加し、そのグループが共有のディレクトリに書き込みアクセスできるようにすることです。このロールは、グループがすでに設定されていて、ユーザーが書き込みアクセスを制御するグループのメンバーであることを前提としています。jackteachという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_includesamba_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。必要なツールを手動でインストールする手順:

  1. Docker、BATS、およびsmbclientをマシンにインストールしてください(Linuxで動作することを前提とします)。テストを開始するときにDockerコンテナが実行されていないことを確認します。
  2. Moleculeによって推奨されるように、Pythonの仮想環境を作成します。
  3. ソフトウェアツールをインストールします python3 -m pip install molecule docker yamllint ansible-lint
  4. ロールディレクトリのルートに移動し、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 TomasikBengt GigerBert Van Vreckem (メンテナー)、 Birgit CrouxDarkStar1973George HartzellIan YoungJonas HeinrichJonathan UnderwoodKarl GoetzmorbidickPaul MonteroSlavek JurkowskiSven EeckemanTiemo KieftTobias WolterTomohiko OzawaRobin Ophalvens

プロジェクトについて

This role installs and configures Samba as a file server. Deprecated, please use vladgh.samba instead.

インストール
ansible-galaxy install bertvv.samba
ライセンス
other
ダウンロード
268k
所有者
Hi! My contribs are often related to my job (teaching Linux), but are mostly done in my free time. I can't always respond quickly to PRs and Issues. Sorry!