Une classe générique nommé authip a été crée. Son rôle est de permettre de spéficier des affectation entre des IP (ou des range d'IP) et des ressources.
Utilisation actuelle :
- restriction sur les logins ftp. Une variable nommée auth_ip_ftp_default_yes dans la table variable permet de définir, comme son nom l'indique, si les connexion sont authorisée par défaut, ou bien si on force les gens à creer des authorisations.
Comment ca marche
Dans la DB
mysql> select * from authorised_ip limit 1; +----+-----+--------------+--------+-------+ | id | uid | ip | subnet | infos | +----+-----+--------------+--------+-------+ | 1 | 0 | 88.164.195.3 | 32 | | +----+-----+--------------+--------+-------+ mysql> select * from authorised_ip_affected limit 1; +----+------------------+----------+------------+ | id | authorised_ip_id | protocol | parameters | +----+------------------+----------+------------+ | 13 | 11 | ftp | 2 | +----+------------------+----------+------------+
Dans le principe
Une table authorised_ip contient les ip, le subnet, un champ "infos" pour les commentaire (peu d'utilisateur se rapellent a quel lieu/personne correspond une ip).
La table authorised_ip_affected contient un id pointant vers authorised_ip, un "protocol" qui permet d'identifier le type de ressource, et un "parametre" qui est utilisé pour savoir quelle ressource précise est rattaché.
Exemple :
- protocole FTP
- parametre correspond a l'id de la table ftpusers, ce qui permet de retrouver l'user affecté (nota : ca peut très bien être vide. C'est la classe qui utilise l'infos, on est pas obliger de l'avoir)
Dans les classes
C'est fait pour être générique au maximum, afin de pouvoir facilement rajouter des restrictions (qui me parle de restrictions sur l'accés au panel ?).
Seule contrainte : la classe doit contenir une fonction authip_class. Cette fonction renvoie un tableau contenant les informations nécessaire pour la gestion des authorisations.
Exemple pour la classe ftp :
function authip_class() {
$c = Array();
$c['name']="FTP";
$c['protocol']="ftp";
$c['values']=Array();
foreach ($this->get_list() as $v ) {
$c['values'][$v['id']]=$v['login'];
}
return $c;
}
Ca renvoie un tableau structurer ainsi :
Array
(
[name] => FTP // Nom du protocol dans un terme humain
[protocol] => ftp // Nom du protocole pour la machine
[values] => Array // Un tableau de valeur permettant d'avoir des correspondance parameter<=>indication humaine
// (dans le cas du ftp : id de la table <=> login ftp
(
[1] => admin_plop // id=>login
[2] => admin_arf
)
)
Les classes peuvent contenir deux autres fonctions :
- authip_on_create
- authip_on_delete
Ces fonction sont appelé à toute modification, création ou suppression d'affectation de ressource (ou de l'ip affecté a une/des ressources). Elles sont appelé avec en parametre un tableau correspondant aux valeurs de l'entrée authorised_ip_affected concernée.
Nota
Quelques trucs spéciaux :
- les ip contenu dans la table authorised_ip et où uid==0 sont des IP qu'on trust systématiquement. Pratique pour que les admins fassent des tests sans ruiner la conf des users.
- des fonctions ont été créé dans mysql pour permettre de faire des calculs sur les IPv6. Il faudra surement les droper lors du passage à Mysql 6
