Bonsoir à tous

j'aimerai avoir votre avis sur un script que j'ai créer (savoir si il est bien codé, les commentaire, la lisibilité ...)

Ce script permet de créer un serveur Terminal serveur avec FreeNX couplé à une authentification LDAP.

Il a été testé sous une machine virtuel Fed13 (sur centOS ce script n'a pas été testé cependant les étapes du script on étaient testé)

#!/bin/bash
###############################################################################
#
# TSE :
# TSE with free NX server and LDAP
#
# by Antoine WALLON a.k.a Neowdj <antoine at famillewallon dot com>
# Version 1
#
#
###############################################################################
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, 
#  - write to the Free Software
#     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
#    - See http://www.gnu.org/licenses/gpl.html
#
###############################################################################



# Information à modifier #######


## Adresse ip ou hostname du serveur LDAP (ex: LDAPSERVER="192.168.1.1" ou LDAPSERVER="masterldap" )
LDAPSERVER=""

# Le DN de votre LDAP (ex: BASEDN="dc=ldap,dc=priv") 
BASEDN=""

# Si votre serveur LDAP à besoin d'une authentification pour se connecter rentrer son DN complet (ex: ROOTBINDDN="cn=manager,dc=ldap,dc=priv")
# Sinon commenter ces 2 lignes (ROOTBINDDN et ROOTBINDPASSWD)
ROOTBINDDN=""

# Ainsi que son mot de passe (ex: ROOTBINDPASSWD="passwd")
ROOTBINDPASSWD=""

# Fin des informations à modifier ###########################



## Ne pas modifier à partir d'ici ##########################

# Affiche le nom de la distribution
OS=`cat /etc/redhat-release | awk {'print $1}'`

#Vérification si le user est root 
if [ "$(whoami)" != 'root' ];
then
    echo  "Vous devez être logguer en root pour utiliser ce script"
    echo  "Utiliser la commande su -"
    exit
fi


# Detection de la présence de gnome
#if [ ! $(rpm -qa | grep gnome-desktop) ];
#then
#        echo -e "Gnome non présent dans le système"
#        echo -e "Installation de Gnome en cours...\n"
#
#    yum groupinstall -y "GNOME Desktop Environment"
#fi

# Detection de la distrib et installation de FreeNX, ldap_nss et openldap-clients

# Si CentOS

if [ "$OS" = "CentOS" ];
    then
            if [ ! $(rpm -qa | grep rpmforge-release) ];
                    then
                              echo -e "Installation du dépot RPMforge en cours...\n"
                    rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.$(uname -m).rpm
            fi            
        
            if [ ! $(rpm -qa | grep freenx) ];
                    then
                              echo -e "Installation de FreeNX en cours...\n"
                    yum install -y nx freenx
            fi



            if [ ! $(rpm -qa | grep nss_ldap) ];
                then    
                    echo -e "Le package nss_ldap non présent dans le système"
                                        echo -e "Installation de nss_ldap en cours...\n"
                    yum install -y nss_ldap
            fi
            
                if [ ! $(rpm -qa | grep openldap-clients) ];
                                then
                                        echo -e "Le package openldap-clients non présent dans le système"
                                        echo -e "Installation de openldap-clients en cours...\n"
                                        yum install -y openldap-clients
                        fi

# Si Fedora

elif [ "$OS" = "Fedora" ];
    then
            if [ ! $(rpm -qa | grep freenx) ];
                    then
                              echo -e "Installation de FreeNX en cours...\n"
                    yum install -y nx freenx
            fi

            if [ ! $(rpm -qa | grep nss_ldap) ];
                                then
                    echo -e "Le package nss_ldap non présent dans le système"
                    echo -e "Installation de nss_ldap en cours...\n"
                                        yum install -y nss_ldap
                        fi
            
            if [ ! $(rpm -qa | grep openldap-clients) ];
                                then
                                        echo -e "Le package openldap-clients non présent dans le système"
                                        echo -e "Installation de openldap-clients en cours...\n"
                                        yum install -y openldap-clients
                        fi
else
    echo -e "Votre Distribution n'a pas été Reconnue. Ce script fonctionne uniquement sur les distributions CentOS et Fedora\n"
    exit
fi

# Désactivation de Selinux (qui créer des problèmes lors de la création des utilisateurs)

echo -e "Désactivation de selinux\n"

sed -i  's/SELINUX=enforcing/SELINUX=disable/g' /etc/sysconfig/selinux
sed -i  's/SELINUX=permissive/SELINUX=disable/g' /etc/sysconfig/selinux

setenforce 0



# Copie du fichier node.conf.sample en node.conf

cd /etc/nxserver ; cp node.conf.sample node.conf

# Activation de ENABLE_PASSDB_AUTHENTICATION

sed -i 's/#ENABLE_PASSDB_AUTHENTICATION="0"/ENABLE_PASSDB_AUTHENTICATION="1"/g' /etc/nxserver/node.conf

# Démarrage du service freenx-server

service freenx-server start

# Vérification de la présence de Authconfig

if [ ! -e "/usr/sbin/authconfig" ];
    then
          echo -e "authconfig non présent dans le système"
          echo -e "Installation de authconfig en cours...\n"
              yum install -y authconfig
fi


#modification du fichier ldap

echo -e "Modification du fichier ldap.conf pour l'authentification LDAP"
echo -e "Sauvegarde du fichier ldap.conf en cours...\n"

cp /etc/ldap.conf /etc/ldap.conf.origin

authconfig --enableldap --enableldapauth --ldapserver=$LDAPSERVER --ldapbasedn=$BASEDN --update

if [ ${ROOTBINDDN} ];
    then
        echo "rootbinddn $ROOTBINDDN" >> /etc/ldap.conf
        echo $ROOTBINDPASSWD > /etc/ldap.secret
        chmod 600 /etc/ldap.secret
fi




# Modification de fichier nsswitch pour rajouer ldap après files.

echo -e "Modification du fichier nsswitch pour l'authentification LDAP"
echo -e "Sauvegarde du fichier system-auth en cours...\n"
    cp /etc/nsswitch.conf /etc/nsswitch.conf.origin
sed -i -e "s|files|files ldap|" /etc/nsswitch.conf



# Modification du fichier system-auth pour remplacer pam_sss.so par pam_ldap.so (sous Fedora)
# sinon l'authentification ne fonctionnera pas et rajouer un pam_mkhomedir.

echo -e "Modification du fichier system_auth pour l'authentification LDAP"
echo -e "Sauvegarde du fichier system-auth en cours...\n"
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.origin

sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/system-auth

sed -i "/session     required      pam_limits.so/i\session     optional      pam_mkhomedir.so skel=/etc/skel umask=0022" /etc/pam.d/system-auth

# Modification du fichier password-auth  pour remplacer pam_sss.so par pam_ldap.so (sous Fedora)
# sinon l'authentification SSH ne fonctionnera pas.

echo -e "Modification du fichier password-auth pour l'authentification LDAP"
echo -e "Sauvegarde du fichier password-auth en cours...\n"
        cp /etc/pam.d/password-auth /etc/pam.d/password-auth.origin

sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/password-auth

# Affichage de la clef d'authentification du serveur NX

echo -e "---------------------------------------------------------------------------------\n"

echo -e "L'installation est maintenant terminé\n"

echo -e "Copier / Coller le résultat dans votre client NX dans la partie Key... (à partir de -----BEGIN DSA PRIVATE KEY----- jusqu'à -----END DSA PRIVATE KEY----- )\n"

cat /etc/nxserver/client.id_dsa.key

echo -e "\n"
pour ceux qui on du mal voici le fichier texte

http://files.famillewallon.com/public/scripts/tse.txt

[EDIT] Il faut aussi rajouter dans pam.d/sshd un pam_mkhomedir

sed -i "/session include password-auth/i\session optional pam_mkhomedir.so skel=/etc/skel umask=0022" /etc/pam.d/sshd [/EDIT]
Ça semble propre pas d'utilité pour moi mais c'est bien commenté en tout cas !

Juste un truc qui me choque c'est que les commentaires sont en Français :pint:
Bonsoir

Quelques remarques sur la forme,

pour la ligne
OS=`cat /etc/redhat-release | awk {'print $1}'`
j'aurais mis
OS=$(cat /etc/issue | awk '{print $1}' | head -n1)

de même pour
if [ "$(whoami)" != 'root' ]
j'aurais mis
if [ "$(id -u)" != '0' ]


Il faut aussi faire un message qui explique ce que fait le script lorsqu'on fait "./nom_du_script -h" ou "./nom_du_script --help"
Genre préciser qu'il va désactiver SELinux et aussi donner le nom du fichier vers lequel tu sauvegardes.

Pour des idées sur le scripting bash, regarde http://tldp.org/LDP/abs/html/
Bonsoir,
histoire de pinailler !! :hammer:
- pour détecter la distrib, je fais : $(lsb_release -si)
- quand tu as des if, elif, etc .. la syntaxe : case,esac est plus jolie 😉
- quand tu as plusieurs if then, tu peux faire :
[ CONDITION ] && action 1 && action 2
- tu peux ajouter l'option --enablemkhomedir directement à authconfig
- que se passe t'il si je lance 2 fois le script ???
merci je vais modifier tout ca ce week end et je reposterai le script
MarbolanGos wrote:Ça semble propre pas d'utilité pour moi mais c'est bien commenté en tout cas !

Juste un truc qui me choque c'est que les commentaires sont en Français :pint:
j'ai encore un peut du mal avec l'anglais


proxy wrote: - pour détecter la distrib, je fais : $(lsb_release -si)
Ma Fed13 de test n'inclus pas cette commande (not found)
proxy wrote:- quand tu as des if, elif, etc .. la syntaxe : case,esac est plus jolie 😉
c'est sur
proxy wrote:- quand tu as plusieurs if then, tu peux faire :
[ CONDITION ] && action 1 && action 2
dans mon cas je ne vois pas comment faire


Voici le script modifié (j'ai pas encore testé le --enablemkhomedir avec l'ancien sed pam_mkhomedir)
#!/bin/bash
###############################################################################
#
# TSE :
# TSE with free NX server and LDAP
#
# by Antoine WALLON a.k.a Neowdj <antoine at famillewallon dot com>
# Version 1.2
# 
###############################################################################
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, 
#  - write to the Free Software
#     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
#    - See http://www.gnu.org/licenses/gpl.html
#
###############################################################################



# Information à modifier #######


## Adresse ip ou hostname du serveur LDAP (ex: LDAPSERVER="192.168.1.1" ou LDAPSERVER="masterldap" )
LDAPSERVER=""

# Le DN de votre LDAP (ex: BASEDN="dc=ldap,dc=priv") 
BASEDN=""

# Si votre serveur LDAP à besoin d'une authentification pour se connecter rentrer son DN complet (ex: ROOTBINDDN="cn=manager,dc=ldap,dc=priv")
# Sinon commenter ces 2 lignes (ROOTBINDDN et ROOTBINDPASSWD)
ROOTBINDDN=""

# Ainsi que son mot de passe (ex: ROOTBINDPASSWD="passwd")
ROOTBINDPASSWD=""

# Fin des informations à modifier ###########################



## Ne pas modifier à partir d'ici ##########################

# Affiche le nom de la distribution
OS=`cat /etc/issue | awk '{print $1}' | head -n1`

#Vérification si le user est root 
if [ "$(id -u)" != '0' ]
then
    echo  "Vous devez être logguer en root pour utiliser ce script"
    echo  "Utiliser la commande su -"
    exit
fi

#Affichage de l'aide
if [ $# = 1 ] 
 then
    echo  ""
    echo -e "Ce script permet d'automatiser l'installation d'un serveur TSE en couplant un server FreeNX et un serveur LDAP\n"
    echo -e "Usage: sh $0\n"
    echo "Spécification: "
    echo "- Fonctionne sous CentOS et Fedora"
    echo "- Désactive Selinux"
    echo -e "- Modifie les fichiers node.conf, ldap.conf, ldap.secret, nsswitch.conf, pam.d/system-auth, pam.d/password-auth, pam.d/sshd\n"
    echo  "Tous les fichiers sont sauvegardé en .origin dans leurs dossiers respectif" 
    exit 
fi


# Si variable est nul on affiche un message d'alerte
if [ -z $LDAPSERVER ] || [ -z $BASEDN ]
then
    echo "Aucun serveur LDAP n'a été défini"
    echo "Veuillez modifier les informations dans le script"
    exit
fi 


# Si /etc/pam.d/sshd.origin existe c'est que le script à déjà été exécuter donc on demande à l'utilisateur si il veut poursuivre
if [ -e "/etc/pam.d/sshd.origin" ]
then
    echo  "Vous avez déjà executé ce script voulez vous quand même le réxecuter (o/n):"
    read EXECUTE



        while [ "$EXECUTE" != "o" ] && [ "$EXECUTE" != "n" ]

            do 
                echo  "Veuillez taper o ou n:" 
                read EXECUTE
            done

                if [ "$EXECUTE" == "n" ]
                    then
                    exit
                fi
fi


# Détection de la distrib et installation de FreeNX, ldap_nss et openldap-clients

# Si CentOS
case $OS in
CentOS)            
            if [ ! $(rpm -qa | grep rpmforge-release) ];
                    then
                              echo -e "Installation du dépot RPMforge en cours...\n"
                    rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.$(uname -m).rpm
            fi            
        
            if [ ! $(rpm -qa | grep freenx) ];
                    then
                              echo -e "Installation de FreeNX en cours...\n"
                    yum install -y nx freenx
            fi



            if [ ! $(rpm -qa | grep nss_ldap) ];
                then    
                    echo -e "Le package nss_ldap non présent dans le système"
                                        echo -e "Installation de nss_ldap en cours...\n"
                    yum install -y nss_ldap
            fi
            
                if [ ! $(rpm -qa | grep openldap-clients) ];
                                then
                                        echo -e "Le package openldap-clients non présent dans le système"
                                        echo -e "Installation de openldap-clients en cours...\n"
                                        yum install -y openldap-clients
                        fi ;;

# Si Fedora

Fedora)
    
            if [ ! $(rpm -qa | grep freenx) ];
                    then
                              echo -e "Installation de FreeNX en cours...\n"
                    yum install -y nx freenx
            fi

            if [ ! $(rpm -qa | grep nss_ldap) ];
                                then
                    echo -e "Le package nss_ldap non présent dans le système"
                    echo -e "Installation de nss_ldap en cours...\n"
                                        yum install -y nss_ldap
                        fi
            
            if [ ! $(rpm -qa | grep openldap-clients) ];
                                then
                                        echo -e "Le package openldap-clients non présent dans le système"
                                        echo -e "Installation de openldap-clients en cours...\n"
                                        yum install -y openldap-clients
                        fi ;;


*)
    echo -e "Votre Distribution n'a pas été Reconnue. Ce script fonctionne uniquement sur les distributions CentOS et Fedora\n"
    exit;;

esac
# Désactivation de Selinux (qui créer des problèmes lors de la création des utilisateurs)

echo -e "Désactivation de selinux\n"

sed -i  's/SELINUX=enforcing/SELINUX=disable/g' /etc/sysconfig/selinux
sed -i  's/SELINUX=permissive/SELINUX=disable/g' /etc/sysconfig/selinux

setenforce 0



# Copie du fichier node.conf.sample en node.conf

cd /etc/nxserver ; cp node.conf.sample node.conf

# Activation de ENABLE_PASSDB_AUTHENTICATION

sed -i 's/#ENABLE_PASSDB_AUTHENTICATION="0"/ENABLE_PASSDB_AUTHENTICATION="1"/g' /etc/nxserver/node.conf

# Démarrage du service freenx-server

service freenx-server start

# Vérification de la présence de Authconfig

if [ ! -e "/usr/sbin/authconfig" ];
    then
          echo -e "authconfig non présent dans le système"
          echo -e "Installation de authconfig en cours...\n"
              yum install -y authconfig
fi


#modification du fichier ldap

echo -e "Modification du fichier ldap.conf pour l'authentification LDAP"
echo -e "Sauvegarde du fichier ldap.conf en cours...\n"

cp /etc/ldap.conf /etc/ldap.conf.origin

authconfig --enableldap --enableldapauth --enablemkhomedir --ldapserver=$LDAPSERVER --ldapbasedn=$BASEDN --update

if [ ${ROOTBINDDN} ];
    then
        echo "rootbinddn $ROOTBINDDN" >> /etc/ldap.conf
        echo $ROOTBINDPASSWD > /etc/ldap.secret
        chmod 600 /etc/ldap.secret
fi




# Modification de fichier nsswitch pour rajouer ldap après files.

echo -e "Modification du fichier nsswitch pour l'authentification LDAP"
echo -e "Sauvegarde du fichier system-auth en cours...\n"
    cp /etc/nsswitch.conf /etc/nsswitch.conf.origin
sed -i -e "s|files|files ldap|" /etc/nsswitch.conf



# Modification du fichier system-auth pour remplacer pam_sss.so par pam_ldap.so (sous Fedora)
# sinon l'authentification ne fonctionnera pas et rajouer un pam_mkhomedir.

echo -e "Modification du fichier system_auth pour l'authentification LDAP"
echo -e "Sauvegarde du fichier system-auth en cours...\n"
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.origin

sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/system-auth

sed -i "/session     required      pam_limits.so/i\session     optional      pam_mkhomedir.so skel=/etc/skel umask=0022" /etc/pam.d/system-auth

# Modification du fichier password-auth  pour remplacer pam_sss.so par pam_ldap.so (sous Fedora)
# sinon l'authentification SSH ne fonctionnera pas.

echo -e "Modification du fichier pam.d/password-auth pour l'authentification LDAP"
echo -e "Sauvegarde du fichier pam.d/password-auth en cours...\n"
        cp /etc/pam.d/password-auth /etc/pam.d/password-auth.origin

sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/password-auth

echo -e "Modification du fichier pam.d/sshd pour l'authentification LDAP"
echo -e "Sauvegarde du fichier pam.d/sshd en cours...\n"
        cp /etc/pam.d/sshd /etc/pam.d/sshd.origin

sed -i "/session    include      password-auth/i\session     optional      pam_mkhomedir.so skel=/etc/skel umask=0022" /etc/pam.d/sshd

# Affichage de la clef d'authentification du serveur NX

echo -e "---------------------------------------------------------------------------------\n"

echo -e "L'installation est maintenant terminé\n"

echo -e "Copier / Coller le résultat dans votre client NX dans la partie Key... (à partir de -----BEGIN DSA PRIVATE KEY----- jusqu'à -----END DSA PRIVATE KEY----- )\n"

cat /etc/nxserver/client.id_dsa.key

echo -e "\n"
en version texte http://files.famillewallon.com/public/scripts/tseV1.2.txt
C'est vrai, lsb_release n'est pas installé par défaut.
[ ! $(rpm -qa | grep rpmforge-release) ] && echo -e "Installation du dépot RPMforge en cours...\n" && rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.$(uname -m).rpm
[ ! $(rpm -qa | grep freenx) ] && echo -e "Installation de FreeNX en cours...\n" && yum install -y nx freenx
🙂
proxy wrote:
[ ! $(rpm -qa | grep rpmforge-release) ] && echo -e "Installation du dépot RPMforge en cours...\n" && rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.$(uname -m).rpm
[ ! $(rpm -qa | grep freenx) ] && echo -e "Installation de FreeNX en cours...\n" && yum install -y nx freenx
🙂
je ne trouve pas que le code soit bien lisible en une ligne. Certes le script est raccourci, mais d'un autre coté je trouve ca moin lisible.
Après chacun ses gouts...
On peut toujours ruser si tu ne veux pas tout sur une même ligne.
[ ! $(rpm -qa | grep rpmforge-release) ] && \
echo -e "Installation du dépot RPMforge en cours...\n" && \
rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.$(uname -m).rpm

[ ! $(rpm -qa | grep freenx) ] && \
echo -e "Installation de FreeNX en cours...\n" && \
yum install -y nx freenx
Histoire d'alléger encore un chouïa :
rpm -qa | grep rpmforge-release || { echo "Installation du dépot RPMforge en cours..." ; rpm -Uhv [url]http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.$(uname[/url] -m).rpm; }
rpm -qa | grep freenx || { echo "Installation de FreeNX en cours..."; yum install -y nx freenx; }
des fans de l'obfuscation?
madko wrote:des fans de l'obfuscation?
On peut faire encore plus obscuroptimisé, toi aussi joue et gagne des octets.
on se croirait chez les Perl Mongers :hammer:
rpm -q <paquet> plutot que |grep <paquet>, voila j'ai gagné des octets :p
On peu meme en gagner un max en ne testant pas la presence des paquets et en installant direct, pas grave s'ils y sont déjà yum et rpm ne feront rien