Articles dans la catégorie ’Bidouilles’
LightDM sous Ubuntu 11.10 : Problème avec les homedirs NFS et l’option root_squash
LightDM 1.0.6 est le gestionnaire de connexions fourni par défaut sous (X)ubuntu 11.10.
Hors il s’avère qu’il est impossible de démarrer une session lorsque le répertoire personnel de l’utilisateur cherchant à se logguer se trouve sur un partage NFS possédant dans ses options d’export l’option root_squash et que les droits du répertoire personnels sont à 700.
L’option root_squash permet d’éviter que le root de la machine cliente ait les droits root sur le serveur NFS en mappant son UID(0) vers l’UID de l’utilisateur Nobody.
En regardant le code source de lightdm 1.0.6, dans le fichier session.c, nous y voyons :
/* Change working directory */
if (chdir (user_get_home_directory (user)) != 0)
{
g_warning ("Failed to change to home directory %s: %s", user_get_home_directory (user), strerror (errno));
_exit (EXIT_FAILURE);
}
/* Change to this user */
if (getuid () == 0)
{
if (initgroups (user_get_name (user), user_get_gid (user)) < 0)
{
g_warning ("Failed to initialize supplementary groups for %s: %s", user_get_name (user), strerror (errno));
_exit (EXIT_FAILURE);
}
if (setgid (user_get_gid (user)) != 0)
{
g_warning ("Failed to set group ID to %d: %s", user_get_gid (user), strerror (errno));
_exit (EXIT_FAILURE);
}
if (setuid (user_get_uid (user)) != 0)
{
g_warning ("Failed to set user ID to %d: %s", user_get_uid (user), strerror (errno));
_exit (EXIT_FAILURE);
}
}
Nous voyons donc que changement de répertoire a lieu avant le changement d’UID/GID. Sur un système classique cela ne pose pas de soucis car le root a toujours le droit de traverser un répertoire.
Cependant, du fait de l’option root_squash au niveau du partage NFS, ceci n’est plus vrai et donc le programme s’arrête suite à la vérification de la condition (chdir (user_get_home_directory (user)) != 0).
Pour venir à bout de ce problème, nous avons trois possibilités :
- Enlever l’option root_squash mais ceci ajoute une brèche dans la sécurité du service NFS
- Passer les droits sur les répertoires personnels des utilisateurs en 701. De cette manière, l’utilisateur root mappé pourra traverser le répertoire et donc cela ne générera plus d’erreur. Cela peut néanmoins être contraignant s’il y a beaucoup de homedirs à traiter.
- Modifier le code source de LightDM pour inverser la procédure :
/* Change to this user */
if (getuid () == 0)
{
if (initgroups (user_get_name (user), user_get_gid (user)) < 0)
{
g_warning ("Failed to initialize supplementary groups for %s: %s", user_get_name (user), strerror (errno));
_exit (EXIT_FAILURE);
}
if (setgid (user_get_gid (user)) != 0)
{
g_warning ("Failed to set group ID to %d: %s", user_get_gid (user), strerror (errno));
_exit (EXIT_FAILURE);
}
if (setuid (user_get_uid (user)) != 0)
{
g_warning ("Failed to set user ID to %d: %s", user_get_uid (user), strerror (errno));
_exit (EXIT_FAILURE);
}
}
/* Change working directory */
if (chdir (user_get_home_directory (user)) != 0)
{
g_warning ("Failed to change to home directory %s: %s", user_get_home_directory (user), strerror (errno));
_exit (EXIT_FAILURE);
}
Ainsi, on change l’UID/GID avant de traverser le répertoire. En tout état de cause, un utilisateur doit avoir accès à son répertoire personnel et si ce n’est pas le cas, alors une erreur sera signalée.
Pour plus de facilité, j’ai reconstruis des paquets (X)ubuntu corrigeant cette erreur :
- lightdm_1.0.6-0ubuntu1.3_i386.deb
- lightdm-gtk-greeter_1.0.6-0ubuntu1.3_i386.deb
- lightdm-qt-greeter_1.0.6-0ubuntu1.3_i386.deb
- liblightdm-qt-1-0_1.0.6-0ubuntu1.3_i386.deb
- liblightdm-qt-1-dev_1.0.6-0ubuntu1.3_i386.deb
- liblightdm-gobject-1-0_1.0.6-0ubuntu1.3_i386.deb
- liblightdm-gobject-1-dev_1.0.6-0ubuntu1.3_i386.deb
- liblightdm-gobject-1-doc_1.0.6-0ubuntu1.3_i386.deb
- gir1.2-lightdm-1_1.0.6-0ubuntu1.3_i386.deb
L’installation, après téléchargement des paquets se fait a l’aide de la commande :
sudo dpkg --install xxxxxxxx.deb
Donner un look Unity au LightDM de Xubuntu
Par défaut, sur Xubuntu 11.10, LightDM ressemble à :
Dans cet article, nous allons essayer de le faire ressembler au LightDM d’Ubuntu 11.10 tout en gardant la charte graphique de Xubuntu.
Tout d’abord, installons les paquets nécessaires :
sudo apt-get install gnome-settings-daemon indicator-session-gtk2 unity-greeter ubuntu-mono light-themes
Modifions le fichier /etc/lightdm/lightdm.conf :
[SeatDefaults] user-session=xubuntu greeter-session=unity-greeter
Bien évidemment, vous pouvez garder vos autres personnalisations dans ce fichier. Seule la ligne greeter-session est importante.
Éditons ensuite le fichier /etc/lightdm/unity-greeter.conf pour remplacer la ligne :
background=/usr/share/backgrounds/warty-final-ubuntu.png
par
background=/usr/share/xfce4/backdrops/xubuntu-greybird.png
et
logo=/usr/share/unity-greeter/logo.png
par
logo=/usr/share/pixmaps/xubuntu.png
Ensuite, téléchargeons le logo déclaré précédemment :
sudo wget -O /usr/share/pixmaps/xubuntu.png http://www.be-root.com/downloads/xubuntu/xubuntu.png
Redémarrons LightDM :
service lightdm restart
Nous obtenons alors un écran d’accueil semblable à celui d’Ubuntu 11.10 :
LightDM sous Ubuntu 11.10 : restreindre les sessions à exécuter
Il peut être utile de restreindre les sessions exécutables depuis LightDM sans pour autant désinstaller les environnements.
Par exemple, nous avons les sessions suivantes :
Nous désirons supprimer les entrées « Ubuntu » et « Ubuntu 2D » sans pour autant supprimer Unity du disque.
La solution se trouve dans le répertoire /usr/share/xsessions :
Il nous suffit de supprimer (ou de renommer) les fichiers .desktop correspondants.
sudo mv ubuntu.desktop ubuntu.desktop.old sudo mv ubuntu-2d.desktop ubuntu-2d.desktop.old
Au prochain rechargement de LightDM, les entrées ne seront plus visibles :




