Archive for samba

Administration de mon serveur Samba (2/2)

Suite et fin de mes aventures avec Samba.

Une fois l’identification des users faite sur mysql, il me reste à mettre à jour la base de mots de passe de samba. Je rappelle que lors d’une mise à jour du mot de passe unix (voir mes posts précédents), le mot de passe samba n’est mis à jour que quand l’utilisateur se logge. Ce qui ne correspond pas à mon application, mes utilisateurs ne se loggent pas.

Par conséquent, il est nécessaire de faire la mise à jour de la base de mots de passe samba par un autre moyen. J’ai décidé, à regret, de faire un cron sur la liste (pas longue) de mes utilisateurs. Voici mon scripts et les explications associées:
-Le script prend en paramètre un fichier de connexion à la base mysql où sont stockés les users. Ce fichier est sensible, il faut par conséquent restreindre les droits à root seulement.
-Le format de ce fichier est le suivant:

USER=monuser
PASS=sonmotdepass
USERDB=systemdb
UTABLE=usertable

-Le principe de ce script est de passer la commande smbpasswd pour tous les utilisateurs listés dans la base mysql. Cette commande met à jour les mots de passe de la base samba. J’utilise l’option -s qui permet de passer le mot de passe et sa confirmation par stdin.
Je passe la commande comme ceci:

(echo motdepasse; echo motdepasse) | smbpasswd -s -a leuser

Pour la périodicité du cron associé, il ne vous reste qu’à choisir sa fréquence et d’avertir les utilisateurs du service.
Si vous avez mieux…

Posted in admin, samba | Leave a comment

Petit tip samba avec libpam-smbpass

Dans la suite de mon post sur libpam-smbpass, je note qu’il est important d’utiliser le backend samba tdbsam, et par conséquent, d’avoir l’option dans /etc/samba/smb.conf.

passdb backend = tdbsam

Pourquoi? Parce si ce n’est pas le cas, vous utilisez le back-end avec fichier smbpasswd, qui ne gère pas bien l’effacement des users en base. Je rappelle que libpam-smbpass permet de synchroniser les users unix et samba. Par conséquent, si vous effacez un compte unix, vous espérez qu’il soit aussi effacé en base samba. Avec smbpasswd, ce n’est pas le cas, il faut le supprimer ensuite soi-même et, c’est là que la mini-catastrophe se produit:

smbpasswd -x monuser

vous dit que monuser n’est pas un user unix et que la base est corrumpue. Il faut alors recréer le compte unix, passer la commande smbpasswd -x mon user et effacer le compte unix à nouveau.
Avec tdbsam, à la suppression du user unix, la suppression du user samba est effective.

Posted in admin, samba | Leave a comment

Administration de mon serveur Samba (Etape 1/2)

A titre de rappel, j’ai une série de bases mysql qui stockent les utilisateurs de certaines applications, ces bases sont synchronisées par des triggers mysql. Je cherche depuis hier à mettre en place un serveur samba dont les users seraient provisionnés à partir de la base mysql centrale de mon système. Mes utilisateurs ne se loggent pas sur la machine en tant qu’utilisateurs unix, mais comme requis par samba, il doivent être vus comme des utisateurs unix. J’ai donc décidé, après de longues recherches sur google, dans les codes de certaines applications, d’aller au plus simple:

-Mes utilisateurs unix seront des utilisateurs virtuels, je vais utiliser libnss-mysql pour les gérer, ce qui me permettra de les synchroniser facilement avec mes triggers mysql. (Etape 1)

-Mes utilisateurs samba (les mêmes en fait) seront gérés par le backend tbdsam, backend par défaut de samba. Il me faudra une passerelle de ma base mysql vers ma base samba. Je ne suis pas encore fixé sur ce fonctionnement, mais je vois mal comment je vais pouvoir éviter le polling sur un changement de champs mysql par un cron.(Etape 2)

Etape 1: gestion des comptes unix par mysql

On trouve de nombreux posts d’autres bloggers sur ce sujet, et j’ai dû prendre un peu partout pour faire fonctionner le tout sur mon serveur debian, en lenny.

Voici ma démarche:

  • Installation de libnss-mysql et de libpam-mysql
apt-get install libnss-mysql libpam-mysql

Et non libnss-mysql-bg. Il y a confusion dans debian sur le package.

  •  Configuration de /etc/nsswitch.conf

Par défaut, nss est configuré pour utiliser /etc/passwd et /etc/shadow pour faire l’authentification et l’autorisation. Le principe dans notre cas consiste non pas à remplacer cela par mysql, mais à compléter la possibilité d’utiliser mysql. Ce qui signifiera qu’on pourra utiliser les deux, d’abord, le mode fichier, par exemple pour les comptes systèmes, puis mysql pour les autres. Pour se faire, il faut avoir un fichier /etc/nsswitch.conf comme celui-ci:

passwd:         compat mysql

group:          compat mysql

shadow:         compat mysql

hosts:          files dns

networks:       files

protocols:      db files

services:       db files

ethers:         db files

rpc:            db files

netgroup:       nis

Dans certains cas, le “compat”, décrivant le mode d’utilisation par fichier peut être remplacé par “files”.

  • configuration de /etc/nss-mysql.conf et de /etc/nns-mysql-root.conf

La conf de libnss-mysql se fait pas ces deux fichiers, le premier pour les comptes et le deuxième pour shadow. On décrit simplement le moyen d’accéder à la base mysql qu’on va utiliser (host, dbname, user, password, table et correspondance de champs). Les deux sont basés sur le même principe. La syntaxe est assez explicite et bien expliquée dans les commentaires (au moins pour debian).

Attention,  /etc/nss-mysql-root.conf ne doit être lisible que par root, donc

chmod 400 /etc/nss-mysql-root.conf
  • configuration de pam

On ne touche qu’aux fichiers communs aux services d’autorisation (common-auth, common-password, common-session, common-account). De la même façon qu’on a configuré nss, on va configurer les moyens d’accès par pam en fonction du besoin

/etc/pam.d/common-auth :

account    sufficient        pam_unix.so nullok_secure

account    required        pam_mysql.so user=monuser passwd=xxxxxxx host=localhost db=nss_mysql table=user usercolumn=user.user_name

/etc/pam.d/common-passwd :

password   sufficient   pam_unix.so nullok obscure min=5 max=12 md5

password    required      pam_mysql.so nullok user=root passwd=bullit host=localhost db=nss_mysql table=user usercolumn=user.user_name passwdcolumn=user.password crypt=1

Le crypt = 1, signifie que le mot de passe sera encrypté dans le base mysql. Pour qu’il soit en clair (à éviter, bien entendu), c’est crypt=0. Pour débugger, c’est plus pratique.

/etc/pam.d/comm-account

auth    sufficient        pam_unix.so nullok_secure

auth    required        pam_mysql.so user=root passwd=bullit host=localhost db=nss_mysql table=user usercolumn=user.user_name passwdcolumn=user.password crypt=1

Et le dernier
/etc/pam.d/common-session :

session    sufficient        pam_unix.so nullok_secure

session    required        pam_mysql.so user=root passwd=bullit host=localhost db=nss_mysql table=user usercolumn=user.user_name
  • Il est maintenant temps de créer la base mysql.
create database nss_mysql;

USE nss_mysql;DROP TABLE IF EXISTS groups;

CREATE TABLE groups (

group_id int(11) NOT NULL auto_increment primary key,

group_name varchar(30) DEFAULT '' NOT NULL,

status        char(1) DEFAULT 'A',

group_password varchar(64) DEFAULT 'x' NOT NULL,

gid int(11) NOT NULL

);

DROP TABLE IF EXISTS user;

CREATE TABLE user (

user_id int(11) NOT NULL auto_increment primary key,

user_name varchar(50) DEFAULT '' NOT NULL,

realname varchar(32) DEFAULT '' NOT NULL,

shell varchar(20) DEFAULT '/bin/sh' NOT NULL,

password varchar(40) DEFAULT '' NOT NULL,

status char(1) DEFAULT 'N' NOT NULL,

uid int(11) NOT NULL,

gid int(11) DEFAULT '65534' NOT NULL,

homedir varchar(32) DEFAULT '/tmp' NOT NULL,

lastchange varchar(50) NOT NULL default '',

min int(11) NOT NULL default '0',

max int(11) NOT NULL default '0',

warn int(11) NOT NULL default '7',

inact int(11) NOT NULL default '-1',

expire int(11) NOT NULL default '-1'

);

DROP TABLE IF EXISTS user_group;

CREATE TABLE user_group (

  user_id int(11) DEFAULT '0' NOT NULL,

  group_id int(11) DEFAULT '0' NOT NULL

);

Attention, le mot de passe doit être crypté (rappelez-vous le crypt=1), donc pour importer les utilisateurs, il est nécessaire d’utiliser la fontion interne à mysql encrypt().

  • Il est maintenant temps de provisionner ses users pour faire des premiers tests.

Les outils pour débugger ont été les suivants:

-Activation des logs mysql pour tracer les requêtes. Ne pas oublier de les désactiver car les performances de mysql sont très impactées par l’activation des logs.

-/var/log/auth.log où les erreurs de libnss-mysql m’ont permis de naviguer à plusieurs reprises dans le fichier shadow.c de celle-ci.

  • Dernier point, après les tests, je change le shell par défaut de mes users en /bin/false, car je rappelle que ce sont des utilisateurs virtuels qui ne se loggeront pas.

A bientôt pour l’étape 2.

PS:
Mes références pour ce sujet (et je les en remercie)
-http://www.spencerstirling.com/computergeek/mysqluser.html

-http://www.cavecanen.org/linux/nssmysql.php

-http://wiki.druidesmetal.org/doku.php?id=pam-mysql (Que j’ai trouvé bien trop tard, malheureusement…)

Posted in admin, mysql, samba | Leave a comment

En recherche d’une solution d’administration décente pour un serveur samba

Dans la suite de mon article précédent, je suis confronté à un problème d’administration d’un serveur samba que je vous présente ici.

J’utilise plusieurs bases mysql qui gèrent des comptes utilisateurs de différentes applications. Les utilisateurs étant communs aux différents projets, j’utilise donc des triggers mysql pour modifier les comptes de l’une à l’autre des bases. A l’ensemble de ce projet, je cherche à installer un serveur samba pour lequel, dans le même esprit, je veux pouvoir provisionner les utilisateurs samba depuis la base mysql de mon application centrale.

Il y a bien longtemps que le monde du libre ne m’offre pas de solutions servies sur un plateau, mais là, je dois reconnaître que je tourne un peu en rond:

-Samba a supprimé son backend mysql, en raison du manque de mainteneur. Cela m’aurait permis de synchroniser les bases de la même façon.

-La synchronisation des comptes unix (que je pourrais gérer en mysql) et samba, comme expliquée dans mon post précédent, n’est pas satisfaisante pour être “industrialisée”, puisqu’elle nécessite que l’utilisateur se logge après avoir changé son mot de passe unix pour qu’il soit pris en compte dans la base smb.

A moins que google ait gardé un secret, je n’ai pas l’impression de pouvoir trouver une solution intéressante, qui ne soit pas un bricolage immonde et j’en arrive à la conclusion que samba, malgré le large spectre de fonctionnalités et de paramétrage, n’est pas un outil particulièrement bien adapté à un univers de production administré en souplesse.

Si quelqu’un lit ces lignes et a une solution, je suis preneur…

Posted in admin, mysql, samba | 3 Comments

Swedish Greys - a WordPress theme from Nordic Themepark.