Gestion des utilisateurs sous FreeBSD

Un article de DocAstairs.

Sommaire

[modifier] Intro

Sur un système *nix ou linux, il est une partie importante qui consiste à pouvoir gérer ses utilisateurs. Il y a des opérations simples et d'autre plus complexes pour avoir un système qui répond le plus possible à vos attentes. Un bon admin doit donner ce dont les utilisateurs ont besoin, pas plus et pas surtout pas moins.

Sur FreeBSD, un utilisateur est caractérisé essentiellement par les éléments suivants
Caractéristique Signification Description
Username le login de l'utilisateur Le login de l'utilisateur est limité (pour des raisons historique) à 16 caractères.
Full name son vrai nom Ce champ assez spécifique peut contenir d'autres informations, comme le numéro de téléphone ou quelque chose dans le genre. Il est possible d'utiliser le caractère ":".
Uid son identifiant Chaque utilisateur possède un identifiant unique (de 0 pour le compte root à 32000)
Gid l'identifiant du/des groupe(s) au(x)quel(s) il appartient Chaque utilisateur peut appartenir a un ou plusieurs groupes. Les groupes ont un identifiant (Gid) également compris entre 0 et 32000.
Login class la class dont il dépend Les class pour les utilisateurs permettent de donner des droits ou faire des restriction plus fine pour des profils d'utilisateur.
Shell le shell qu'il utilise Chaque utilisateur a un shell. Sont proposés typiquement sur FreeBSD : sh, csh, tcsh, zsh et nologin.
password son mot de passe Un mot de passe (assez fort de préférence).
Home son répertoire personnel Le home directory est par défaut dans /usr/home/le_login_utilisateur.
Locked s'il est bloqué ou pas Il est possible de bloquer un compte utilisateur. Par exemple, un stagiaire qui vient et qui n'as pas a se connecter quand il n'est pas la....

[modifier] Les fichiers

Image:warning.png Avant toute chose, je vous déconseil très fortement d'éditer ces fichiers à la main. Ce sont des bases de données système et il existe des commandes faites pour ça.

  • /etc/master.passwd (Base de donnée des utilisateurs)
user:$1$JSd.OVbp$59VQrvAI6CLaqg1OJsXQo/:1002:1002::0:0:nom de user,0123456789,0123456789,0123456789,info:/home/user:/bin/sh
  • /etc/passwd (fichiers password en format version 7)
user:*:1002:1002:nom de user,0123456789,0123456789,0123456789,info:/home/user:/bin/sh
  • /etc/login.conf (Base de données des possibilité des utilisateurs)
default:\
       :passwd_format=md5:\
       :copyright=/etc/COPYRIGHT:\
       :welcome=/etc/motd:\
       :setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES:\
       :path=/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin ~/bin:\
       :nologin=/var/run/nologin:\
       :cputime=unlimited:\
       :datasize=unlimited:\
       :stacksize=unlimited:\
       :memorylocked=unlimited:\
       :memoryuse=unlimited:\
       :filesize=unlimited:\
       :coredumpsize=unlimited:\
       :openfiles=unlimited:\
       :maxproc=unlimited:\
       :sbsize=unlimited:\
       :vmemoryuse=unlimited:\
       :priority=0:\
       :ignoretime@:\
       :umask=022:
  • /etc/group (Base de données des groupes)
user:*:1002:
  • /var/log/userlog (Fichier de log des modification sur les utilisateurs/groupes)
2007-04-10 11:47:22 [root:groupadd] user(1002)
2007-04-10 11:47:22 [root:useradd] user(1002):user(1002):nom de user:/home/user:/bin/sh
2007-04-10 11:47:22 [root:useradd] user(1002) home /home/user made

[modifier] Les commandes

J'ai presque envie de dire que sur FreeBSD il n'y a qu'une commande pour tout faire :

root@freebsd# pw

Les autres commandes (adduser, rmuser, passwd, ...) ne font qu'appeler la commande pw.

[modifier] Ajouter un utilisateur

Pour ajouter un utilisateur il existe la commande interactive adduser

root@freebsd# adduser
Username: user1
Full name: user1 name
Uid (Leave empty for default): 
Login group [user1]: 
Login group is user1. Invite user1 into other groups? []: 
Login class [default]: 
Shell (sh csh tcsh bash nologin) [sh]: 
Home directory [/home/user1]: 
Use password-based authentication? [yes]: 
Use an empty password? (yes/no) [no]: 
Use a random password? (yes/no) [no]: 
Enter password: *****
Enter password again: *****
Lock out the account after creation? [no]: 
Username   : user1
Password   : *****
Full Name  : user1 name
Uid        : 1002
Class      : 
Groups     : user1 
Home       : /home/user1
Shell      : /bin/sh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (user1) to the user database.
Add another user? (yes/no): no
Goodbye!

Qui a pour équivalent avec pw :

root@freebsd# pw useradd -n user1 -m -s /usr/local/bin/bash -h fd

[modifier] Modifier un utilisateur

La commande chpass permet d'éditer les information sur un utilisateur spécifique :

root@freebsd# chpass user1

aura pour effet d'editer (avec vi) les informations pour l'utilisateur spécifié

#Changing user information for user1.
Login: user1
Password: $1$NAtiwKmB$0bOtkYvuq3Zl1/tpjtHrC1
Uid [#]: 1002
Gid [# or name]: 1002
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/user1
Shell: /usr/local/bin/bash
Full Name: User &
Office Location:
Office Phone:
Home Phone:
Other information:

Et vous n'avez qu'à écrire ce qu'il faut changer, enregistrer et quitter (ESCAPE ":wq" sous vi).

Idem avec avec pw

root@freebsd# pw usermod user1 //(suivi des options et valeurs à changer)

[modifier] Modifier le mot de passe d'un utilisateur

La commande passwd permet de changer son propre mot de passe, ou celui d'un utilisateur si cette dernière est suivi du nom de l'utilisateur.

root@freebsd# passwd /permet de changer le mot de passe root
root@freebsd# passwd user1 /permet de changer le mot de passe de user1

Avec pw :

root@freebsd# pw usermod user1 -h fd

[modifier] voir les information sur un utilisateur

Il peut être pratique de voir les informations sur un ou des utilisateurs de façon plus lisible qu'en affichant le contenu de /etc/master.passwd

root@freebsd# pw usershow user1
user1:$1$bhElJsHj$0ZumkS1W5ahQ2kuizw0QR1:1002:1002::0:0:User &:/home/user1:/usr/local/bin/bash
root@freebsd# pw usershow user1 -P
Login Name: user1             #1002         Group: user1             #1002
 Full Name: User User1
      Home: /home/user1                     Class: 
     Shell: /usr/local/bin/bash            Office: [None]
Work Phone: [None]                     Home Phone: [None]
Acc Expire: [None]                     Pwd Expire: [None]
root@freebsd# pw usershow -a
root:*:0:0::0:0:Adm.servertest:/root:/usr/local/bin/bash
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin
news:*:8:8::0:0:News Subsystem:/:/usr/sbin/nologin
man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/usr/sbin/nologin
sshd:*:22:22::0:0:Secure Shell Daemon:/var/empty:/usr/sbin/nologin
smmsp:*:25:25::0:0:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin
mailnull:*:26:26::0:0:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin
bind:*:53:53::0:0:Bind Sandbox:/:/usr/sbin/nologin
proxy:*:62:62::0:0:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin
_pflogd:*:64:64::0:0:pflogd privsep user:/var/empty:/usr/sbin/nologin
_dhcp:*:65:65::0:0:dhcp programs:/var/empty:/usr/sbin/nologin
uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico
pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin
user1:*:1002:1002::0:0:User &:/home/user1:/usr/local/bin/bash

[modifier] Supprimer un utilisateur

La commande rmuser supprime un utilisateur moyennant deux confirmations (êtes vous sur de vouloir effacer cet utilisateur et voulez vous supprimer son répertoire personnel). Si vous êtes sur de votre coup, l'option -y est la.

root@freebsd# rmuser -y user1

Son équivalent avec pw :

root@freebsd# pw userdel user1 -r

Image:warning.pngQuand un utilisateur est supprimé, sont automatiquement supprimés ses cronjobs, ses atjobs ainsi que son spool de mail et d'impression.

[modifier] Conclusion sur la commande pw

En somme, on s'aperçoit rapidement de la puissance de cette commande un peu hostile à l'apprentissage, mais tellement pratique dans les scripts. Elle permet de faire bien d'avantage que ce qui est décrit ci-dessus, comme la création de home directory d'après un squelette existant ou la gestion des dates de validité des comptes, etc.