Bonjour à tous,
J'ai un soucis de droits que je n'arrive pas à corriger malgré toutes mes tentatives. J'en fais donc appelle à vous !
**configuration**
- snmptt v1.3 de la debian Squeeze lancé en tant que daemon avec un fork en "snmptt" : options 'mode = daemon', 'daemon_fork = 1' et 'daemon_uid = snmptt' dans le snmptt.ini.
- /etc/group: 'nagios:x:106:nagios,www-data,snmptt'
- /etc/passwd: 'snmptt:x:108:106'
- ls -l /var/lib/nagios3/rw/nagios.cmd: 'prw-rw---- 1 nagios nagios 0 30 déc. 15:32 /var/lib/nagios3/rw/nagios.cmd'
- extrait d'un des fichiers de conf appelés par snmptt (c'est juste deux exemples):
EVENT newRoot .1.3.6.1.2.1.17.0.1 "Status Events" Normal
FORMAT This switch has become the new root of the STP. Vlan:$*
EXEC /etc/nagios-scripts/multiline_passive_checks.pl $A TRAP 1 "This switch has become the new root of the STP. Vlan:$1"
SDESC
The newRoot trap indicates that the sending agent has
become the new root of the Spanning Tree; the trap is
sent by a bridge soon after its election as the new
root, e.g., upon expiration of the Topology Change Timer,
immediately subsequent to its election. Implementation
of this trap is optional.
Variables:
EDESC
#
#
#
EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
FORMAT Link up on interface $1. Admin state: $2. Operational state: $3
EXEC /etc/nagios-scripts/traps_update-host-service_linkchange.sh "$A" "$2" "$1" "$4"
SDESC
A linkUp trap signifies that the SNMP entity, acting in an
agent role, has detected that the ifOperStatus object for
one of its communication links left the down state and
transitioned into some other state (but not into the
notPresent state). This other state is indicated by the
included value of ifOperStatus.
Variables:
1: ifIndex
2: ifAdminStatus
3: ifOperStatus
EDESC
En fonction de la trap reçue soit c'est le script perl qui est exécuté soit c'est le script bash.
A noter que le script bash fait appelle à ce même script perl à la fin de son exécution.
**Problème**
>> Cas 1: Quand le script bash est lancé par snmptt à l'arrivée d'une trap il n'y a aucun problème. Le script bash s'exécute correctement puis il lance le script perl qui s'exécute également sans problème.
>> Cas 2: Quand le script perl est lancé directement par snmptt à l'arrivée d'une trap un problème de droit se produit: "sh: cannot create /var/lib/nagios3/rw/nagios.cmd: Permission denied" dans mes logs d'erreur du script.
>> Cas 3: Quand j'exécute le script perl manuellement en tant que user snmptt (su - snmptt) il fonctionne sans problème.
**Tests effectués**
J'ai ajouté la ligne suivante dans mon script perl:
`/usr/bin/id >> "/tmp/tmp.log"`Et en reprenant mes 3 cas précédent j'obtiens:
>> Cas 1: 'uid=0(root) gid=0(root) groups=0(root)'
>> Cas 2: 'uid=0(root) gid=0(root) euid=108(snmptt) groups=106(nagios)'
>> Cas 3: 'uid=108(snmptt) gid=106(nagios) groupes=106(nagios),111(snmptt)'
Ces résultats me laissent fortement dubitatif.
**Questions*
Du coup je m'interroge.
Pourquoi dans le Cas2 cela ne fonctionne pas ?
Pourquoi dans le Cas1 le script est lancé en root et pas en user snmptt?
Comment est-ce que je peux faire pour que cela fonctionne, dans l'idéal avec les mêmes droits que dans le cas3 ?
Actuellement je fais un 'chmod o+rw /var/lib/nagios3/rw/nagios.cmd' pour que cela fonctionne dans tous les cas mais c'est franchement crade.
Je voudrai conserver les droits d'origine du pipe nagios à savoir '660' et non pas '666' pour des raisons de sécurités, de propretés, etc...
Si vous avez des idées je suis preneur !
Merci