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":
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".
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
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
Le contexte des scripts:
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
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
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
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 chcon -t snmpd_exec_t check_1.sh chcon -t snmpd_exec_t check_2.sh
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 [root@server bar]# ls -lZ -rw-r--r--. foo foo system_u:object_r:snmpd_exec_t:s0 file.log
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
Partager