Merci pour vos pistes : j'y suis arrivé ...
Voici la marche à suivre pour les intéressés :
1) créer un nouvel utilisateur (non administrateur) autre qu'admin et qui aura accès à l'interface de management limitée
- Code: Tout sélectionner
htpasswd /var/ipcop/auth/users monuser
2) modifier les droits d'accès aux fichiers cgi dans /etc/httpd/conf/httpd.conf
les fichiers (pages) ne pouvant être accédé que par l'administrateur doivent être déclarées comme ceci :
- Code: Tout sélectionner
<Files proxy.cgi>
AllowOverride None
Options None
AuthName "Restricted"
AuthType Basic
AuthUserFile /var/ipcop/auth/users
Require user admin
</Files>
les fichiers (pages) pouvant être accédé par l'administrateur et le user doivent être déclarées comme ceci :
- Code: Tout sélectionner
<Files status.cgi>
AllowOverride None
Options None
AuthName "Restricted"
AuthType Basic
AuthUserFile /var/ipcop/auth/users
Require user admin monuser
</Files>
faire les modifications pour tous les cgi (/home/httpd/cgi-bin) ... Attention, pour que l'utilisateur ait accès aux graphes, il faut le rajouter ici :
- Code: Tout sélectionner
<DirectoryMatch "/home/httpd/html/(graphs|sgraph)">
AuthName "Restricted"
AuthType Basic
AuthUserFile /var/ipcop/auth/users
require user admin monuser
</DirectoryMatch>
Redémarrer le serveur pour que les modifications soient prises en compte :
- Code: Tout sélectionner
killall httpd
httpd -DSSL
3) modifier le fichier perl /var/ipcop/header.pl pour qu'il adapte les menus en fonction de l'utilisateur web connecté
Dans le sub genmenu, ajouter le test suivant :
- Code: Tout sélectionner
### Admin's menu (tous les menus sont présent)
if ($ENV{'REMOTE_USER'} eq "admin"){
%{$menu{'1.system'}}=(
'contents' => $Lang::tr{'alt system'},
'uri' => '',
'statusText' => "IPCop $Lang::tr{'alt system'}",
'subMenu' => [[ $Lang::tr{'alt home'} , '/cgi-bin/index.cgi', "IPCop $Lang::tr{'alt home'}" ],
[ $Lang::tr{'updates'} , '/cgi-bin/updates.cgi', "IPCop $Lang::tr{'updates'}" ],
[ $Lang::tr{'sspasswords'} , '/cgi-bin/changepw.cgi', "IPCop $Lang::tr{'sspasswords'}" ],
[ $Lang::tr{'ssh access'} , '/cgi-bin/remote.cgi', "IPCop $Lang::tr{'ssh access'}" ],
[ $Lang::tr{'gui settings'} , '/cgi-bin/gui.cgi', "IPCop $Lang::tr{'gui settings'}" ],
[ $Lang::tr{'backup'} , '/cgi-bin/backup.cgi', "IPCop $Lang::tr{'backup'} / $Lang::tr{'restore'}" ],
[ $Lang::tr{'shutdown'} , '/cgi-bin/shutdown.cgi', "IPCop $Lang::tr{'shutdown'} / $Lang::tr{'reboot'}" ],
[ $Lang::tr{'credits'} , '/cgi-bin/credits.cgi', "IPCop $Lang::tr{'credits'}" ]]
);
%{$menu{'2.status'}}=(
'contents' => $Lang::tr{'status'},
'uri' => '',
'statusText' => "IPCop $Lang::tr{'status information'}",
'subMenu' => [[ $Lang::tr{'sssystem status'} , '/cgi-bin/status.cgi', "IPCop $Lang::tr{'system status information'}" ],
[ $Lang::tr{'ssnetwork status'} , '/cgi-bin/netstatus.cgi', "IPCop $Lang::tr{'network status information'}" ],
[ $Lang::tr{'system graphs'} , '/cgi-bin/graphs.cgi', "IPCop $Lang::tr{'system graphs'}" ],
[ $Lang::tr{'sstraffic graphs'} , '/cgi-bin/graphs.cgi?graph=network', "IPCop $Lang::tr{'network traffic graphs'}" ],
[ $Lang::tr{'ssproxy graphs'} , '/cgi-bin/proxygraphs.cgi', "IPCop $Lang::tr{'proxy access graphs'}" ],
[ $Lang::tr{'connections'} , '/cgi-bin/connections.cgi', "IPCop $Lang::tr{'connections'}" ]]
);
### (code des 7 menus ici)
}
### User's menu (ici j'ai limité l'accès à system (home+shutdown), status (all), logs (all))
else {
%{$menu{'1.system'}}=(
'contents' => $Lang::tr{'alt system'},
'uri' => '',
'statusText' => "IPCop $Lang::tr{'alt system'}",
'subMenu' => [[ $Lang::tr{'alt home'} , '/cgi-bin/index.cgi', "IPCop $Lang::tr{'alt home'}" ],
[ $Lang::tr{'shutdown'} , '/cgi-bin/shutdown.cgi', "IPCop $Lang::tr{'shutdown'} / $Lang::tr{'reboot'}" ]]
);
%{$menu{'2.status'}}=(
'contents' => $Lang::tr{'status'},
'uri' => '',
'statusText' => "IPCop $Lang::tr{'status information'}",
'subMenu' => [[ $Lang::tr{'sssystem status'} , '/cgi-bin/status.cgi', "IPCop $Lang::tr{'system status information'}" ],
[ $Lang::tr{'ssnetwork status'} , '/cgi-bin/netstatus.cgi', "IPCop $Lang::tr{'network status information'}" ],
[ $Lang::tr{'system graphs'} , '/cgi-bin/graphs.cgi', "IPCop $Lang::tr{'system graphs'}" ],
[ $Lang::tr{'sstraffic graphs'} , '/cgi-bin/graphs.cgi?graph=network', "IPCop $Lang::tr{'network traffic graphs'}" ],
[ $Lang::tr{'ssproxy graphs'} , '/cgi-bin/proxygraphs.cgi', "IPCop $Lang::tr{'proxy access graphs'}" ],
[ $Lang::tr{'connections'} , '/cgi-bin/connections.cgi', "IPCop $Lang::tr{'connections'}" ]]
);
%{$menu{'3.network'}}=(
'contents' => $Lang::tr{'network'},
'uri' => '',
'statusText' => "IPCop $Lang::tr{'network configuration'}",
'subMenu' => [[ "" , "", "" ]]
);
%{$menu{'4.services'}}=(
'contents' => $Lang::tr{'alt services'},
'uri' => '',
'statusText' => "IPCop $Lang::tr{'alt services'}",
'subMenu' => [[ "" , "", "" ]]
);
%{$menu{'5.firewall'}}=(
'contents' => $Lang::tr{'firewall'},
'uri' => '',
'statusText' => "IPCop $Lang::tr{'firewall'}",
'subMenu' => [[ "" , "", "" ]]
);
%{$menu{'6.vpns'}}=(
'contents' => $Lang::tr{'alt vpn'},
'uri' => '',
'statusText' => "IPCop $Lang::tr{'virtual private networking'}",
'subMenu' => [[ "" , "", "" ]]
);
%{$menu{'7.mainlogs'}}=(
'contents' => $Lang::tr{'alt logs'},
'uri' => '',
'statusText' => "IPCop $Lang::tr{'alt logs'}",
'subMenu' => [[ $Lang::tr{'log settings'} , '/cgi-bin/logs.cgi/config.dat', "IPCop $Lang::tr{'log settings'}" ],
[ $Lang::tr{'log summary'} , '/cgi-bin/logs.cgi/summary.dat', "IPCop $Lang::tr{'log summary'}" ],
[ $Lang::tr{'proxy logs'} , '/cgi-bin/logs.cgi/proxylog.dat', "IPCop $Lang::tr{'proxy log viewer'}" ],
[ $Lang::tr{'firewall logs'} , '/cgi-bin/logs.cgi/firewalllog.dat', "IPCop $Lang::tr{'firewall log viewer'}" ],
[ $Lang::tr{'ids logs'} , '/cgi-bin/logs.cgi/ids.dat', "IPCop $Lang::tr{'intrusion detection system log viewer'}" ],
[ $Lang::tr{'system logs'} , '/cgi-bin/logs.cgi/log.dat', "IPCop $Lang::tr{'system log viewer'}" ]]
);
}
Remarque : j'ai laissé visible les 7 menus même si dans certain il n'y a pas de sous-menu pour des questions de compatibilité.
Normalement si on se loggue avec le user monuser, il a un accés limité à l'interface de management.
Attention, apparemment certains mods rajoutent des lignes dans ce script pour s'insérer dans les menus ... En tenir compte pour le test if - else (admin ou pas).
Voila, vos remarques sont les bienvenues