web-dev-qa-db-ja.com

ansible:centos7でauditdサービスを再起動する方法依存関係に関するエラーが発生する

私のプレイブックには、audit.rulesを更新してから、auditdサービスを再起動するハンドラーに通知するタスクがあります。

task:
  - name:  6.6.7 - audit rules configuration
    template: src=X/ansible/templates/auditd_rules.j2
              dest=/etc/audit/rules.d/audit.rules
              backup=yes
              owner=root group=root mode=0640
     notify:
   - restart auditd


  handlers:
    - name: restart auditd
      service: name=auditd state=restarted

プレイブックが実行されると、監査ルールが更新され、auditdの再起動が要求されますが、これは以下のように失敗します。

RUNNING HANDLER [restart auditd] ***********************************************
fatal: [ipX-southeast-2.compute.internal]: FAILED! => {"changed": false, "failed": true, "msg": "Unable to restart service auditd: Failed to restart auditd.service: Operation refused, unit auditd.service may be requested by dependency only.\n"}

Auditdのユニット定義を見ると、refuseManualStop = yesがわかります。これがサービスを再開できない理由ですか?新しい監査ルールを採用するために、これをどのように克服するのでしょうか。

 systemctl cat auditd.service
# /usr/lib/systemd/system/auditd.service
[Unit]
Description=Security Auditing Service
DefaultDependencies=no
After=local-fs.target systemd-tmpfiles-setup.service
Conflicts=shutdown.target
Before=sysinit.target shutdown.target
RefuseManualStop=yes
ConditionKernelCommandLine=!audit=0
Documentation=man:auditd(8) https://people.redhat.com/sgrubb/audit/

[Service]
ExecStart=/sbin/auditd -n
## To not use augenrules, copy this file to /etc/systemd/system/auditd.service
## and comment/delete the next line and uncomment the auditctl line.
## NOTE: augenrules expect any rules to be added to /etc/audit/rules.d/
ExecStartPost=-/sbin/augenrules --load
#ExecStartPost=-/sbin/auditctl -R /etc/audit/audit.rules
ExecReload=/bin/kill -HUP $MAINPID
# By default we don't clear the rules on exit. To enable this, uncomment
# the next line after copying the file to /etc/systemd/system/auditd.service
#ExecStopPost=/sbin/auditctl -R /etc/audit/audit-stop.rules

[Install]
WantedBy=multi-user.target
6
Matzuba

手動停止をNOに変更して、試してください

Sudoサービスauditdrestart

これが機能する場合、コードも機能します

systemctl start auditd

そして

systemctl enable auditd

バージョンCentOSバージョン7用です。さらにヘルプが必要な場合は、リンクをたどってください。

リンク

CentOS7で監査

0
Ranadip Dutta

これは、 Red Hat Bugzilla#1026648 および Anisble Issue#22171(github) レポートで(ほとんど)調査、議論、および解決されています。

解決策

  • Ansible serviceモジュールパラメータuse=serviceを使用して、systemdの収集されたファクト値(/sbin/serviceを呼び出す)の代わりに/sbin/systemctlユーティリティの実行を強制します。このような:
    • - service: name=auditd state=restarted use=service
  • プレイブックの例(Pastebin.com)

回避策:

  • Ansible commandモジュールを使用して、次のようにサービス実行可能ファイルを明示的に実行します:
    • - command: /sbin/service auditd restart

分析-根本原因:

  • これは、auditd.serviceユニットのアップストリームパッケージングによって作成された問題です。 systemctlが作用した場合、開始/停止/再起動しません。明らかに 設計による
  • さらに、Ansibleサービス制御関数によってさらに複雑になります。この関数は、システムファクトが収集され、「ansible_service_mgr」が「systemd」を返すときに識別される優先メソッドを使用します。これは、service.unitの管理に使用される実際のモジュールとは関係ありません。
  • RHEL開発チームは、今後のアップデートで問題と見なされた場合に修正する可能性があります(ERRATA)
  • Ansible開発チームは回避策を提供し、(2.2の時点で)serviceモジュールをuseパラメーターで更新しました。
9
0xSheepdog

パラメータrefuseManualStopを変更しないでください。システムを安全に保つためにあります。代わりにできることは、新しいルールを作成した後、ホストを再起動し、それを待ってから、プレイブックを続行することです。

プレイブックの例:

- name: Create new rules file
  copy:
    src: 01-personalized.rules
    dest: /etc/audit/rules.d/01-personalized.rules
    owner: root
    group: root
    mode: 0600
  register: result

- name: Reboot server
  Shell: "sleep 5 && reboot"
  async: 1
  poll: 0
  when: result is changed

- name: Wait for server to become available
  wait_for_connection:
    delay: 60
    sleep: 5
    timeout: 300
  when: result is changed
1

指定したコマンドでコマンドモジュールを使用しても、期待どおりに機能または動作しないため、auditdサービスの再読み込みを正しく検証します。

経由で確認

service auditd status

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-starting_the_audit_service.html

代わりに試してください

service auditd condrestart

:)

1
user3362899

答えが遅れているかもしれませんが、他の誰かが同じ問題に直面している場合は、次のコマンドでauditdの新しいルールをインポートできます。

auditctl -R /path/to_your_rules_file

したがって、新しいルールをインポートするためにauditd.serviceを再起動する必要はありません。

1
Abel