J'ai plusieurs files journaux dans des dossiers sur un système RHEL 5:
/var/log/syslog-ng/A/ /var/log/syslog-ng/B/ /var/log/syslog-ng/C/
Je voudrais pouvoir donner à certains users le droit de voir / de supprimer tous les files des dossiers B
et C
(et des sous-directorys), mais pas de voir le contenu du dossier A
ni le file /var/log/syslog-ng
lui /var/log/syslog-ng
même.
Ce que je peux imaginer est un shell réduit avec les seules commands tail
, cd
, grep
et vi
, avec cd
seulement capable de naviguer dans les dossiers B
et C
Un seul user / mot de passe partagé entre les personnes qui utiliseraient cette information est bien.
Comment reorderiez-vous d'y parvenir? Est-ce possible?
(nous le réalisons actuellement avec un script bash disponible via Apache HTTPD, avec la configuration Apache nécessitant un mot de passe si le path parcouru passe au-dessus des dossiers B ou C. Le script est maladroit et hacky pour le less et ne fonctionne pas fournir une forme de mise à jour en direct en dehors d'un méta-rafraîchissement sur la page HTML générée – l'utilisation de ssh et de la queue serait une expérience user beaucoup mieux et less sujette aux erreurs)
Le shell bash passe en mode restreint (lorsqu'il est appelé rbash
) qui empêche les users – entre autres choses – de modifier PATH
ou de modifier le directory courant avec cd
; en le couplant avec la ressortingction de contrôle d'access fournie par les groupes UNIX, vous pouvez limiter les users à afficher uniquement les files d'un certain directory.
Je le mettrais en application de cette façon:
Créer des groupes A
, B
, etc. – chaque groupe peut lire (mais pas écrire ) le directory correspondant et les files journaux qu'il contient:
$ ls -lF /var/log/syslog-ng drwxr-x--- root A ... A/ drwxr-x--- root B ... B/ [...] $ ls -l /var/log/syslog-ng/A/ -rwxr----- root A ... logfile.log -rwxr----- root A ... logfile.log.1 [...]
Modifiez /etc/group
et ajoutez des users à ces groupes en fonction des journaux que vous voulez qu'ils lisent:
$ tail /etc/group [...] A: foo B: bar
Créez un directory pour héberger les commands que vous souhaitez donner access aux visualisateurs de journal; supposons que c'est /usr/local/ressortingcted/bin
. Copiez ou reliez les commands pertinentes à ce directory.
Modifiez /etc/profile
sorte que vous configuriez le PATH
correct pour les users restreints: le PATH restreint devrait seulement inclure /usr/local/ressortingcted/bin
(ou tout autre directory qui héberge des commands restreintes).
Modifiez /etc/passwd
et assurez-vous que les users reçoivent le rbash
shell de rbash
et le rbash
/var/log/syslog-ng/XXX
à la maison. Ils peuvent maintenant se connecter mais sont emprisonnés dans le directory personnel et ne peuvent utiliser que des commands sur le PATH restreint.
Remarque: Il est facile de contourner le shell en mode restreint si vous donnez access à des commands permettant aux users d' exécuter une command arbitraire, par exemple PERL ou presque n'importe quel éditeur.
Vous pouvez exporter /var/log/syslog-ng/B
et /var/log/syslog-ng/C
via un protocole réseau tel que NFS ou Samba.
Vous pouvez créer un user avec un shell scp-only tel que scponly ou rssh . Définissez le directory personnel de cet user sur /home/log-viewers-BC
. Utilisez bindfs pour créer une vue de /var/log/syslog-ng/B
comme /home/log-viewers-BC/B
et une vue de /var/log/syslog-ng/C
/home/log-viewers-BC/C
Mais une approche .htaccess
est également un bon choix, alors faites des searchs dans un meilleur set de scripts CGI pour les mises à jour en direct.