[inetdoc.LINUX]
http://www.linux-france.org/prj/inetdoc
Exploration GNU/Linux - Séance 4
Shell Bash
Processus et Permissions sur le système de fichiers
Compilation d'une application à partir des sources
Philippe Latu
etuippe.latu(at)linux-france.org
IUT 'A' Paul Sabatier - STRI
$Id: explore.seance.4.mgp 1238 2008-01-16 09:43:56Z latu $
(page 1)
(2/25)
Administration du système GNU/Linux
- Objectifs
- Utiliser les ressources du shell BASH
- Visualiser et gérer les processus
- Visualiser et gérer les permissions sur les fichiers
- Compiler une application à partir des sources
(page 2)
(3/25)
Ressources du shell BASH
- BASH : Bourne Again Shell
- Shell BASH = interpréteur de commandes
- conforme aux spécifications IEEE
- POSIX P1003.2/ISO 9945.2 Shell and Tools standard
- Shell BASH = environnement de développement
- Fonctions et alias
- Arithmétique et tableaux
- Manipulations de chaînes de caractères
- Documentation shell BASH
$ man sh # Complet sur la syntaxe
$ help # Commandes internes au Shell
(page 3)
(4/25)
Ressources du shell BASH
- Edition et correction des lignes de commandes
- Synthèse des «styles» Emacs, vi, IOS et autres
shells
- Tabulation = appel fonction 'auto_completion'
- Historique et ré-exécution des commandes
- Commande history
- Séquences de touches
- Ctrl+R, Ctrl+A, Ctrl+E
- Shift+PageUp, Shift+PageDown, flèches haut et bas
- Contrôle des tâches
- Commandes internes = jobs, suspend
- Tubes ou pipes = '|'
- Enchaînements = ';', '&&', '||'
(page 4)
(5/25)
Ressources du shell BASH
- Exemple de script en shell BASH
- Ancien script système /etc/init.d/modutils
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
[ -f /proc/modules ] || exit 0
[ -e /sbin/depmod ] || exit 0
echo -n "Calculating module dependencies... "
depmod -a > /dev/null
echo "done."
# Loop over every line in /etc/modules.
echo -n 'Loading modules: '
(cat /etc/modules; echo) | # make sure there is a LF at the end
while read module args
do
case "$module" in
\\#*|"") continue ;;
esac
echo -n "$module "
modprobe $module $args
done
echo
(page 5)
(6/25)
Ressources du shell BASH
- Environnement utilisateur - BASH
- Applications
- Lister l'historique des commandes ?
- Quel est l'effet de la séquence Ctrl+R ?
- Éditer le fichier ~/.bashrc pour obtenir les listes de fichiers en
couleur
- Tester la touche Tab sur un chemin et/ou un nom de fichier
- Quel est l'effet des séquences de touches Ctrl+A, Ctrl+E et Ctrl+D
?
- Quelles sont les différences entre les commandes set et env ?
- Comment accéder à la documentation de ces 2 commandes ?
(page 6)
(7/25)
Processus
- Définitions
- Processus = programme en cours d'exécution
- Ressources systèmes partagées entre processus
- L'ordonnanceur attribue les tranches de temps processeur
- Fonctions multi-tâches préemptives du noyau Linux
- Planification de l'exécution des processus
- Contrôle en début et fin de chaque tranche de temps
processeur
- Contrôler le fonctionnement multi-tâche et la stabilité
- Qualité du système d'exploitation
(page 7)
(8/25)
Processus
- Tous les programmes ne sont pas parfaits
- Gérer les processus.
- Qui sont les propriétaires des processus ?
- Quelles sont les ressources utilisées ?
- Comment changer un niveau de priorité ?
- Comment tuer un processus défectueux ?
- Commandes de gestion des processus
- Qui, quoi, combien
- w, ps, top, htop, Surveillance système KDE
- Priorités
- Signalisation et arrêt
- utilisation mémoire
- free et cat /proc/meminfo
(page 8)
(9/25)
Processus
- Applications à l'aide des pages de manuel
- Commande ps
- Visualiser les processus, les propriétaires et les terminaux
- Quelle est la signification de la commande 'ps xaf' ?
- Commandes kill et killall
- Quelle est la signification du terme signal ?
- Comment relancer un processus ?
- Comment tuer un processus «en force» ?
- Processus/services inutiles
- Relever un processus inutile en cours d'exécution
- Retirer le paquet correspondant
(page 9)
(10/25)
Permissions sur le système de fichiers
- Un objet = «masque» de permissions
$ ls -lA
drwx------ 2 etu etu 4096 Jan 1 00:04 mail
drwxrwxr-x 3 etu etu 4096 Nov 18 09:54 public_html
-rw-rw---- 1 etu etu 136430 Feb 6 16:52 trash.file
^ ^ ^ ^ ^ ^
| | | | | |
permissions owner group size date & time filename
- Chaque utilisateur appartient à plusieurs
groupes
$ id
uid=1000(etu) gid=1000(etu) groups=1000(etu),29(audio)
^ ^ ^
\\__ private _/ public group(s)_/
(page 10)
(11/25)
Permissions sur le système de fichiers
- Masque des permissions de base = 10 indicateurs
- Premier indicateur = nature de l'objet
- Fichier, répertoire, périphérique ou socket
- Autres indicateurs = droits
- Lecture, écriture et exécution
- Propriétaire, groupe et autres (world)
d rwx rwx rwx
^ ^ ^ ^
| | | `--------> Permissions for world
| | `------------> Permissions for group
| `----------------> Permissions for user
`-------------------> - = file, d = directory, \ b = block, c = character,
\ l = symlink, s = socket
(page 11)
(12/25)
Permissions sur le système de fichiers
- Commandes de manipulations
- ls, chmod, chown et umask
- Codage des permissions
- Chiffres : 1 = exec, 2 = write, 4 = read
- Lettres : x = exec, w = write, r = read
$ touch toto
$ ls -l toto
-rw-r--r-- 1 etu etu 0 jun 11 20:20 toto
$ chmod +x toto
$ ls -l toto
-rwxr-xr-x 1 etu etu 0 jun 11 20:20 toto
^^^^ ^^ ^
4214 14 1
---------
7 5 5
- chmod +x toto est identique à chmod 755
toto
(page 12)
(13/25)
Permissions sur le système de fichiers
- Applicaltions
- Commande ls
- Donner un exemple de programme exécutable
- Donner un exemple de lien symbolique
- Donner un exemple de périphérique
- Donner un exemple de fichier caché
- Masques de permissions
- Donner la valeur numérique du masque d'un fichier de
données
- Donner la valeur numérique du masque d'un fichier
exécutable
- Créer et rendre le script suivant exécutable
#!/bin/sh
echo "Hello World !"
(page 13)
(14/25)
Permissions sur le système de fichiers
- Masque étendu
- 3 bits supplémentaires qui étendent les permissions
- SUID : Set User ID bit
- SGID : Set Group ID bit
- directory Sticky bit
- Ces bits prennent la place du bit d'exécution 'x'
- Pour le propriétaire du fichier
- 's' indique qu'il a aussi le droit d'exécution
- 'S' indique qu'il n'a pas le droit d'exécution
- Pour le groupe du fichier
- 's' indique qu'il a aussi le droit d'exécution
- 'S' indique qu'il n'a pas le droit d'exécution
- Directory Sticky bit
- Utile pour les répertoires partagés
- Un utilisateur ne peut effacer que les fichiers qu'il a
créé
(page 14)
(15/25)
Permissions sur le système de fichiers
- Applications
- Quel est le rôle du masque étendu pour les objets ?
- /usr/bin/passwd, /usr/bin/wall et /tmp
- Comment activer le bit SUID sur un fichier ?
- Créer un fichier test avec la commande touch.
- Donner les options de la commande chmod
- Comment activer le bit SGID sur un répertoire ?
- Créer un répertoire 'testdir' avec la commande 'mkdir'
- Donner les options de la commande chmod
- Comment activer le Directory Sticky bit sur un répertoire ?
- Créer un répertoire 'testdir' avec la commande 'mkdir'
- Donner les options de la commande chmod
(page 15)
(16/25)
Permissions sur le système de fichiers
- Attention ! masque étendu = danger
- Bit SUID = gros problèmes de sécurité sur les
services
- Attaques de type «buffer overflow»
- L'utilisation de ce bit est très encadrée
- Utilisation d'arborescences dédiées par services
(page 16)
(17/25)
Compilation d'une application
- Compilation de logiciel libre
- Étapes classique
- ./configure ; make ; make install
- Téléchargement et décompression des sources
- Commande tar
- Outils de (dé)compression (gzip|bzip2)
- Étape configure
- Garantit la portabilité du logiciel
- Détermine les caractéristiques du système
- Compilateur, processeur, outils
- Vérifie la présence des bibliothèques
nécessaires
- Génère les Makefiles
(page 17)
(18/25)
Compilation d'une application
- Étape make
- Compilation des modules du logiciel
- Liens entre bibliothèques et modules
- Étape make install
- Copie des fichiers dans l'arborescence
- Exécutables
- Bibliothèques
- Pages de manuel
- Arborescence /usr/local
- Distinction entre
- Applications distribuées via les paquets
- Applications compilées localement
- Répertoire /usr/local/bin
- Doit figurer dans la variable $PATH de l'utilisateur
(page 18)
(19/25)
Compilation d'une application
- Outils GNU 'autoconf', 'automake' et 'libtool'
- Automatisation des tâches
- Génération d'arborescences sources
- Contrôles des dépendances sur les sources
- Diffusion d'applications portables
- Entre architectures
- Entre distributions
- Entre branches Unix
(page 19)
(20/25)
Compilation d'une application
- Exemple avec l'analyseur réseau WireShark
- Retirer les paquets installés avec le nom wireshark*
- Télécharger les sources
- Déplacer le fichier des sources
- Se connecter en mode super-utilisateur
- Répertoire /usr/local/src
- Décompresser les sources
- Commande 'tar'
- Rechercher les options dans les pages de manuel
- Consulter les fichiers d'aide à l'installation
- README, README.linux, INSTALL, INSTALL.configure
- Chercher les options particulières de l'étape configure
- Repérer les bibliothèques dont dépend
l'application
(page 20)
(21/25)
Compilation d'une application
- Identifier le rôle des bibliothèques
- Retrouver les paquets des bibliothèques
- Distinction entre
- Bibliothèque d'exécution
- Bibliothèque de développement
# dpkg -l "libgtk*dev"
# dpkg -l "libpcap*"
- Installer les paquets correspondant
# apt-get install libgtk2.0-dev
# apt-get install libpcap-dev
(page 21)
(22/25)
Compilation d'une application
- Exécuter la commande configure
# ./configure
- Visualiser le bilan de l'exécution
- Contrôler les problèmes de
dépendances
- Vérifier la liste des options retenues
- Reprendre l'exécution de configure
- Tant qu'il y a des messages d'erreur
- Si des options doivent être
ajoutées
(page 22)
(23/25)
Compilation d'une application
- Exécuter la commande make
- Tester l'application
- Exécuter wireshark depuis le répertoire courant
# ./wireshark
-
- !! Attention aux droits sur le partage de
l'écran
- Exécuter la commande 'make install'
- Installation dans l'arborescence /usr/local
- Repérer les chemins des
bibliothèques
- Repérer les chemins des pages de manuel
- Reprendre le test d'exécution de
l'application
(page 23)
(24/25)
Application graphique & droits
- Activité réseau = accès direct aux interfaces
- Travail en mode super-utilisateur
- Recours au bit SUID proscrit
- Partage de l'écran entre utilisateurs
$ xhost
access control enabled, only authorized clients can connect
$ xhost +local:
non-network local connections being added to access control list
$ xhost
access control enabled, only authorized clients can connect
LOCAL:
- Partage de l'écran autorisé
- Utilisateurs locaux non-réseau
- Tester à nouveau wireshark
(page 24)
(25/25)
Synthèse
- Shell BASH
- Interpréteur de commandes aux fonctions très étendues
- Utilisation de la console très pratique
- Abandon des manipulations à la souris
- Processus
- Droits limités pour les propriétaires des processus
- Permissions sur le système de fichiers
- Principe de gestion des droits UNIX
- Bon compromis simplicité/efficacité
- Compilation d'application à partir des sources
- Bonne connaissance des bibliothèques à utiliser
- Donc du coeur de l'application
- Bonne connaissance de l'environnement de développement
- Pour débuter, utilisez les paquets !
(page 25)