มีวิธีรู้หรือไม่ว่าเหตุใดจึงเริ่มบริการใหม่และใครเป็นผู้ทำ


10
  • Ubuntu 14.04
  • clamav 0.98.7

ปัญหาclamav-daemonเริ่มต้นใหม่เกือบทุกวัน:

Sep  1 06:30:00 x-master clamd[6778]: Pid file removed.
clamd[6778]: --- Stopped at Tue Sep  1 06:30:00 2015
clamd[5979]: clamd daemon 0.98.7 (OS: linux-gnu, ARCH: x86_64, CPU: x86_64)
clamd[5979]: Running as user root (UID 0, GID 0)
clamd[5979]: Log file size limited to 4294967295 bytes.
clamd[5979]: Reading databases from /var/lib/clamav
clamd[5979]: Not loading PUA signatures.
clamd[5979]: Bytecode: Security mode set to "TrustSigned".

มันทำให้เกิดปัญหาหากclamdscanทำงาน:

/etc/cron.daily/clamav_scan:
ERROR: Could not connect to clamd on x.x.x.x: Connection refused

สังเกตว่าฉันพูดว่า "เกือบ" ในตอนแรก:

/var/log/syslog:Sep  1 06:30:00 x-master clamd[6778]: Pid file removed.
/var/log/syslog.1:Aug 31 06:27:54 x-master clamd[20128]: Pid file removed.
/var/log/syslog.4.gz:Aug 28 06:28:34 x-master clamd[4475]: Pid file removed.
/var/log/syslog.5.gz:Aug 27 06:27:47 x-master clamd[21466]: Pid file removed.

อย่างที่เห็น:

  • มันไม่ได้เกิดขึ้นในวันที่ 29 และ 30 สิงหาคม
  • มันมักจะเริ่มต้นใหม่ประมาณ 06:27 ซึ่งเป็นเวลาที่cron.dailyทำงาน

    27 6 * * * root nice -n 19 ionice -c3 run-parts --report /etc/cron.daily
    

เนื้อหาของ/etc/cron.daily/clamav_scan:

find / $exclude_string ! \( -path "/tmp/clamav-*.tmp" -prune \) ! \( -path "/var/lib/elasticsearch" -prune \) ! \( -path "/var/lib/mongodb" -prune \) ! \( -path "/var/lib/graylog-server" -prune \) -mtime -1 -type f -print0 | xargs -0 clamdscan --quiet -l "$status_file" || retval=$?

มีไฟล์ logrotate สำหรับ clamav-daemon:

/var/log/clamav/clamav.log {
     rotate 12
     weekly
     compress
     delaycompress
     create 640  clamav adm
     postrotate
     /etc/init.d/clamav-daemon reload-log > /dev/null
     endscript
     }

แต่มันแค่โหลดบันทึกใหม่:

Sep  1 02:30:24 uba-master clamd[6778]: SIGHUP caught: re-opening log file.

ฉันรู้ว่าเราสามารถใช้auditdในการตรวจสอบไฟล์ไบนารีและนี่คือตัวอย่างบันทึก:

ausearch -f /usr/sbin/clamd                                                                                                        [2/178]
----
time->Tue Sep  1 07:56:44 2015
type=PATH msg=audit(1441094204.559:15): item=1 name=(null) inode=2756458 dev=fc:00 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1441094204.559:15): item=0 name="/usr/sbin/clamd" inode=3428628 dev=fc:00 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1441094204.559:15):  cwd="/"
type=EXECVE msg=audit(1441094204.559:15): argc=1 a0="/usr/sbin/clamd"
type=SYSCALL msg=audit(1441094204.559:15): arch=c000003e syscall=59 success=yes exit=0 a0=7ffd277e03dc a1=7ffd277dfa78 a2=7ffd277dfa88 a3=7ffd277df570 items=2
 ppid=5708 pid=5946 auid=4294967295 uid=109 gid=114 euid=109 suid=109 fsuid=109 egid=114 sgid=114 fsgid=114 tty=pts1 ses=4294967295 comm="clamd" exe="/usr/sbin/clamd" key=(null)

109 คือ UID ของ ... clamavผู้ใช้:

getent passwd clamav clamav:x:109:114::/var/lib/clamav:/bin/false

มีวิธีอื่นในการแก้ไขปัญหาในกรณีนี้หรือไม่


ตอบกลับ @HBruijn:

เป็นไปได้ที่จะมีแคลนสดหลังจากอัปเดตนิยาม AV หรือไม่

ฉันคิดเกี่ยวกับเรื่องนี้. นี่คือบันทึก:

Sep  1 05:31:04 x-master freshclam[16197]: Received signal: wake up
Sep  1 05:31:04 x-master freshclam[16197]: ClamAV update process started at Tue Sep  1 05:31:04 2015
Sep  1 05:31:04 x-master freshclam[16197]: main.cvd is up to date (version: 55, sigs: 2424225, f-level: 60, builder: neo)
Sep  1 05:31:05 x-master freshclam[16197]: Downloading daily-20865.cdiff [100%]
Sep  1 05:31:09 x-master freshclam[16197]: daily.cld updated (version: 20865, sigs: 1555338, f-level: 63, builder: neo)
Sep  1 05:31:10 x-master freshclam[16197]: bytecode.cvd is up to date (version: 268, sigs: 47, f-level: 63, builder: anvilleg)
Sep  1 05:31:13 x-master freshclam[16197]: Database updated (3979610 signatures) from db.local.clamav.net (IP: 168.143.19.95)
Sep  1 05:31:13 x-master freshclam[16197]: Clamd successfully notified about the update.
Sep  1 05:31:13 x-master freshclam[16197]: --------------------------------------
Sep  1 04:34:10 x-master clamd[6778]: SelfCheck: Database status OK.
Sep  1 05:31:13 x-master clamd[6778]: Reading databases from /var/lib/clamav
Sep  1 05:31:22 x-master clamd[6778]: Database correctly reloaded (3974071 signatures)

ฉันไม่แน่ใจเกี่ยวกับเรื่องนี้ แต่ดูเหมือนว่า freshclam มี "กลไกภายใน" เพื่อแจ้ง clamd เกี่ยวกับการอัปเดต และหลังจากนั้นมันก็สามารถโหลดฐานข้อมูลไม่จำเป็นต้องรีสตาร์ทกระบวนการ คุณยืนยันได้ไหม

ยิ่งไปกว่านั้นจากการประทับเวลาฉันเห็นว่า clamav-daemon รีสตาร์ทหลังจากฐานข้อมูลการอัพเดต freshclam หนึ่งชั่วโมง เป็นเรื่องปกติหรือไม่


อัพเดทอังคาร 1 ก.ย. 22:10:49 ICT 2015

แต่ดูเหมือนว่า freshclam มี "กลไกภายใน" เพื่อแจ้ง clamd เกี่ยวกับการอัพเดท และหลังจากนั้นมันก็สามารถโหลดฐานข้อมูลไม่จำเป็นต้องรีสตาร์ทกระบวนการ

ฉันสามารถยืนยันได้ว่าถูกต้องโดยทำการทดสอบ:

  • แก้ไขไฟล์ freshclam.conf เพื่อเปลี่ยนช่วงเวลาเป็นนาที ( Checks 1440)
  • รีสตาร์ท clamav-freshclam
  • cd / var / lib / clamav
  • rm Daily.cvd
  • รอหนึ่งนาที

    Sep  1 14:49:25 p freshclam[7654]: Downloading daily.cvd [100%]
    Sep  1 14:49:28 p freshclam[7654]: daily.cvd updated (version: 19487, sigs: 1191913, f-level: 63, builder: neo)
    Sep  1 14:49:28 p freshclam[7654]: Reading CVD header (bytecode.cvd):
    Sep  1 14:49:28 p freshclam[7654]: OK
    Sep  1 14:49:28 p freshclam[7654]: bytecode.cvd is up to date (version: 245, sigs: 43, f-level: 63, builder: dgoddard)
    Sep  1 14:49:31 p freshclam[7654]: Database updated (3616181 signatures) from clamav.local (IP: 10.0.2.2)
    Sep  1 14:49:31 p freshclam[7654]: Clamd successfully notified about the update.
    Sep  1 14:49:31 p freshclam[7654]: --------------------------------------
    Sep  1 14:49:32 p clamd[6693]: Reading databases from /var/lib/clamav
    Sep  1 14:49:39 p clamd[6693]: Database correctly reloaded (3610621 signatures)
    

และ clamav-daemon ไม่ได้ถูกรีสตาร์ท


ฉันตอบในคำถามเดิม
quanta

1
ไม่แน่ใจเกินไปดังนั้นความเห็นเบื้องต้นของฉันมากกว่าคำตอบแบบเต็ม ... ☺
HBruijn

1
อาจลองค้นหาว่ากระบวนการใดลบไฟล์ clamav pid? askubuntu.com/questions/48844/…
strangeman

2
คุณไม่ได้ใช้ระบบจัดการการตั้งค่าใด ๆ เช่นหุ่นเชพเชฟ cfengine ที่สามารถแทรกแซงได้หรือไม่?
Soumyadip DM

2
@SoumyadipDM: คุณบันทึกวันของฉันไว้ รู้สึกอิสระที่จะโพสต์ความคิดเห็นของคุณเป็นคำตอบฉันจะยอมรับมันและให้รางวัล: D
quanta

คำตอบ:


7

โปรดตรวจสอบว่าคุณใช้ระบบการจัดการการกำหนดค่าใด ๆ เช่น Puppet, Chef, CFEngine และอื่น ๆ พวกเขาสามารถรบกวนการบริการในช่วงเวลาปกติ สำหรับการดำเนินการที่ถูกต้องเพื่อแก้ไขสิ่งนี้ขึ้นอยู่กับวิธีการใช้บริการในระบบจัดการการกำหนดค่า


5

หมายเหตุถึงตัวฉันเอง

เอาต์พุตจากแคชของงาน:

----------
          ID: clamav-daemon
    Function: service.running
      Result: True
     Comment: Service restarted
     Started: 06:27:52.736890
    Duration: 12997.632 ms
     Changes:
              ----------
              clamav-daemon:
                  True

ดูสูตร clamav:

  clamav-daemon:
    service:
      - running
      - order: 50
      - require:
        - service: clamav-freshclam
      - watch:
        - pkg: clamav-daemon
        - file: clamav-daemon
        - user: clamav

ไม่มีอะไรเปลี่ยนแปลงในwatchรัฐ ed:

----------
          ID: clamav-daemon
    Function: pkg.latest
      Result: True
     Comment: Package clamav-daemon is already up-to-date.
     Started: 06:27:51.531415
    Duration: 53.224 ms
     Changes:

----------
          ID: clamav-daemon
    Function: file.managed
        Name: /etc/clamav/clamd.conf
      Result: True
     Comment: File /etc/clamav/clamd.conf is in the correct state
     Started: 06:27:51.760019
    Duration: 625.075 ms
     Changes:

----------
          ID: clamav
    Function: user.present
      Result: True
     Comment: User clamav is present and up to date
     Started: 06:27:51.590214
    Duration: 2.455 ms
     Changes:

เหตุใดจึงเริ่มบริการใหม่

ฉันกำลังมองหาwatch_inสถานะที่จัดการไฟล์ pid และบริการจะเริ่มต้นใหม่หากไฟล์ pid มีการเปลี่ยนแปลง:

{%- macro manage_pid(path, user, group, watch_in_service, mode=644) -%}
    {%- if salt['file.file_exists'](path) %}
{{ path }}:
  file:
    - managed
    - user: {{ user }}
    - group: {{ group }}
    - mode: {{ mode }}
    - replace: False
        {%- if caller is defined -%}
            {%- for line in caller().split("\n") -%}
                {%- if loop.first %}
    - require:
                {%- endif %}
{{ line|trim|indent(6, indentfirst=True) }}
            {%- endfor -%}
        {%- endif %}
    - watch_in:
      - service: {{ watch_in_service }}
    {%- else %}
# {{ path }} does not exist, no need to manage
    {%- endif -%}
{%- endmacro -%}

{%- call manage_pid('/var/run/clamav/clamd.pid', 'clamav', 'clamav', 'clamav-daemon', 664) %}
- pkg: clamav-daemon
{%- endcall %}

ในผลลัพธ์ของsalt-run jobs.lookup_jid <job id number>ฉันเห็นสิ่งนี้:

----------
          ID: /var/run/clamav/clamd.pid
    Function: file.managed
      Result: True
     Comment:
     Started: 06:27:52.392555
    Duration: 2.364 ms
     Changes:
              ----------
              group:
                  clamav
              user:
                  clamav

ดังนั้นเจ้าของ / กลุ่มของไฟล์ pid clamavที่ได้รับการเปลี่ยนไป ในที่สุดฉันพบว่าเหตุผลที่ clamav daemon กำลังทำงานในโหมดเครือข่ายในฐานะrootผู้ใช้ ดังนั้นไฟล์ pid rootถูกสร้างขึ้นเป็น ดังนั้นสถานะที่จัดการไฟล์ pid จะต้องเปลี่ยนเป็นดังนี้:

{%- call manage_pid('/var/run/clamav/clamd.pid', 'root', 'root', 'clamav-daemon', 664) %}
- pkg: clamav-daemon
{%- endcall %}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.