Bir hizmetin neden yeniden başlatıldığını ve bunu kimin yaptığını bilmenin bir yolu var mı?


10
  • Ubuntu 14.04
  • clamav 0.98.7

Sorun clamav-daemonneredeyse her gün yeniden başlatılıyor:

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Çalışıyorsa bir soruna neden oldu :

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

Başlangıçta "neredeyse" dedim:

/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.

Gördüğün gibi:

  • 29 ve 30 Ağustos'ta olmadı
  • ki bu çoğu zaman 06:27 civarında yeniden zaman cron.dailyrun

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

İçeriği /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=$?

Clamav-daemon için bir logrotate dosyası vardır:

/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
     }

ancak günlüğü yeniden yükler:

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

auditdİkili dosyayı izlemek için kullanabileceğimizi biliyorum ve işte örnek bir günlük:

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, ... clamavkullanıcısının UID'si :

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

Bu durumda sorun gidermenin başka bir yolu var mı?


@HBruijn için yanıt:

AV tanımlarını güncelledikten sonra muhtemelen freshclam?

Hakkında düşündüm. İşte günlük:

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)

Bu konuda emin değilim ama freshclam güncelleme hakkında istiridye bildirmek için bir "iç mekanizması" var gibi görünüyor. Ve bundan sonra veritabanını yeniden yükleyebilir, işlemi yeniden başlatmaya gerek yoktur. Onaylayabilir misin?

Ayrıca, zaman damgasından, clamav-daemon'un bir saat freshclam güncelleme veritabanından sonra yeniden başladığını gördüm. Bu normal mi?


GÜNCELLEME Sal 1 Eyl 22:10:49 ICT 2015

ancak freshclam'ın güncelleme hakkında istiridye bildirmek için bir "iç mekanizması" var gibi görünüyor. Ve bundan sonra veritabanını yeniden yükleyebilir, işlemi yeniden başlatmaya gerek yoktur.

Bir test yaparak bunun doğru olduğunu onaylayabilirim:

  • aralığı bir dakika olarak değiştirmek için freshclam.conf dosyasını düzenleyin ( Checks 1440)
  • clamav-freshclam'ı yeniden başlat
  • cd / var / lib / clamav
  • rm daily.cvd
  • bir dakika bekle

    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)
    

ve clamav-daemon yeniden başlatılmaz.


Orijinal soruya cevap verdim.
quanta

1
Çok emin değilim, bu yüzden tam bir cevap yerine benim geçici yorumum ... ☺
HBruijn

1
Belki hangi işlem clamav pid dosyasını siler bulmaya çalışın? askubuntu.com/questions/48844/...
strangeman

2
Kukla, aşçı, cfengine gibi, müdahale edebilecek herhangi bir yapılandırma yönetim sistemi kullanmıyor musunuz?
Soumyadip DM

2
@SoumyadipDM: Günümü kurtardın. Yorumunuzu bir cevap olarak göndermekten çekinmeyin, kabul edip size bir ödül vereceğim: D.
quanta

Yanıtlar:


7

Lütfen Kukla, Şef, CFEngine vb. Gibi herhangi bir yapılandırma yönetim sistemi kullanıp kullanmadığınızı kontrol edin. Servislere düzenli aralıklarla müdahale edebilirler. Bunu düzeltmek için yapılacak tam işlem, hizmetin yapılandırma yönetim sisteminde nasıl kullanıldığına bağlıdır.


5

Kendime not.

İş önbelleğinden çıktı:

----------
          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 formülüne bakın:

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

watchEd eyaletlerinde hiçbir şey değişmedi:

----------
          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:

Hizmet neden yeniden başlatıldı?

Aradığım watch_in, pid dosyasını yöneten bir durum buldum ve pid dosyası değiştiğinde hizmet yeniden başlatılacak:

{%- 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 %}

Çıktısında salt-run jobs.lookup_jid <job id number>şunu gördüm:

----------
          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

Böylece, bu pid dosyasının sahibi / grubu olarak değiştirildi clamav. Son olarak, clamav arka plan programının ağ modunda rootkullanıcı olarak çalışmasının nedenini buldum . Bu nedenle, pid dosyası olarak oluşturuldu root. Bu nedenle, pid dosyasını yöneten durum aşağıdaki gibi değiştirilmelidir:

{%- call manage_pid('/var/run/clamav/clamd.pid', 'root', 'root', 'clamav-daemon', 664) %}
- pkg: clamav-daemon
{%- endcall %}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.