Comment puis-je donner une connection très dépouillée pour voir les journaux?

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.