Institut Universitaire de Technologie Nice-Côte d'azur Département Réseaux et Télécommunications Année 2008-2009 Licence Pro IRM U4 But du TP Travaux Pratiques Configuration et utilisation d'un système unix en réseau Durant cette manipulation nous allons étudier la création de comptes utilisateurs et un système d'authentification. Dans un deuxième temps nous verrons la définition d'imprimantes et leurs partages sur le réseau. I. Définitions d'utilisateurs 1. En unix Les utilisateurs sont définis dans le fichier /etc/passwd qui est lisible par tous. Historiquement ce fichier contenait les mots de passe cryptés. Aujourd'hui le champ mot de passe, le second, est remplacé par une * et les paramètres de la gestion des mots de passe sont cachés dans le fichier /etc/shadow qui lui n'est accessible qu'à root l'administrateur. nobody:*:-2:-2:unprivileged User:/dev/null:/dev/null root:*:0:0:system Administrator:/var/root:/bin/tcsh daemon:*:1:1:system Services:/var/root:/dev/null unknown:*:99:99:unknown User:/dev/null:/dev/null smmsp:*:25:25:sendmail User:/private/etc/mail:/dev/null www:*:70:70:world Wide Web Server:/Library/WebServer:/dev/null mysql:*:74:74:mysql Server:/dev/null:/dev/null sshd:*:75:75:sshd Privilege separation:/var/empty:/dev/null Listing 1 : contenu du fichier /etc/passwd Le fichier /etc/passwd est constitué de plusieurs champs séparés par des «:». Le Listing 1 en montre un extrait. On trouve les champs suivants : le nom de login, le mot de passe, l'uid (numéro d'identification de l'utilisateur), le gid (numéro du groupe principal auquel appartient l'utilisateur), le GECOS lui-même constitué de plusieurs champs (nom usuel, n bureau, n de téléphone, ), le répertoire de login, puis le shell (interpréteur de commandes) de l'utilisateur. Le mot de passe n'est pas placé dans le fichier, il est remplacé par une étoile, ce qui signifie qu'il est placé dans le fichier shadow qui lui n'est accessible que par l'administrateur. Le fichier shadow est constitué des champs suivants : nomdelogin: motdepassecrypté: datedechangement: duréeminavantchangement: duréemaxavantchangement:
duréedavertissement: duréedinactivitéducompte: datedexpirationducompte: Regarder le contenu des 2 fichiers passwd et shadow. Avec la commande adduser créer un utilisateur de login «machin», d'uid 2510 (voir les options dans le manuel). Vérifier alors le contenu des fichiers passwd et shadow. 2. LDAP Il existe de nombreux systèmes d'authentification, c'est-à-dire la possibilité d'identifier un utilisateur par son nom et un mot de passe ou une clé qui certifie que la personne est bien celle qu'elle dit. On peut citer LDAP, SASL de Cyrus, Kerberos du MIT, Radius et beaucoup d'autres. Notons que bien souvent certaines briques de l'un peuvent être utilisées par les autres. Par exemple kerberos est une option de SASL qui lui-même est une option de LDAP. ActiveDirectory est basé sur du LDAP et du Kerberos. Nous nous contenterons pour l'instant d'étudier un peu LDAP. Il sera temps, plus tard, de le coupler avec du SASL, du Kerberos ou de l'activedirectory, pour obtenir une authentification réseau sécurisée ( ce sera probablement le cas dans un TP du module sécurité U8). a) Structure LDAP (LightWeight Directory Access Protocol) est basé sur la norme de répertoire X.500. C'est dire que le but initial est de collectionner les informations personnelles, adresses, téléphone, pour les mettre à disposition à travers le réseau. Il est alors possible de récupérer d'autres informations comme le mot de passe, répertoire de login, etc Le serveur de LDAP est slapd qui répond soit en clair soit en encrypté au moyen de TLS qui est un dérivé de SSL. o=salle408,dc=rt,dc=tp ou=people ou=machines ou=permanents ou=étudiants Dessin 1 Début de l'arbre La syntaxe qui est utilisée ici est celle de openldap qui dérive aussi de X500. Dans tous les cas la description est obtenue par des fichiers textes de type ldif qui permettent l'échange des bases tout en restant compatible. Cette description est utilisée pour identifier les personnes mais aussi les serveurs, car c'est avec cette méthode que sont générés les certificats. Page 2 / 10
Nous allons créer une base d'annuaire qui ressemble à la structure de DNS ce qui n'est pas une obligation mais reste assez pratique. La racine de notre base, le suffixe en jargon LDAP, sera : «o=salle408,dc=rt,dc=tp». On veut pouvoir identifier des personnes, des machines. Mettre en place la base en éditant le fichier /etc/ldap/slapd.conf On doit indiquer le «suffix» et le compte privilégié (rootdn="cn=admin,o=salle408,dc=rt,dc=tp" ). Des accès graphiques peuvent être faits à partir de gq mais aussi de phpldapadmin qui est à mon avis le plus pratique, à l'adresse http://localhost/phpldapadmin/. Pour y accéder par phpldapadmin, il faut avoir lancé le serveur apache. Il est possible que phpldapadmin ne soit pas installé. Voir la note 1 en bas de page. Pour créer la racine de la base de données, vous pouvez utiliser le fichier lbase.ldif qui est accessible à l'adresse http://kheops.unice.fr/~mathieu/acces/rt-lp/rt-lp-u4/lbase.ldif Détruire à la main la base construite par un utilisateur précédent rm /var/lib/ldap/* Il faut alors mettre en place la base de données reconstruite slapadd -l lbase.ldif Le fichier.ldif est éditable et peut être facilement visualisé. ensuite on démarre le service de ldap /etc/init.d/slapd start Si le démon ne démarre pas du fait de warnings, le démarrer en mode debug slapd -d 255 On parcourt l'arborescence avec un utilitaire tel que phpldapadmin. Il faut le mot de passe (test) pour pouvoir y accéder. 1 Si le paquet phpldapadmin n'est pas installé, exécuter la commande apt-get install phpldapadmin ensuite vérifier l existence d un lien symbolique de /etc/apache/conf.d/phpldapadmin vers /etc/phpldapadmin/apache.conf Le lien peut déjà exister et porter un autre nom. Vérifier dans le fichier /etc/phpldapadmin/config.php que le «suffix» est correct. puis redémarrer apache. Travaux pratiques - U4 - Licence Professionnelle IRM Page 3 / 10
b) Annuaire Les personnes seront sous la désignation ou=people qui est une OrganisationalUnit. Au dessous on décompose en permanents et étudiants, qui sont des OrganisationalUnit comme la précédente, puis on crée un compte utilisateur sous étudiants. Il faut lui donner la classe posixaccount. Remplir chaque champ en particulier l'uidnumber et le gidnumber qui sont importants pour l'authentification. Certaines versions ne proposent pas correctement de positionner le gidnumber : créer l objet comme une entrée d annuaire puis ajouter la classe posixaccount. On peut alors positionner le champ gidnumber. Vous pouvez voir en examinant le résultat, que d'autres classes ont été utilisées : person, shadowaccount, inetorgperson et que certaines sont «structurelles». On peut avoir des informations sur les classes et les champs en examinant le. Créer un utilisateur à_votre_nom et le lister avec ldapsearch en utilisant l'identifiant du gestionnaire de la base. # ldapsearch -x -W -b "o=salle408,dc=rt,dc=tp" -D "cn=admin,o=salle408,dc=rt,dc=tp" Attention le mot de passe est demandé: c'est «test». c) Mots de passe et accès authentifiés Ajouter un champ userpassword à votre compte LDAP et le positionner. Vous listerez le compte ainsi créé, par la commande ldapsearch sous l'identifiant de l'utilisateur lui-même. II. Authentification par LDAP 1. Description de PAM L'authentification en Linux ainsi qu'en Solaris est faite avec PAM (Pluggable Authentication Module), un ensemble de modules qui rendent l'authentification très versatile (modulaire donc). Les descriptions de ces modules sont dans le répertoire /etc/pam.d. Voir par exemple les fichiers login et ssh. Ils comportent au moins quatre étapes 1. auth pour l'authentification : vérification du mot de passe en lien avec le nom d'utilisateur. 2. account pour vérifier que l'utilisateur a les droits sur son compte. 3. session pour mettre en place ce qui doit être fait pour l'environnement de travail dans ce compte. Page 4 / 10
4. password pour gérer la modification du mot de passe. Chaque ligne présente un mode de vérification «requisite» «required» «sufficient» «optional» qui indique le niveau de gravité de l'échec de la vérification. Ensuite vient le module proprement dit qui peut être un module écrit par l'administrateur. 2. Intégration à PAM Pour que pam puisse utiliser ldap, il faut les modifier. Vous avez alors dans /usr/share/doc/libpam-ldap/examples/pam.d/ des exemples pour modifier votre pam.d. ATTENTION ne l'appliquer qu'à ssh : en cas d'erreur il n'est plus possible de se loger. Ne pas oublier de copier le fichier /etc/pam.d/ssh en ssh.orig pour en conserver une sauvegarde. Il faut aussi modifier en ajoutant «ldap» aux lignes passwd et shadow du fichier /etc/nsswitch.conf. Et encore un petit effort, il faut aussi éditer /etc/libnss-ldap.conf pour le rendre compatible avec votre base LDAP. (base [suffix]), utilisateur privilégié (rootdn), ). une bonne solution est de le faire automatiquement avec dpkg-reconfigure libnss-ldap On doit voir votre compte avec la commande getent passwd Si ça marche, cela signifie que ls et autres commandes qui utilisent la description du compte fonctionnent. Pour pouvoir se loger il faut configurer le module pam_ldap lui-même. Il faut modifier le fichier /etc/pam_ldap.conf. Le plus simple est de recopier le fichier /etc/libnss-ldap.conf dans /etc/pam_ldap.conf. Alors il devrait-être possible de se loger sur votre machine par LDAP. Le vérifier avec un ssh votrecompte@localhost. III. Kerberos Une description plus complète sera faite dans le module sécurité. Nous allons créer un «royaume» (realm) ce qui correspond à un domaine d authentification. Ensuite nous allons créer les compte et les acl nécessaires au test du fonctionnement du serveur administratif et du distributeur de tickets. Pour des raisons de simplicité nous testerons l authentification mais pas la création de compte complet. Il serait facile d intégrer Kerberos à PAM. Cependant l intégration de PAM, LDAP et Kerberos est plus complexe car il existe plusieurs possibilités qu il nous est impossible de traiter complètement dans les 3 heures de la séance de travaux pratiques. Nous allons installer sur l une de vos deux machines, le serveur administratif (base des authentifications) et le serveur de tickets. Sur l autre machine nous définirons à quel «royaume» Travaux pratiques - U4 - Licence Professionnelle IRM Page 5 / 10
elle appartient et nous vérifierons que nous pouvons nous authentifier. Le login complet ne sera pas mis en œuvre. Vous devez décider du nom d un royaume et de son serveur. Attention il doit exister dans le serveur de noms. Cependant il est toujours possible d ajouter les noms dans le fichier /etc/hosts, mais c est une mauvaise solution. Sur le serveur installer les paquets apt-get install krb5-admin-server Vérifier les adresses locales ifconfig more /etc/network/interfaces Les paquets suivants devraient être installés en même temps que le précédent : krb5-kdc krb5-user krb5-config Mettre à l'heure ntpdate -s kheops Vérifier et au besoin mettre les domaines et autres royaumes en place emacs /etc/krb5.conf Si le royaume n est pas créé krb5_newrealm Créer le fichier d acl touch /etc/krb5kdc/kadm5.acl Démarrer le serveur de ticket et le serveur d administration /etc/init.d/krb5-kdc start /etc/init.d/krb5-admin-server start Créer le principal (l utilisateur, monnom du «groupe» admin) kadmin.local addprinc monnom/admin (donner le mot de passe) On peut voir ce qui existe par listprincs Sortir de kadmin et positionner l acl qui permet à monnom/admin d acquérir tous les pouvoirs echo 'monnom/admin *' >> /etc/krb5kdc/kadm5.acl /etc/init.d/krb5-admin-server restart Vérifier que l authentification de monnom/admin fonctionne kinit 'monnom/admin' klist Page 6 / 10
Sur la machine cliente installer les paquets krb5-kdc krb5-user krb5-config répondre aux questions en décrivant le même «royaume» et serveur administratif. Démarrer le serveur local, kinit 'monnom/admin' devrait fonctionner : l authentification est faite sur le serveur voisin. Une «kerberisation» complète de l environnement sera faite dans le module U8. IV. Définitions d'imprimantes 1. Généralité La définition d'une imprimante locale est quelque chose de très simple si l'on dispose du pilote fourni par le constructeur mais peut devenir très difficile. L'imprimante présente 2 caractéristiques qui rend son utilisation parfois délicate. Il faut que l'on puisse utiliser sa connexion au système (connectique et logiciel), puis, que l'on ait la possibilité de transformer le contenu à imprimer en données qu'elle est susceptible de traiter correctement. La connexion est assez variée : les plus anciennes sont la liaison série, parallèle, SCSI, localtalk qui ont quasiment disparu au profit des liaisons Ethernet et USB. Les pilotes réseau et USB étant fréquemment non-propriétaires garantissent la facilité de mise en œuvre. Le format des données imprimées est aujourd'hui moins varié qu'autrefois : d'une centaine (cf. gs -help) il n'en reste que 3. Il s'agit majoritairement de Postscript niveau 1, 2 ou 3 dans le monde professionnel, de PCL(1-6) de Hewlett-Packard et du langage de description de page d'epson pour les imprimantes grand public. Dans le monde Unix, il est très facile de filtrer les flux de données et donc d'appliquer itérativement plusieurs traitements. L'impression par défaut est alors faite en PostScript puis convertie dans le bon format par ghostscript. Cela présente l'énorme avantage de la simplification de l'usage des pilotes propriétaires mais reste souvent très en deçà quant à la vitesse et la qualité des impressions. Des projets libres comme gimp-print ou foomatic permettent d'utiliser tout type d'imprimante. Une imprimante PostScript en réseau Ethernet et TCP/IP est de loin ce qu'il y de plus pratique. 2. Avec lpd Défini dans les années 70, ce protocole est très simple et même trop dans la mesure où il ne permet pas d'acquérir d'information sur l'état de l'imprimante autre que «en service». Il est par contre très généreux quant au support de nombreux types de connexions ou de modèles d'imprimantes mais pas très simple à mettre en œuvre pour gérer les différents filtres. La définition des imprimantes est faite dans le fichier /etc/printcap. Il existe de nombreuses options pour définir la queue d'impression. Nous nous contenterons de définir le répertoire du spool (file d'attente) et le serveur distant pour imprimer sur l'imprimante réseau de la Travaux pratiques - U4 - Licence Professionnelle IRM Page 7 / 10
salle. L'impression arrivera en «texte» sur l'imprimante. Si vous imprimez autre chose se ne sera pas beau. C est un protocole dont il faut avoir entendu parlé, mais qui n est plus utilisé qu en mode compatibilité : je ne demande pas de manipulation dessus. 3. Avec Cups Si la définition d'imprimante par lpd est facile mais rudimentaire, il y a deux autres projets, lpnrg (pour nouvelle génération) et CUPS qui ont pris la relève et apportent de manière standard et ouverte de nombreuses solutions aux manques de lpd. Support de nombreux modes d'accès : USB, bluetooth, réseau avec plusieurs protocoles comme lpd, ipp, socket brute, ethertalk, smb, zeroconf, Les projets gimp-print et foomatic s'intègrent naturellement dans CUPS et utilisent les descriptions d'imprimante d'adobe (PostScript Printer Description : ppd). CUPS fait un usage important de ipp (Internet Printer Protocol : port 631), ce qui lui permet d'offrir une configuration presque complète par une interface Web. Il intègre la notion de classes d'imprimantes. Un travail envoyé sur une classe d'imprimante sort sur l'imprimante la moins chargée ce qui permet d'équilibrer la charge des imprimantes et d'obtenir le résultat dans les meilleurs délais. L'aide est en ligne par l'interface Web locale. La gestion des droits d'accès aux ressources d'impression est assez sophistiquée (dérivée de celle d'apache) mais ne fait pas partie de l'interface Web. a) En ipp Dans un premier temps on va définir l'impression sur l'imprimante de la salle. Démarrer le système CUPS, # /etc/init.d/cupsys start et contacter avec konqueror l'interface Web à l'uri http://127.0.0.1:631. Après vous être authentifié comme root, choisir le menu «tâches administratives» puis «ajouter une imprimante». Lui choisir un nom, la description et la localisation sont facultatives. Choisir le protocole ipp, oui, le serveur d'imprimante de la salle le supporte. Et appliquer l'uri ipp://10.4.108.92/lpt1 Choisir un modèle d'imprimante compatible : c'est une EPSON, mais plutôt choisir une HP qui comprenne le PCL. Imprimer un texte qui vous identifie, afin de vous distinguer du groupe d'à côté qui fait la même chose que vous : faites un petit texte ou dessin avec votre nom. La commande d'impression est lp. Il n'est pas possible d'avoir le logiciel lpr et cupsys-bsd qui sont incompatibles. Si ça fonctionne, contacter le serveur d'impression par ipp et vérifier les protocoles et les langages qu'il supporte. Page 8 / 10
Ne pas arrêter le système CUPS. Il est important de contrôler qui peut imprimer sur votre imprimante. Pour cela modifier le fichier /etc/cups/cupsd.conf en ajoutant à l'entrée <Location /printers/name> Order Deny,Allow Deny from All Allow from votreclient </Location> où name est le nom que vous avez donné à votre imprimante et votreclient le nom de la machine cliente. Utiliser une machine cliente différente de la machine serveur : il y a des effets particuliers si vous utilisez la machine serveur elle-même. Il est possible de demander un mot de passe en spécifiant les directives dans cupsd.conf AuthType Basic AuthClass User Attention, en AuthType Digest la base de mots de passe n'est plus celle du système mais est spécifique à CUPS. On peut ajouter l'utilisateur spécifique avec la commande lppasswd -a nomdutilisateur. Il est encore possible d'interdire ou d'autoriser un utilisateur spécifique à imprimer : # /usr/sbin/lpadmin -P name -u deny:cisco Ne pas taper les 2 commandes simultanément. # /usr/sbin/lpadmin -P name -u allow:cisco Ici c'est le fichier printers.conf qui est modifié directement. Il faut alors tester que l'utilisateur cisco peut soumettre une impression. b) En client samba Nous allons maintenant essayer de constituer une queue d'impression vers kheops.unice.fr qui va imprimer sur sa queue d'impression rt30x, qui correspond à l'imprimante du niveau 3. En vous connectant à l'uri http://127.0.0.1:631/ définissez une nouvelle queue d'impression qui pointera vers smb://kheops.unice.fr/gtr30x. C'est tout. Comme c'est une imprimante PostScript, il faut la déclarer comme «Raw». Vérifiez le fonctionnement en imprimant votre texte. Bien sûr vous pourriez appliquer toutes les restrictions vues précédemment. Travaux pratiques - U4 - Licence Professionnelle IRM Page 9 / 10
4. Avec Samba serveur Le serveur Samba vu lors d un précédent TP peut aussi être utilisé pour partager des imprimantes. Il est nativement compatible avec lpd mais le devient très facilement avec Cups. a) Compatibilité avec cups Nous avons à modifier le fichier smb.conf en lui mettant les directives load printers = yes printing = cups printcap name = cups Ne pas omettre d'activer aussi la zone des pilotes d'imprimantes [print$] Relancer CUPS. Pour une utilisation des pilotes sous windows, il faut appliquer la commande d'exportation des pilotes. # cupsaddsmb -U root -a Vérifiez que vous pouvez imprimer. Fichier 4-TP_ImprAuth_lp_0809.odt imprimé le 6 janv. 2009 Page 10 / 10