Logo Khaganat
Traductions de cette page?:

Ceci est une ancienne révision du document !


Sysadmin, ou comment les geeks s'occupent de faire fonctionner internet...

Reboot

Quoi que l'on fasse comme modification sur un système, il faut toujours veiller à ce qu'après un redémarrage la machine se retrouve dans un état identique à celui dans lequel elle était avant ce redémarrage.

Par exemple, quand on ajoute une route sur la CLI, bien veiller à ce que la route soit aussi configurée “en dur”. Dans le cas de Debian, on peut mettre la commande dans par exemple /etc/network/interfaces en ajoutant up devant la commande qu'on a exécuté.

CLI :
route add -host ftp.fr.debian.org gw 192.168.100.253
/etc/network/interfaces :
iface eth0 inet static
    address [...]
up route add -host ftp.fr.debian.org gw 192.168.100.253
down route del -host ftp.fr.debian.org gw 192.168.100.253

Attention à la seconde ligne avec down, ce n'est pas route add mais route del, pour supprimer la route lors de l'extinction ou du redémarrage.

Cela n'est qu'un exemple. À chaque modification il faut se poser la question : “Est-ce que ma modification est «reboot-proof» ?”

sudo

:!: Soyez très prudents avec sudo, si on ne sait pas exactement ce que l'on fait cela peut avoir des répercussions graves sur la sécurité du système.

Généralement on considère que sudo permet de donner les pleins droits à un utilisateur. Certes, mais sudo est bien plus que cela : il permet une gestion assez fine des droits à octroyer à un utilisateur ou à un groupe. Par exemple, on peut limiter les droits root à une seule commande (dans l'exemple l'utilisateur s'appelle “bofh”) :

/etc/sudoers (à éditer avec la commande "visudo", pour éviter les erreurs de syntaxe !)
bofh ALL=NOPASSWD:/bin/ls

Ici, bofh aura le droit d'exécuter la commande /bin/ls avec les droits root, mais c'est tout.

On peut aussi limiter à un sous-ensemble de quelques commandes seulement (et pas uniquement une seule), à l'aide de la directive Cmnd_Alias :

/etc/sudoers
Cmnd_Alias MESCOMMANDES = /bin/ls, \
                          /usr/bin/id, \
                          /bin/pwd

bofh ALL=NOPASSWD:MESCOMMANDES

Lorsque l'on définit les commandes autorisées, il faut faire attention à bien définir le périmètre dans lequel la commande peut agir. Par exemple, on ne mettra jamais de chemin contenant un “wildcard” comme *, ou alors avec un complément :

Cmnd_Alias MESCOMMANDES = /bin/more /var/log/*.log, \
                          !/bin/more /var/log/*../*

Parfois on essaye de lancer une de ces commandes via sudo, mais ça ne fonctionne pas. Il est possible que l'on tente d'exécuter la mauvaise commande, ou du moins de la mauvaise manière. En effet – et c'est une bonne pratique – les commandes sont spécifiées avec leur chemin absolu dans /etc/sudoers, et il faut les lancer avec leur chemin absolu. Le plus simple moyen de savoir quelles commandes on a le droit d'exécuter via sudo est de lancer la commande suivante, sachant que cela montrera les commandes sudo que l'utilisateur actuel a le droit d'exécuter :

sudo -l

Si les commandes ne sont pas spécifiées avec leur chemin absolu, c'est une faille potentielle de sécurité. En effet si au lieu de /bin/ls on n'a que ls, il suffit à l'utilisateur de placer un exécutable malicieux (disons, un shell) nommé ls dans son dossier personnel (dans son $PATH en fait) pour qu'il s'exécute en priorité sur /bin/ls.

Il y a aussi quelques commandes avec lesquelles il faut être prudent, avec sudo, quand bien même on interdit explicitement *../* dans le chemin. Quelques exemples :

vi (ou tout autre éditeur, en fait)
less

En effet, ces commandes permettent d'écrire n'importe où dans l'arborescence, ou d'ouvrir n'importe quel fichier (pensez par exemple à /etc/shadow ou /root/.my.cnf).

Une règle générale à ce propos pourrait être de n'avoir dans /etc/sudoers que des commandes qui ne peuvent rien écrire sur le disque (oui, less peut écrire dans un fichier, se référer à la documentation pour les détails).

Il existe souvent des moyens de contourner ces risques, mais pas toujours.

find

Pour supprimer des fichiers de manière automatisée on pourrait être tenté d'exécuter ce genre de commande :

rm -rf `find /var/tmp/ -type d -name .svn`

Cette commande cherche tous les dossiers nommés .svn dans /var/tmp/ de manière récursive, puis passe le résultat à la commande rm -rf. Le problème qui peut se poser est si dans cette liste de dossiers, l'un d'eux contient une espace dans son chemin, la commande va échouer et donc ce dossier ne sera pas supprimé.

Pour bien faire les choses, autant dire directement à la commande find de supprimer les dossiers trouvés, via l'option -exec :

find /var/tmp/ -type d -name .svn -exec rm -rf {} \;
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/sysadmin/adminserveur.1522448860.txt.gz · Dernière modification : 2021/12/03 19:18 (modification externe)

Licences Mentions légales Accueil du site Contact