<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>38108</bug_id>
          
          <creation_ts>2020-02-17 15:25:53 +0300</creation_ts>
          <short_desc>ping plugin: ping_host_add failed: Operation not permitted</short_desc>
          <delta_ts>2020-02-18 17:14:16 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>collectd-ping</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>NOTABUG</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Makeenkov">amakeenk</reporter>
          <assigned_to name="Anton Farygin">rider</assigned_to>
          <cc>asy</cc>
    
    <cc>at</cc>
    
    <cc>cas</cc>
    
    <cc>crux</cc>
    
    <cc>ender</cc>
    
    <cc>lav</cc>
    
    <cc>ldv</cc>
    
    <cc>mike</cc>
    
    <cc>qa_viy</cc>
    
    <cc>rider</cc>
    
    <cc>shaba</cc>
    
    <cc>viy</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>187912</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Makeenkov">amakeenk</who>
    <bug_when>2020-02-17 15:25:53 +0300</bug_when>
    <thetext>Версия пакета: collectd-ping-5.10.0-alt1

Система: ALT Workstation x86_64

Не работает плагин ping. При запуске collectd в логах появляются такие ошибки (collectd при этом запускается успешно):

collectd[2553]: plugin_load: plugin &quot;ping&quot; successfully loaded.
collectd[2553]: ping plugin: ping_host_add (www.google.com) failed: Operation not permitted
collectd[2553]: ping plugin: No host could be added to ping object. Giving up.

Шаги воспроизведения:

1. Установить collectd collectd-ping 

2. В файле /etc/collectd.conf раскомментировать следующие строки (изменить параметры Host, SourceAddress, Device на нужные значения):

LoadPlugin ping

&lt;Plugin ping&gt;
        Host &quot;www.google.com&quot;
        Interval 1.0
        Timeout 0.9
        TTL 255
        SourceAddress &quot;8.8.8.8&quot;
        AddressFamily &quot;any&quot;
        Device &quot;eth0&quot;
        MaxMissed -1
&lt;/Plugin&gt;

3. Запустить collectd (предварительно необходимо удалить строку LoadPlugin rrdtool, либо установить пакет collectd-rrdtool, см. баг https://bugzilla.altlinux.org/36950):

# systemctl start collectd

# systemctl status collectd</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187913</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Shabalin">shaba</who>
    <bug_when>2020-02-17 16:10:14 +0300</bug_when>
    <thetext>что показыват
control ping ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187915</commentid>
    <comment_count>2</comment_count>
    <who name="Alexander Makeenkov">amakeenk</who>
    <bug_when>2020-02-17 16:16:34 +0300</bug_when>
    <thetext>(Ответ для Alexey Shabalin на комментарий #1)
&gt; что показыват
&gt; control ping ?

# control ping
public</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187925</commentid>
    <comment_count>3</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-02-17 19:31:09 +0300</bug_when>
    <thetext>Это фича, нужно выдать collectd CAPABILITY для ping. 

Читайте документацию, там всё есть.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187926</commentid>
    <comment_count>4</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-02-17 19:33:40 +0300</bug_when>
    <thetext>выдаётся через unit systemd для collectd</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187931</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2020-02-17 22:17:24 +0300</bug_when>
    <thetext>Вообще хорошо бы вместо такого костыля сделать штатный механизм по управлению capabilities (возможно, на базе или навроде control).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187933</commentid>
    <comment_count>6</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2020-02-18 00:14:24 +0300</bug_when>
    <thetext>(In reply to Anton Farygin from comment #3)
&gt; Это фича, нужно выдать collectd CAPABILITY для ping.

Вы точно ничего не путаете?  Странно, что ping&apos;у не нужна, а collectd&apos;у нужна.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187934</commentid>
    <comment_count>7</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-02-18 07:04:29 +0300</bug_when>
    <thetext>Желающие могут поправить это поведение в liboping:
The I&lt;oping&gt; library opens a raw socket to be able to send ICMP packets. On
most systems normal users are not allowed to do this. This is why on most
systems the L&lt;ping(1)&gt; utility is installed as SetUID-root. Since, when using
this module, no external process is spawned B&lt;this&gt; process needs the
appropriate permissions. This means that either your script has to run as
superuser or, under Linux, needs the C&lt;CAP_NET_RAW&gt; capability.

Но ping же у нас SGID&apos;ный, так что не совсем честно говорить о том, что ему не нужны CAPABILITY. Нужны, просто они у него есть в момент запуска.

Вот если сделать так:
chmod 0711 /usr/libexec/ping/ping
то и у нас ping работать не будет под обычным пользователем.

в случае с collectd capability сбрасываются на стороне systemd, в самом collectd нет никакой поддержки управление capabilities, кроме проверок их наличия.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187935</commentid>
    <comment_count>8</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-02-18 07:06:06 +0300</bug_when>
    <thetext>(Ответ для Michael Shigorin на комментарий #5)
&gt; Вообще хорошо бы вместо такого костыля сделать штатный механизм по
&gt; управлению capabilities (возможно, на базе или навроде control).

Штатный механизм - это юниты systemd. 

Администратор, использующий collectd, должен понимать как его настраивать.
Можно положить нужный юнит в пакет но я бы не хотел этого делать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187945</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Shabalin">shaba</who>
    <bug_when>2020-02-18 11:10:01 +0300</bug_when>
    <thetext>(Ответ для Anton Farygin на комментарий #8)
&gt; (Ответ для Michael Shigorin на комментарий #5)
&gt; &gt; Вообще хорошо бы вместо такого костыля сделать штатный механизм по
&gt; &gt; управлению capabilities (возможно, на базе или навроде control).
&gt; 
&gt; Штатный механизм - это юниты systemd. 
&gt; 
&gt; Администратор, использующий collectd, должен понимать как его настраивать.
&gt; Можно положить нужный юнит в пакет но я бы не хотел этого делать.

Можно положить в пакет collectd-ping дополнительный конфиг для юнита а /(lib|etc)/systemd/system/collectd.service.d/ping.conf с добавлением только одного нужного параметра. И все будет работать из коробки.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187952</commentid>
    <comment_count>10</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2020-02-18 13:33:23 +0300</bug_when>
    <thetext>(In reply to Anton Farygin from comment #7)
&gt; Желающие могут поправить это поведение в liboping:
&gt; The I&lt;oping&gt; library opens a raw socket to be able to send ICMP packets. On
&gt; most systems normal users are not allowed to do this. This is why on most
&gt; systems the L&lt;ping(1)&gt; utility is installed as SetUID-root. Since, when using
&gt; this module, no external process is spawned B&lt;this&gt; process needs the
&gt; appropriate permissions. This means that either your script has to run as
&gt; superuser or, under Linux, needs the C&lt;CAP_NET_RAW&gt; capability.
&gt; 
&gt; Но ping же у нас SGID&apos;ный, так что не совсем честно говорить о том, что ему
&gt; не нужны CAPABILITY. Нужны, просто они у него есть в момент запуска.

ping&apos;у не нужны CAPABILITY, потому что ping использует другой механизм в ядре (ping socket).  Судя по процитированному, collectd-ping написан давно и не умеет использовать этот механизм.  Это объясняет разницу.

В таком случае остаётся только сделать так, как предлагает Алексей.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187953</commentid>
    <comment_count>11</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-02-18 13:49:49 +0300</bug_when>
    <thetext>Я не хочу делать из коробки так, как процитировал Алексей. Считаю такое поведение из пакета не правильным. 

Системный администратор сам должен принять решение о том, что бы настроить нужные capability, а не поставить готовое поведение из пакета. 

По мне так лучше пусть этот плагин заработает после донастройки, чем всему collectd молча дадут какие-то дополнительные привилегии.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187975</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2020-02-18 17:08:17 +0300</bug_when>
    <thetext>(Ответ для Anton Farygin на комментарий #8)
&gt; (Ответ для Michael Shigorin на комментарий #5)
&gt; &gt; Вообще хорошо бы вместо такого костыля сделать штатный механизм по
&gt; &gt; управлению capabilities (возможно, на базе или навроде control).
&gt; Штатный механизм - это юниты systemd. 
Это механизм, зависящей от реализации pid 1, которая умеет SEGV&apos;иться.
Соответственно штатным в production он у нас не является (спроси ldv@).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187976</commentid>
    <comment_count>13</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-02-18 17:14:16 +0300</bug_when>
    <thetext>А без systemd у collectd нет проблем с ping ;)</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>