Bonjour à tous,

Je suis sous CentOS 6.6 et j'ai un soucis pour faire fonctionner un script avec le démon "snmpd" et la configuration en "exec" qui exécute plusieurs scripts. (cf ici).

Mon fichier "/etc/snmd/snmpd.conf":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
rocommunity macommunaute
exec check1 /home/check_1.sh
exec check2 /home/check_2.sh 500 3600
Pour info, le "check_1" vérifient la présence de certains processus. Le check_2 lui vient lire faire un "stat" sur un fichier de log situé dans "/home/foo/bar".

En exécution normale, les scripts fonctionnent. En local avec "snmpwalk", ça marche pour un le "check_1" mais pas pour le "check_2" et idem en remote depuis la machine supervisant. Comme vous vous en doutez, en désactivant selinux ("setenforce 0"), cela marche très bien sauf que j'ai pas le droit de faire ça dans ma boite. Ma connaissance de selinux est limité à google et du troubleshooting basique style "chcon" "restorecon" et "semanage", c'est pourquoi je viens chercher de l'aide ici.

Je vais essayer de fournir un max d'information.

Le fichier de log posant problème est "/home/foo/bar/file.log". Le "/home/foo" appartient à l'utilisateur "foo".

L'erreur SNMP
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
[root@monitor plugins]# snmpwalk -v2c -c macommunaute 192.168.0.10 nsExtendOutput1
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."check2" = STRING: stat: cannot stat `/home/foo/bar/file.log': Permission denied
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."check1" = STRING: OK - process foo is running
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."check2" = STRING: stat: cannot stat `/home/foo/bar/file.log': Permission denied
CRITICAL - 37885 seconds since last change of /home/foo/bar/file.log
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."check1" = STRING: OK - process foo is running
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."check2" = INTEGER: 2
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."check1" = INTEGER: 1
NET-SNMP-EXTEND-MIB::nsExtendResult."check2" = INTEGER: 2
NET-SNMP-EXTEND-MIB::nsExtendResult."check1" = INTEGER: 0
Le contexte des scripts:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
[root@server home]# ls -lZ
-rwxr-xr-x. root root  unconfined_u:object_r:snmpd_exec_t:s0 check_2.sh
-rwxr-xr-x. root root unconfined_u:object_r:snmpd_exec_t:s0 check_1.sh
Ah oui, et j'ai changé le contexte des scripts pour qu'ils puissent être exécutés par "snmp" de cette façon
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
chcon -t snmpd_exec_t check_1.sh
chcon -t snmpd_exec_t check_2.sh
Le contexte du fichier de log "file.log" à lire dans "/home/foo/bar/"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
[root@server bar]# ls -lZ
-rw-r--r--. foo  foo  system_u:object_r:snmpd_exec_t:s0 file.log
Enfin, un grep sur le "audit.log". Ci dessous les 2 lignes que j'ai récupère après un appel "snmpwalk" en remote depuis le machine de supervision.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
[root@server home]# tail -f /var/log/audit/audit.log | grep snmp
type=AVC msg=audit(1442479825.583:15989): avc:  denied  { read } for  pid=21563 comm="stat" name="tomcat" dev=dm-0 ino=266631 scontext=unconfined_u:system_r:snmpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=lnk_file
type=SYSCALL msg=audit(1442479825.583:15989): arch=c000003e syscall=6 success=no exit=-13 a0=7fff8766bf6c a1=7fff8766bb90 a2=7fff8766bb90 a3=7fff8766b8f0 items=0 ppid=21562 pid=21563 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=2413 comm="stat" exe="/usr/bin/stat" subj=unconfined_u:system_r:snmpd_t:s0 key=(null)

Est-ce que vous avez une solution pour ce problème typiquement "selinux" ?

Je reste dispo s'il y a besoin d'informations supplémentaires. Merci d'avance !

tohtor