Archives de la catégorie ‘Industrialisation’

#!/bin/bash
# System-wide crontab file and cron job directory. Change these for your system. 
CRONTAB='/etc/crontab' 
CRONDIR='/etc/cron.d' 
# Single tab character. Annoyingly necessary. 
tab=$(echo -en "\t") 
# Given a stream of crontab lines, exclude non-cron job lines, replace 
# whitespace characters with a single space, and remove any spaces from the 
# beginning of each line. 
function clean_cron_lines() { 
    while read line ; do 
        echo "${line}" | 
            egrep --invert-match '^($|\s*#|\s*[[:alnum:]_]+=)' | 
            sed --regexp-extended "s/\s+/ /g" | 
            sed --regexp-extended "s/^ //" 
    done; 
} 
# Given a stream of cleaned crontab lines, echo any that don't include the 
# run-parts command, and for those that do, show each job file in the run-parts 
# directory as if it were scheduled explicitly. 
function lookup_run_parts() { 
    while read line ; do 
        match=$(echo "${line}" | egrep -o 'run-parts (-{1,2}\S+ )*\S+') 
        if [[ -z "${match}" ]] ; then 
            echo "${line}" 
        else 
            cron_fields=$(echo "${line}" | cut -f1-6 -d' ') 
            cron_job_dir=$(echo  "${match}" | awk '{print $NF}') 
            if [[ -d "${cron_job_dir}" ]] ; then 
                for cron_job_file in "${cron_job_dir}"/* ; do  # */ <not a comment> 
                    [[ -f "${cron_job_file}" ]] && echo "${cron_fields} ${cron_job_file}" 
                done 
            fi 
        fi 
    done; 
} 
# Temporary file for crontab lines. 
temp=$(mktemp) || exit 1 
# Add all of the jobs from the system-wide crontab file. 
[[ -f ${CRONTAB} ]] && cat "${CRONTAB}" | clean_cron_lines | lookup_run_parts >"${temp}"  
# Add all of the jobs from the system-wide cron directory. 
[[ -f ${CRONTAB} ]] && cat "${CRONTAB}" | clean_cron_lines | lookup_run_parts >"${temp}"  
# Add all of the jobs from the system-wide cron directory. 
[[ -d ${CRONDIR} ]] && ( cat "${CRONDIR}"/* 2> /dev/null | clean_cron_lines >>"${temp}" ||  true ) # */ <not a com
ment>
# Add each user's crontab (if it exists). Insert the user's name between the 
# five time fields and the command. 
while read user ; do 
    crontab -l -u "${user}" 2>/dev/null | 
        clean_cron_lines | 
        sed --regexp-extended "s/^((\S+ +){5})(.+)$/\1${user} \3/" >>"${temp}" 
done < <(cut --fields=1 --delimiter=: /etc/passwd) 
# Output the collected crontab lines. Replace the single spaces between the 
# fields with tab characters, sort the lines by hour and minute, insert the 
# header line, and format the results as a table. 
cat "${temp}" | 
    sed --regexp-extended "s/^(\S+) +(\S+) +(\S+) +(\S+) +(\S+) +(\S+) +(.*)$/\1\t\2\t\3\t\4\t\5\t\6\t\7/" | 
    sort --numeric-sort --field-separator="${tab}" --key=2,1 | 
    sed "1i\mi\th\td\tm\tw\tuser\tcommand" | 
    column -s"${tab}" -t 
rm --force "${temp}"

1. Gestion des utilisateurs sous Unix/Linux

Unix est multi-utilisateurs. Pour cette raison, tout le monde ne peut pas tout faire, à part l’administrateur système (traditionnellement nommé root), qui à le droit de lire et d’écrire tous les fichiers de tous les répertoires.

Chaque utilisateur est désigné de manière unique par son login (son « nom »). De plus, chaque utilisateur appartient à un ou plusieurs groupes. Par exemple, sous Red Hat Linux, chaque utilisateur est par défaut seul membre de son groupe personnel et membre du groupe users. Ainsi, sur ma machine, j’ai un utilisateur damien qui est membre des groupes damien et users. L’intêret d’avoir chaque utilisateur unique membre d’un groupe dépasse le cadre de cet article.

Un fichier ou un répertoire appartient toujours à un utilisateur et à un groupe. D’autre part, un fichier peut être accessible en lecture, en écriture et en exécution. Les permissions sont distinctes pour l’utilisateur propriétaire du fichier, pour le groupe propriétaire et pour le reste du monde. Ces permissions sont affichées par la commande ls quand on lui passe l’option -l:

-rw-r--r--  1 damien   users  297 Jun 07 10:31 toto

Cette ligne signifie que le fichier toto appartient à l’utilisateur damien et au groupe users, avec les droits -rw-r--r--. Les autres valeurs (1, 297 et la date) ne nous intéressent pas ici.

Décryptage des droits -rw-r–r– : le premier caractère représente le type de fichier: « – » pour un fichier normal, « d » pour un répertoire, « p » pour un tube, « b » ou « c » pour un périphérique, « l » pour un lien symbolique.

Les trois suivants représentent les droits de l’utilisateur propriétaire du fichier.

  • « r » représente le droit de lecture,
  • « w » le droit d’écriture
  • « x » le droit d’exécution

Ici, « rw- » signifie que l’utilisateur damien peut lire et écrire dans le fichier, mais pas l’exécuter.
Les trois caractères suivants représentent les permissions du groupe; ici, tous les membres du groupe users peuvent lire le fichier, mais pas y écrire.
Enfin, les trois derniers caractères ont une signification analogue pour le reste du monde.

Une astruce mnémotechnique : pensez au prénom HUGO et vous retrouverez UGO : User, Group, Other

Une petite nuance pour les répertoires: si un utilisateur a le droit d' »exécution » sur un répertoire, cela signifie qu’il peut y entrer avec la commande cd ou équivalent.

Comment fixer les droits : on a vu que les droits d’accès sont fixés pour UGO et sont en rwx.

  rwx
  ||+-- 1
  |+--- 2
  +---- 4

Ainsi, fixer les droits sur un répertoire ou un fichier peut être synthétiser par en additionnant les valeurs pour chaque UGO.

Par exemple, un groupe « rwx » est représenté par 4+2+1=7. Un groupe « r– » par 4+0+0=4. Un groupe « –x » par 0+0+1=1. Ainsi, les permissions rw-r--r-- de notre fichier toto s’écrivent 644.

Fixer les droits :

chmod 644 toto

2. Setuid sur un script Shell ou un programme

Rappel : une ligne de commande précédée par $ indique un utilisateur lambda. Une ligne de commande précédée par # indique que cette commande est exécutée par l’utilisateur ROOT

Dans l’exemple ci-dessous, on modifie les droits du script monshell.sh par un SETUID=4 (on fixe l’utilisateur d’exécution à ROOT) :

# chown root:root monshell.sh
# chmod 4755 monshell.sh
# exit
$ ./monshell.sh

L’utilisateur exécute ici le script monshell.sh avec les droits ROOT et ce, bien que n’étant pas dans le groupe ROOT !

L’administration d’un parc informatique important peut devenir une tâche ardue si le nombre de postes de travail est important ou s’ils sont répartis sur une zone géographique vaste.

Dans ce cas, vous avez 2 solutions majeures :

  • Le réseau « basket » : à l’aide d’une clé USB, d’un partage réseau et d’une bonne paire de chaussures de sports, votre rôle sera de vous connecter sur chaque poste de travail et de réaliser l’installation manuelle. J’oubliais que vous pouviez aussi vous connecter en prise de main à distance 🙂
  • Packager votre application et la proposer au déploiement : cette solution sera étudiée ci-dessous

1. Installation d’une application : description

L’installation d’une application se fait via l’exécution d’un programme exécutable (.exe) qui réalise différentes opérations :

  • Base de registre : ajout/modification de clés et de valeurs
  • Système de fichiers : ajout de fichiers selon une arborescence
  • Base de données de configuration logicielle Microsoft : ajout des informations sur l’application dans la base de données (Panneau de configuration/Ajout-suppression de programmes)

L’application se charge également de valider les pré-requis :

  • architecture CPU,
  • espace disque,
  • mémoire vive,
  • version d’IE,
  • version de .NET,

2. Pré-requis : le poste de travail source

Afin de packager l’application cible, vous devez vous appuyer sur un poste de travail type. Ce poste de travail doit contenir toutes les applications standards de votre entreprise, être intégrée à votre domaine Active Directory et connectée à votre réseau.

Vous devez être administrateur local de ce poste de travail.

Il doit également posséder 2 applications :

  • regshot : disponible ici
  • MSI Studio Pro : disponible ici

Votre poste de travail source peut également être, et je vous le conseille, une machine virtuelle.
Dans ce cas, avant toute modification, vous activerez les snapshots. Cette opération vous permettra de revenir facilement en arrière et retrouver un poste de travail source propre.

3. Cliché pré-installation de la base de registre

  1. Fermer toutes les applications ouvertes
  2. Exécuter l’application regshot.exe
    regshot1
  3. Ajouter un commentaire, ici : « Shot 1 : Application TEST »
  4. Cliquer sur le bouton <1st shot>, <Shot and save>
  5. Enregistrer le résultat dans un fichier, ici : TEST-Shot-1.hiv
  6. Fermer l’application

4. Installation de l’application cible

Installez votre à application.

Lors de l’installation, veillez tout de même à noter les différents chemins d’installation, les modifications réalisées sur l’arborescence du Menu Démarrer et les modifications apportées sur le bureau.

TESTEZ VOTRE NOUVELLE APPLICATION

5. Cliché post-installation de la base de registre

  1. Fermer toutes les applications ouvertes
  2. Exécuter l’application regshot.exe
    regshot1
  3. Ajouter un commentaire, ici : « Shot 2 : Application TEST »
  4. Cliquer sur le bouton <1st shot>, <Load> et sélectionner le fichier TEST-Shot-1.hiv
    regshot2
  5. Cliquer sur le bouton <2nd shot>, <shot>
    regshot3
  6. Cliquer sur le bouton <cOmpare>
    RegShot ouvre alors un fichier txt contenant les différences entre les 2 clichés. On y trouve en outre les clés et les valeurs ajoutées/modifiées/supprimées
  7. Enregistrer ce fichier résultat
  8. Fermer l’application

6. Packager l’application

  1. Ouvrez l’application MSI Studio Professional
  2. Sélectionnez « Create a New Setup Installation for a Sofware Program »
  3. Sélectionnez « Windows Template » puis cliquez sur « Open the new project directly »
  4. Configuration du projet (* = Obligatoire)
    Product Details – Name (*): saisissez le nom de l’application tel qu’il apparaitra sur le poste de travail
    Product Details – Version (*): saisissez le numéro de version
    Product Details – Manufacturer (*): saisissez l’éditeur du programme
    Product Details – Default Directory (*): sélectionnez le dossier de destination par défaut
    General Information – Title :
    General Information – Subject :
    General Information – Author : saisissez l’auteur du projet, c’est à dire vous
    General Information – Keywords :
    General Information – Comments :
    General Information – Package Code (*): cliquez sur le bouton <Create>, pour générer un identifiant unique
  5. Support et panneau de configuration
    Dans la zone « Add or Remove Programs », vous pouvez paramétrer l’intégration de votre nouvelle application dans le Panneau de configuration-Ajout/suppression de programmes de Windows.
    Les informations de support sont fortement recommandées. Support Information – Contact :  nom du chef de projet responsable de cette application
    Support Information – Phone Number : numéro de téléphone de votre centre de service ou de votre équipe support niveau 1
    Support Information – Support URL : URL d’accès à la page Web de support de votre application
  6. Applications Requirements
    Sélectionnez ici (si nécessaire) les versions minimales nécessaires à la bonne exécution de votre programme

    • Windows 9x
    • Windows NT
    • Internet explorer
    • .Net framework

    Sélectionnez ensuite (si nécessaire) les applications (fichiers .exe) nécessaires à la bonne exécution de votre programme cible.

    Si votre cible requière le framwork .Net, spécifiez le mode d’installation :

    • Run the .NET MSI from a UNC network or local path : si vous disposez d’un partage réseau contenant le fichier d’installation
    • Store the .NET Framework within the package : si vous souhaitez intégrer le pacage d’installation .NET dans votre propre package
  7. Installation Properties
    Configurez ici votre méthode d’installation (redémarrage, …)
  8. Files and Registry ( <— C’est ici que vous ajoutez les fichiers, registre et autres variables d’environnement de votre future application)
    1. Filesmsi1
      A partir de l’onglet « System View », sélectionnez le dossier d’installation de votre application source
      A partir de l’onglet « Project View », sélectionnez le dossier de destination
      Cliquez sur le bouton <Add Folder>
    2. Registry
      A partir du fichier issu de RegShot, sélectionnez les clés et les valeurs à ajouter
  9. Shortcuts and Other Items
    1. Shortcuts : ajoutez ici la création de raccourcis
    2. INI Files : ajoutez ici la création de fichier INI spécifique ou modifiez un fichier INI existant
    3. Environnement variables : ajoutez/modifiez des variables d’environnement (Poste de Travail/Propriété/Avancé/Variable d’environnement)
    4. Service Management : déterminez ici l’exécutable à configurer en tant que service et gérez son mode de démarrage
  10. Dialogs and Actions

    1. Dialogs : ici, vous pouvez ajouter/modifier les boites de dialogue prédéfinies dans l’application. En effet, un fichier MSI, tel une application, communique avec son utilisateur (licence, path, …).
    2. Dialog Sequencing : le séquencement des boites de dialogue peut être configuré
  11. A vos marques, prêts, …., packagez et testez
    Ctrl+B

7. Ajouter votre fichier MSI pour déploiement sur votre parc

Cette section est ou sera abordée dans l’article « Implémentation GLPI »

Ce script a pour objectif de changer le mot de passe d’un compte passé en paramètre sur l’ensemble des serveurs UNIX de votre parc.
Pré-requis :
  • Se connecter en tant que ROOT sur votre serveur
  • Configurer un échange de clés SSH entre votre serveur et l’ensemble des serveurs de votre parc
  • Une liste des serveurs cibles dans le fichier /root/scripts/listedesserveursatraiter
Utilisation :
#ChangePasswd.sh <nom du compte>

ex : #ChangePasswd.sh root
Code :
#!/bin/bash

compte = $1

echo "Modification du mot de passe $compte sur l'ensemble des serveurs"
read -s -p "Nouveau mot de passe : " mdp
echo ""
if test -z "$mdp" ; then
        echo "Le mot de passe ne peut pas être vide"
        exit
fi
read -s -p "Vérification du mot de passe saisi : " mdp2
if test "$mdp" != "$mdp2" ; then
        echo "Les mots de passe saisis ne correspondent pas"
        exit
fi

echo "Modification du mot de passe du compte $compte"

SERVEUR=/root/scripts/listedesserveursatraiter
for serveur in `cat $SERVEUR|grep "^[^#].*$"`
do
        echo "Traitement du serveur : $serveur"
        ssh $serveur "echo $compte:$mdp|chpasswd"
done

echo "Après avoir VERIFIE LES CONNEXIONS sur CHAQUE SERVEUR, vous pouvez fermer ce shell"

echo "Après avoir VERIFIE LES CONNEXIONS sur CHAQUE SERVEUR, vous pouvez fermer ce shell"
 
Commentaires :  le fichier /root/scripts/listedesserveursatraiter contient la liste des serveurs :
serveur1
serveur2
#ce serveur ne sera pas traité
Parce que la connexion SSH est configurée par échange de clés, le script se charge d’envoyer, sans authentification, la commande chpasswd <nom du compte>:<mot de passe> à tous les serveurs.

1.           Introduction

OCS Inventory est une application client-serveur qui permet l’inventaire complet et dynamique d’un parc informatique. Il prends en charge les OS tels que Microsoft, Linux (toutes distributions), Solaris, AIX, HP-UX, Mac OS, …

Ce document décrit les différentes étapes d’installation et de configuration du serveur OCS Inventory et son agent d’inventaire sur les systèmes Microsoft Windows et Linux ainsi que les processus de compilation d’applications à partir des sources.

2.           A qui s’adresse cette procédure

Ce document s’adresse à des ingénieurs ou administrateurs Microsoft et Linux ayant déjà administrés un serveur Microsoft et/ou Linux.

3.           Pré-requis

3.1.       Pré-requis « Matériels »

    • Aucun

3.2.       Pré-requis « Logiciels »

  • Aucun

3.3.       Pré-requis « Logistique»

  • Accès en tant qu’administrateur du serveur cible

4.  Installation et configuration sous Microsoft Windows

4.1.          Installation de l’agent OCS

  1. Se connecter sur le serveur cible en tant qu’administrateur
  2. Télécharger l’agent OCS Inventory à partir du portail OCS Inventory
  3. Exécuter le programme OcsAgentSetup.exe
  4. Cliquer sur le bouton Suivant
  5. Cliquer sur le bouton « J’accepte »
  6. Configurer l’agent OCS comme ci-dessous puis cliquer sur le bouton Suivant
  7. Cliquer sur le bouton Installer

5.  Déploiement sous Microsoft Windows

5.1.          Installation de l’outil de déploiement

A partir de l’archive OCSNG_AGENT_DEPLOYMENT_TOOL_1.02.zip

installer le programme “OCS Inventory NG Agent Deployment Tool” avec la configuration par défaut.

5.2.          Déploiement de l’agent Windows

  1. Exécuter le programme « OCS Inventory NG Agent Deployment Tool » via le menu démarrer de votre station de travail
  2. Cliquer sur le bouton « Windows Agent »
  3. Sélectionner la plage d’adresses IP ou les serveurs à déployer
  4. Configurer le déploiement comme ci-dessous :
  5. S’authentifier en tant qu’administrateur du domaine
  6. Appuyer sur le bouton « Start »


5.3.          Déploiement de l’agent Linux

  • Appuyer sur le bouton « Start »

6. Installation du CPAN et des modules PERL

6.1.          Pré-requis  Debian

# apt-get install bzip2 lynx make gzip ncftp ftp pgp wget unzip curl

6.2.          Installation du CPAN

# perl -MCPAN -e shell

Répondre ok partout

Your http_proxy? [] 172.16.1.2:3128

cpan> install Bundle::CPAN

6.3.          Installation des modules PERL

cpan> install Digest::MD5 XML::Simple Net::IP LWP Proc::Daemon Proc::PID::File Compress::Zlib

6.4.          Installation des packages RPM

# yum install dmidecode perl-LWP-UserAgent-Determined.noarch lspci pciutils ipmitool

7. Installation de l’agent OCS

7.1.          Installation à partir des paquets

#apt-get install ocsinventory-agent

7.2.          Installation à partir des sources

En tant que : ROOT

cd /usr/local/src

wget –proxy=off http://monserveurquicontientlessources/telechargement/Ocsinventory-Agent-1.1.2.tar.gz

cp Ocsinventory-Agent-1.1.2.tar.gz /tmp

cd /tmp

tar -xzvf Ocsinventory-Agent-1.1.2.tar.gz

cd Ocsinventory-Agent-1.1.2

perl Makefile.PL

make

make install

Do you want to configure the agent

Please enter ‘y’ or ‘n’?> [y]

Where do you want to write the configuration file?

0 -> /etc/ocsinventory

1 -> /usr/local/etc/ocsinventory

2 -> /etc/ocsinventory-agent

?>  2

Do you want to create the directory /etc/ocsinventory-agent?

Please enter ‘y’ or ‘n’?> [y]

What is the address of your ocs server?> [ocsinventory-ng] monServeurOcsQueJeViensDInctaller

Do you need credential for the server? (You probably don’t)

Please enter ‘y’ or ‘n’?> [n]

Do you want to apply an administrative tag on this machine

Please enter ‘y’ or ‘n’?> [y]

tag?> DEV ou SIMU ou PROD

Do yo want to install the cron task in /etc/cron.d

Please enter ‘y’ or ‘n’?> [y]

Where do you want the agent to store its files? (You probably don’t need to change it)?> [/var/lib/ocsinventory-agent]

Do you want to create the /var/lib/ocsinventory-agent directory?

Please enter ‘y’ or ‘n’?> [y]

Should I remove the old linux_agent

Please enter ‘y’ or ‘n’?> [n]

Do you want to use OCS-Inventory software deployment feature?

Please enter ‘y’ or ‘n’?> [y]

Do you want to send an inventory of this machine?

Please enter ‘y’ or ‘n’?> [y]