mardi 23 janvier 2007

Script samba création de compte à partir d'un fichier texte

Script fait dans le cadre de mes études permettant la création de comptes personnalisés avec repertoire pour un serveur samba à partir d'un simple fichier texte de la forme :
login nomuser password groupeuser

Script samba
(à éxecuter en tant que root dans un terminal , taper ./nomdevotrescript pour l'éxecuter)
#!/bin/bash

cat personnes | while true ; do
read ligne
if [ "$ligne" == "" ] ; then
exit 0
fi

set -- $ligne
echo "login:"$1 "nomcomplet:"$2 "password:"$3 "groupe:"$4
user="$1"
echo "$user"
groupadd $4
useradd -m $user -g $4 -s /bin/bash
echo "$user:$3"|chpasswd
done

cat personnes | while true ; do
read ligne
if [ "$ligne" == "" ] ; then
exit 0
fi

set -- $ligne
echo "login:"$1 "nomcomplet:"$2 "password:"$3 "groupe:"$4
user="$1"
echo "$user"
echo -e "$3\n$3" | (smbpasswd -a -s $user)
chown $user:$4 /home/$user
chmod 711 /home/$user


touch /home/$user/lisezmoi.txt
echo "Bienvenue $user sur le serveur samba , vous pouvez dès à présent utiliser votre répertoire afin de stocker vos données personnelles
//en cas de perte de vos identifiants veuillez contacter l'administrateur du réseau//
Vos identifiants personnels **login $user** **password $3** **nom complet $2** **groupe $4**" > /home/$user/lisermoi.txt
chmod 711 /home/$user/lisezmoi.txt


echo "[$user]
comment = $2
path = /home/$user
read only = No
create mask = 0711
directory mask = 0711" >> /etc/samba/smb.conf


done

lundi 22 janvier 2007

Installation de chillispot 0.99 + freeradius + mysql sur une debian etch



Recquiert : -une installation de debian etch valide (pour ma part j'ai utilisé le format 180 mega , installation par le réseau , sans interface graphique , testé sur un PII 233 Mhz) et les paquets suivants : -apache apache-ssl phpmyadmin mysql-server freeradius freeradius-mysql iptables




Module TUN/TAP

Vous avez besoin du module tun.o (inclus dans les sources du kernel depuis les versions >= 2.4.7). Si vous ne l’avez pas, il faudra recompiler votre kernel (Network device support->Universal TUN/TAP device driver support pour un kernel 2.4.x) Debian ne crée pas le périphérique "tun" automatiquement. Taper les commandes suivantes


# mkdir /dev/net

# mknod /dev/net/tun c 10 200

# modprobe tun



Vérifier que le fichier /etc/modules.conf contient la ligne suivante : alias char-major-10-200 tun







dpkg -i chillispot_0.99-1_i386.deb

Copier le fichier cgi fourni dans le répertoire adéquat

cp /usr/share/doc/chillispot/hotspotlogin.cgi.gz /usr/lib/cgi-bin/

cd /usr/lib/cgi-bin

gunzip hotspotlogin.cgi.gz

chmod a+x hotspotlogin.cgi

(vous pourrez éditer ce fichier une fois chillispot fonctionnel afin de personnalisez l'installation)

Dans le fichier /usr/lib/cgi-bin/hotspotlogin.cgi, décommenter et modifier le paramètre suivant :

$uamsecret = "secretchilli" /* secret partagé entre le CGI hotspotlogin.cgi et le daemon chilli */


Dans le fichier /etc/chilli.conf, décommenter et modifier les paramètres suivants :


  1. net 192.168.1.0/24 ou laisser commenté pour utiliser la configuration par défaut192.168.182.0/24

  2. dns1 10.187.36.3 (le DNS de mon Fournisseur d’accès) ou laisser commenté pour utiliser la configuration par défaut (ie. les DNS spécifiés dans votre /etc/resolv.conf)

  3. radiuslisten 127.0.0.1 Décommenter sinon l’adresse 0.0.0.0 (NAS-IP-Address) apparaît dans les logs de freeradius

  4. radiusserver1 127.0.0.1 IP du serveur d’authentification

  5. Radiusradiusserver2 127.0.0.1 IP du serveur d’authentification Radius

  6. radiussecret secretradius secret partagé entre le serveur Radius et le daemon chilli

  7. radiusnasid portail NAS-ID : identifiant de votre chillispot

  8. radiuslocationid isocc=fr,cc=33,ac=87000,network=MonESSID

  9. dhcpif eth1 nom de l’interface reliée au point d’accès

  10. uamserver https://ipdevotreserveur/cgi-bin/hotspotlogin.cgi ou mettre https://192.168.182.1/cgi-bin/hotspotlogin.cgi si vous utilisez la configuration par défaut

  11. uamsecret secretchilli mettre le même secret que dans le fichier /usr/lib/cgi-bin/hotspotlogin.cgi

  12. uamlisten 192.168.1.1

  13. uamallowed localhost www.yahoo.fr

Règles du firewall:

# cp /usr/share/doc/chillispot/firewall.iptables /etc/chilli.iptables

# chmod u+x /etc/chilli.iptables


Vous devez avoir à l'intérieur :

EXTIF="eth0" /* interface reliée à Internet */

INTIF="eth1" /* interface reliée au point d'accès */


Si ce n’est pas déjà fait, activer le forwarding entre les interfaces réseau. Vérifier la ligne suivante existe dans le fichier /etc/network/options : ip_forward=yes

relancez ensuite les interfaces réseaux /etc/init.d/networking restart


Dans le fichier /etc/freeradius/clients.conf, modifier le paramètre suivant :
client 127.0.0.1 {

#secret = testing123

secret = secretradius /* mettre le meme secret partagé que dans le fichier /etc/chilli.conf */


modifier le fichier /etc/freeradius/sql.conf

server = "localhost" (ou x.x.x.x l'ip de votre serveur mysql)

login = "radius"

password = "xxxx"


mettre dans /etc/freeradius/radiusd.conf
authorize {
preprocess chap suffix eap #files sql
}

authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
eap
}

accounting {
detail radutmp sql
}
session {
sql
}


On s'occupe ensuite de notre base mysql

# echo "create database radius;" mysql -u root -p

# echo "grant all on radius.* to radius@'%' identified by 'motdepasse_sql'; flush privileges;" mysql -u root -p

# zcat /usr/share/doc/freeradius/examples/mysql.sql.gz mysql -u root -p radius


si vous rencontrez des problèmmes insérez le script manuellement


-- phpMyAdmin SQL Dump-- version 2.6.1-- http://www.phpmyadmin.net-- -- Serveur: localhost-- Généré le : Lundi 22 Janvier 2007 à 16:21-- Version du serveur: 4.1.9-- Version de PHP: 4.3.10-- -- Base de données: `radius`--
-- --------------------------------------------------------
-- -- Structure de la table `nas`--
CREATE TABLE `nas` ( `id` int(10) NOT NULL auto_increment, `nasname` varchar(128) NOT NULL default '', `shortname` varchar(32) default NULL, `type` varchar(30) default 'other', `ports` int(5) default NULL, `secret` varchar(60) NOT NULL default 'secret', `community` varchar(50) default NULL, `description` varchar(200) default 'RADIUS Client', PRIMARY KEY (`id`), KEY `nasname` (`nasname`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- -- Contenu de la table `nas`--
-- --------------------------------------------------------
-- -- Structure de la table `radacct`--
CREATE TABLE `radacct` ( `RadAcctId` bigint(21) NOT NULL auto_increment, `AcctSessionId` varchar(32) NOT NULL default '', `AcctUniqueId` varchar(32) NOT NULL default '', `UserName` varchar(64) NOT NULL default '', `Realm` varchar(64) default '', `NASIPAddress` varchar(15) NOT NULL default '', `NASPortId` int(12) default NULL, `NASPortType` varchar(32) default NULL, `AcctStartTime` datetime NOT NULL default '0000-00-00 00:00:00', `AcctStopTime` datetime NOT NULL default '0000-00-00 00:00:00', `AcctSessionTime` int(12) default NULL, `AcctAuthentic` varchar(32) default NULL, `ConnectInfo_start` varchar(32) default NULL, `ConnectInfo_stop` varchar(32) default NULL, `AcctInputOctets` bigint(12) default NULL, `AcctOutputOctets` bigint(12) default NULL, `CalledStationId` varchar(50) NOT NULL default '', `CallingStationId` varchar(50) NOT NULL default '', `AcctTerminateCause` varchar(32) NOT NULL default '', `ServiceType` varchar(32) default NULL, `FramedProtocol` varchar(32) default NULL, `FramedIPAddress` varchar(15) NOT NULL default '', `AcctStartDelay` int(12) default NULL, `AcctStopDelay` int(12) default NULL, PRIMARY KEY (`RadAcctId`), KEY `UserName` (`UserName`), KEY `FramedIPAddress` (`FramedIPAddress`), KEY `AcctSessionId` (`AcctSessionId`), KEY `AcctUniqueId` (`AcctUniqueId`), KEY `AcctStartTime` (`AcctStartTime`), KEY `AcctStopTime` (`AcctStopTime`), KEY `NASIPAddress` (`NASIPAddress`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- -- Contenu de la table `radacct`--
-- --------------------------------------------------------
-- -- Structure de la table `radcheck`--
CREATE TABLE `radcheck` ( `id` int(11) unsigned NOT NULL auto_increment, `UserName` varchar(64) NOT NULL default '', `Attribute` varchar(32) NOT NULL default '', `op` char(2) NOT NULL default '==', `Value` varchar(253) NOT NULL default '', PRIMARY KEY (`id`), KEY `UserName` (`UserName`(32))) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
-- -- Contenu de la table `radcheck`--
INSERT INTO `radcheck` VALUES (1, 'tux', 'Password', '==', 'tuxy');
-- --------------------------------------------------------
-- -- Structure de la table `radgroupcheck`--
CREATE TABLE `radgroupcheck` ( `id` int(11) unsigned NOT NULL auto_increment, `GroupName` varchar(64) NOT NULL default '', `Attribute` varchar(32) NOT NULL default '', `op` char(2) NOT NULL default '==', `Value` varchar(253) NOT NULL default '', PRIMARY KEY (`id`), KEY `GroupName` (`GroupName`(32))) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
-- -- Contenu de la table `radgroupcheck`--
INSERT INTO `radgroupcheck` VALUES (1, 'pingouin', 'Auth-Type', ':=', 'Local');
-- --------------------------------------------------------
-- -- Structure de la table `radgroupreply`--
CREATE TABLE `radgroupreply` ( `id` int(11) unsigned NOT NULL auto_increment, `GroupName` varchar(64) NOT NULL default '', `Attribute` varchar(32) NOT NULL default '', `op` char(2) NOT NULL default '=', `Value` varchar(253) NOT NULL default '', `prio` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `GroupName` (`GroupName`(32))) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- -- Contenu de la table `radgroupreply`--
-- --------------------------------------------------------
-- -- Structure de la table `radpostauth`--
CREATE TABLE `radpostauth` ( `id` int(11) NOT NULL auto_increment, `user` varchar(64) NOT NULL default '', `pass` varchar(64) NOT NULL default '', `reply` varchar(32) NOT NULL default '', `date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
-- -- Contenu de la table `radpostauth`--
-- --------------------------------------------------------
-- -- Structure de la table `radreply`--
CREATE TABLE `radreply` ( `id` int(11) unsigned NOT NULL auto_increment, `UserName` varchar(64) NOT NULL default '', `Attribute` varchar(32) NOT NULL default '', `op` char(2) NOT NULL default '=', `Value` varchar(253) NOT NULL default '', PRIMARY KEY (`id`), KEY `UserName` (`UserName`(32))) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- -- Contenu de la table `radreply`--
-- --------------------------------------------------------
-- -- Structure de la table `usergroup`--
CREATE TABLE `usergroup` ( `id` int(11) unsigned NOT NULL auto_increment, `UserName` varchar(64) NOT NULL default '', `GroupName` varchar(64) NOT NULL default '', PRIMARY KEY (`id`), KEY `UserName` (`UserName`(32))) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
-- -- Contenu de la table `usergroup`--
INSERT INTO `usergroup` VALUES (1, 'tux', 'pingouin');


Pour ajouter des utilisateur dans la base il faut ajouter un login + password dans la table radcheck de la base radius , un login plus le type d'authentification dans la table radgroupcheck et enfin un login associé à un nom de groupe dans la table usergroup

Vous pouvez vous référer au site officiel de chillispot pour l'ensemble des syntaxes supportés par chilli http://www.chillispot.org/features.html#mozTocId203873



Test pour l'authentification de freeradius


# /etc/init.d/freeradius stop


# freeradius -XXX -A <--mode débug de freeradius


[...]


Debug: Listening on authentication *:1812Debug:


Listening on accounting *:1813


Debug: Listening on proxy *:1814


Info: Ready to process requests.


dans une autre console on lance un radtest


# radtest tux tuxy 127.0.0.1 0 monsecret_nasradius


Sending Access-Request of id 95 to 127.0.0.1:1812


User-Name = "tux"


User-Password = "tuxy"


NAS-IP-Address = localhost


NAS-Port = 0


rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=95, length=20





Notre identification par rapport à mysql est donc fonctionnelle on peut dés à présent tester notre chillispot.





# /etc/init.d/freeradius stop (ctrl+c pour le mode débug)


# /etc/init.d/freeradius start


# ifconfig eth1 0.0.0.0


# /etc/init.d/chilli stop


# /etc/init.d/chilli start


# /etc/chilli.iptables

Vérifiez que la borne wifi à bien pris son adresse en dhcp puis connectez vous au réseau wifi avec votre poste, lancez une page web, si tout ce passe bien vous devriez être redirigé sur https://ipdevotreserveur/cgi-bin/hotspotlogin.cgi







Il vous reste maintenant à vous authentifier, si le radtest à été concluant l'authentification devrait réussir sans problèmme.





Un popup s'ouvre alors avec le temps de connection et la possibilité de se délogger tandis que la page que vous aviez ouverte est redirigé vers le site demandé.

Ce tutorial s'appui sur l'excellent tutorial de Thus0 / Petrus disponible à l'adresse suivante http://www.pervasive-network.org/SPIP/Installation-de-chillispot-sur-une qui ma permis de le tester sur une débian sarge avant de passer à la Etch