This is an old revision of the document!
Table of Contents
linux
Index de la rubrique linux
Astuces
Nettoyer sa Debian
Voici quelques commandes et utilitaires à installer afin de nettoyer/entretenir son système (source : http://forum.debian-fr.org/viewtopic.php?f=8&t=3826&sid=1f219a3a825538c5d970f1ce18ceb4a0) :
Pour supprimer les locales non utilisées:
Localpurge
Désinstaller les paquet orphelins
apt-get remove --purge `deborphan --guess-all`
Supprimer le cache et les fichiers temporaires de certaines applications
find -P ~/ -regex ".*\(~\|mozilla.*/Cache.*\|/.thumbnails/.*\|/.wine/.*/temp/.*\|/.gnome2/gnome-art/.*\)" \ -type f -print -delete && rm -vfr ~/.Trash/* ~/.dvdcss/* ~/.recently-used
Supprimer les paquets téléchargés (pas ceux installés hein !)
aptitude clean aptitude autoclean
Toutes les questions que je me suis posées et dont j'ai trouvé une réponse. Toutes les astuces, tips que j'ai grapillés ici et là.
Xorg
Pour règler le gamma du bureau, on peut utiliser l'outil xgamma disponible avec les drivers ATI proprio (je crois) :
xgamma -gamma 1.1
SUID / GUID
- présence du flag “s” dans les permissions :
-rwxr-sr-x 1 root crontab 26668 2006-04-01 03:43 /usr/bin/crontab
- permet de lancer le fichier avec les droits de l'utilisateur ou du groupe
- repèrer les fichiers SUID/SGID (non verif)
find / type d \( perm 04000 o perm 02000 \)
- on peut interdire les SUID/GUID sur une partition en ajoutant l'option “nosuid” au montage
- http://setuid.org répertorie les fichiers SUID/SGID
Sécuriser Apache
Les modules obligatoires :
- httpd_core : noyau de base d'Apache
- mod_access : contrôle d'accès (nécessaire pour utiliser “order”, “allow” et “deny”)
- mod_auth : authentification des utilisateurs (HTTP Basic Authentication)
- mod_dir : choix l'index prioritaire du serveur (index.html)
- mod_log_config : gestion des logs
- mod_mime : détermination des types de contenus à partir de l'extension des fichiers
Les autres :
- mod_info : informations sur la configuration d'Apache
- mod_autoindex : listage automatique du contenu des dossiers sans index
Directives pour limiter la divulgation des informations de configuration d'Apache :
# Set to one of: Full | OS | Minor | Minimal | Major | Prod ServerTokens OS # Set to one of: On | Off | EMail ServerSignature On
Sécuriser Proftpd
- le fichier “/etc/ftpusers” contient les utilisateurs n'ayant pas accès au service
Interdire l'exécution sur /tmp
Ca peut etre une faille de sécurité de laisser le droit d'exécution sur /tmp
; mieux vaut donc le monter avec des droits restreints : pour cela, il faut monter la partition ainsi (dans la fstab
) :
/dev/sda3 /tmp ext3 noexec,nosuid 0 2
Si vous n'avez pas de partition spécifique pour /tmp, on peut l'émuler via un fichier :
- On créer un fichier de 40 Mo
cd /root dd if=/dev/zero of=/root/tmpMnt bs=1024 count=40000 mkfs.ext3 -F /root/tmpMnt
- on le monte dans /tmp
mv /tmp /tmp.backup mkdir /tmp mount -o loop,noexec,nosuid,rw /root/tmpMnt /tmp chmod 0777 /tmp
- on modifie la fstab comme vu plus haut
if ! grep -qai tmpMnt /etc/fstab ; then echo "/root/tmpMnt /tmp ext3 loop,noexec,nosuid,rw 0 0" >> /etc/fstab fi
- on monte toutes les entrées de la fstab (dont /tmp)
mount -a
- vérification que ça marche
cp /bin/ls /tmp/ /tmp/ls
-- MARK -- dans messages
Le journal /var/log/messages
contient pleins de lignes dans le genre :
Nov 2 09:22:56 tiga -- MARK --
C'est le syslogd qui les y ajoute toutes les 20 min pour qu'en cas de panne du système, on puisse savoir à quelle heure a eu lieu le problème.
Informations CPU
Pour afficher des informations sur le processeur :
cat /proc/cpuinfo processor : 0 vendor_id : AuthenticAMD cpu family : 6 model : 8 model name : AMD Athlon(tm) stepping : 1 cpu MHz : 1202.802 cache size : 256 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mp mmx ext 3dnowext 3dnow ts bogomips : 2410.41
Si le matériel est compatible, on peut lire la température du processeur ainsi que les seuil limites de cette façon :
cat /proc/acpi/thermal_zone/THRM/temperature /proc/acpi/thermal_zone/THRM/trip_points temperature: 27 C critical (S5): 100 C passive: 100 C: tc1=4 tc2=3 tsp=60 devices=0xcbfeef80 active[0]: 100 C: devices=0xb13fd6e0
Là on voit que je n'aurais pas dû laisser la fenêtre ouverte.
Ubuntu Edgy Eft sous VMWare
Installer Ubuntu Edgy Eft sous VMWare se fait sans problèmes, à ceci près que les “VMWare-tools” ne s'installent pas, et ce malgré l'installation clean des linux-header et des build-essential.
sudo apt-get install build-essential sudo apt-get install linux-headers-`uname -r`
En effet l'utilitaire de configuration (de tête vmware-config.pl) stop avec une erreur mentionnant X.org 7.1. De plus il fait sauter la carte réseau, obligeant un reboot de la machine virtuelle.
Après une rapide recherche sur gg, il s'agit d'une incompatibilité entre la version 5.5.1 de VMWare et la version 7.x de X.org, fourni avec Edgy Eft. Ca devrait marcher avec la version 5.5.2.
Freeze au retour d'hibernation
Sous Feisty fawn avec un portable Sony FE41M (core 2 duo mais surtout nvidia avec drivers proprios) Une solution semble être http://forum.ubuntu-fr.org/viewtopic.php?id=86849 à vérif.
Chrooter un utilisateur ssh
Le tuto est dispo sur lealinux http://www.lea-linux.org/cached/index/Trucs:Chrooter_un_utilisateur_(ssh,_terminal,_console,_etc…).html
Erreur sendfile Proftpd
Proftpd utilise sendfile, qui peut poser problème avec certains systèmes de fichier (NFS ou SMB) :
- With a network-mounted directories (e.g. NFS or SMB), the kernel may be
unable to serve the network file through its own cache.
Il faut donc désactivé son utilisation par la directive
UseSendfile off
dans le fichier de conf /etc/proftpd/proftpd.conf
.
source : http://www.proftpd.org/docs/directives/configuration_full.html#USESENDFILE
Taille du terminal
Par défaut le terminal d'Ubuntu est gnome-terminal
et il se lance en 80×24. Pour modifier sa taille :
gnome-terminal --geometry=100x30
On peut spécifier la position dans l'écran, en partant de l'origine (en haut à gauche) avec +
ou de son opposé avec -
:
gnome-terminal --geometry=100x30+120-80
Là il va se lancer en 100×30 caractères, à 120 pixels de la gauche et 80 du bas de l'écran.
Lancer un script au démarrage
Création du script :
vi /etc/init.d/toto.sh !/bin/bash echo toto
On le rend exécutable :
chmod +x /etc/init.d/toto.sh
On l'ajoute au démarrage :
update-rc.d /etc/init.d/toto.sh defaults
Réinitialiser un mdp MySQL
Pour réinitialiser le mot de passe d'un utilisateur, par exemple root :
Stopper le daemon mysql
/etc/init.d/mysql stop Stopping MySQL database server: mysqld.
Démarrer le démon mysql avec l'option –skip-grant-tables
:
mysqld --skip-grant-tables &
Démarrer le client mysql avec l'option -u root
mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.0.51a-3-log (Debian) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
Exécuter les requêtes suivantes (remplacer <user> et <password> selon les besoins)
UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root'; FLUSH PRIVILEGES;
Redémarrer mysqld
en mode normal
/etc/init.d/mysql start Starting MySQL database server: mysqld.
Limiter la vitesse du CDRom
Quand on regarde un cd/dvd, c'est encore mieux sans le bruit du lecteur. eject, une commande que tout le monde a d'installer, a une option -x (sur les versions récentes)
eject -x 8 /dev/cdrom
limite la vitesse du lecteur a 8x. c'est plus silencieux. C'est réversible dès que le cd/dvd est éjecté
Modifier le groupe principal d'un utilisateur
Pour modifier le groupe principal d'un utilisateur, il suffit de modifier le 4e champ de la ligne correspondante dans le fichier /etc/passwd
:
dude:x:1000:1001:,,,:/home/dude:/bin/bash
Ici il s'agit du groupe d'identifiant (gid) = 1001.
On trouve le nom du groupe en question dans le fichier /etc/group
:
grep 1001 /etc/group masterusers:x:1001:toto,dude
(On constate que 2 utilisateur appartiennent à ce groupe : toto et dude.)
Ainsi, les fichiers de l'utilisateur “dude” seront créés sous le groupe “masterusers” d'identifiant 1001.
whoami dude touch toto ll toto -rw-r--r-- 1 dude masterusers 0 jun 2 01:54 toto
Activer le 3eme bouton de la souris
Il faut éditer le fichier de conf du serveur X (X11 sous Ubuntu : /etc/X11/xorg.conf
) et y ajouter les lignes suivantes, dans la section Section “InputDevice”
:
Option "Buttons" "5" Option "ZAxisMapping" "4 5"
La première active le 3ème bouton et la seconde active le scroll up/down (le 3ème bouton a en fait 3 clics : le clic “du milieu”, le scroll up et le scroll down).
Transfert de fichiers par le réseau plus rapide
J'ai trouvé une bidouille astucieuse sur l'excellent qui permet, d'après mes tests, de diviser par 2 le temps de copie de fichiers par le réseau.
- Copie classique :
dude@dude:~/Documents$ time `cp -R dev /Volumes/data/tmp/popo/`
real 6m32.577s user 0m0.704s sys 0m23.531s
- Copie en “tarant” les fichiers à la volée, et le les envoyant dans le réseau grâce à netcat (
nc
)
Sur la machine destination on doit passer la commande
nc -l -p 1235 | tar -C . -xzf -
Sur la machine source
dude@dude:~/Documents$ time `tar -cz ./dev | nc tyr.rv 1235` real 3m13.514s user 2m35.526s sys 0m31.486s
- A travers un réseau non sécurisé on peut tunneliser le transfert : depuis la machine destination :
dude@tyr:/mnt/data/tmp/popo$ time `ssh dude@192.168.2.23 'tar -cz -C /Users/dude/Documents/ dev' | tar -zx`
real 4m12.939s user 1m58.999s sys 1m44.563s
Supprimer les ^M d'un fichier
Il arrive que, lorsqu'on importe un fichier qui a été encodé sous Windows, apparaissent en fin de ligne le caractère ^M qui correspond à un retour à la ligne mal interprété par vi - entre autres. Pour les supprimer, il faut ouvrir le fichier sous vi, passer en mode commande, saisir :%s/
puis passer les combinaisons de touches ctrl+v
puis ctrl+m
(et enfin / /g
, pour remplacer toutes les occurences par pour une chaine vide):
<echap> :%s/^v^m//g
Sauvegarder un FTP en local
Dans mon cas je veux sauvegarder le contenu de mon site internet, disponible via FTP uniquement, sur mon serveur de sauvegarde. Sur la documentation d'ubuntu-fr ils expliquent tout.
Il suffit d'installer le client FTP lftp et de saisir la commande :
lftp ftp://login:mdp@serveur_FTP -e "mirror -e -x dossier_ignoré_1 -x dossier_ignoré_2 /emplacement_distant /emplacement_local ; quit"
Ça marche aussi dans l'autre sens, pour mettre à jour un site avec le dernier contenu située sur ma machine en local :
lftp ftp://login:mdp@site_FTP -e "mirror -e -R -x dossier_ignoré_1 -x dossier_ignoré_2 /emplacement_local /emplacement_distant ; quit"
Paramètres :
- -e pour lftp : pour exécuter les commandes entre guillemets et ne pas quitter
- -e pour mirror : supprime de la destination les fichiers qui ne sont pas dans la source
- -R pour mirror : Reverse → mets à jour un contenu local à partir d'un contenu distant
- -x pour mirror : exclure les fichiers qui matchent cette pattern (on peut spécifier plusieurs paramètre “-x”)
- -i pour mirror : inclure les fichiers qui matchent cette pattern (on peut spécifier plusieurs paramètre “-i”)
Autre possibilité (à approfondir) : utiliser yafc en script par exemple :
#!/bin/bash yafc login:pwd@server <<** put -nrv /dossier_local -o /dossier_distant bye **
Paramètres :
- -n : transfert le fichier uniquement si le fichier local est plus récent que celui distant
- -r : récursif
- -v : mode verbeux
Gérer les droits d'un dossier partagé
Dans le cas d'un dossier du genre incoming, qui doit être accessibles en rw aux utilisateurs ftp et smb, il faut activer le sticky bit sur chaque dossier, ce qui permet de conserver les droits du dossier père sur les nouveaux fichiers, qui que ce soit qui les créer (source).
Modifier l'adresse MAC d'une carte réseau
Pour changer l'adresse mac de eth0 :
ifconfig eth0 down ifconfig eth0 hw ether 00:11:22:33:44:55 ifconfig eth0 up
voir
/etc/init.d/networking restart
On peut aussi modifier le fichier /etc/network/interfaces
(TODO).
Personnaliser le prompt du bash
Analyser un processus
Un bien grand mot pour décrire la façon de savoir quel binaire se cache derrière un processus. Il faut pour celà récupérer son PID, puis regarder le lien synbolique situé dans /proc/<PID>/exe
:
ps PID TTY TIME CMD 20338 pts/4 00:00:00 bash 20358 pts/4 00:00:00 ps ll -a /proc/20338/exe lrwxrwxrwx 1 dude smbusers 0 avr 27 23:21 /proc/20338/exe -> /bin/bash*
Dans le cas d'un processus suspect, on peut avoir des surprises : par exemple le lien qui pointe vers un exécutable bizarroïde situé dans /tmp
…
Afficher l'heure dans l'historique des commandes
Pour afficher la date et l'heure dans l'historique des commandes, ajouter cette ligne dans son .bashrc
:
HISTTIMEFORMAT="%m/%d_%H:%M:%S "
Récupération d'un mot de passe root
Quand on perd le mot de passe root sous Linux, on n'est plus rien. Heureusment il existe une procédure de recovery :
- rebooter
- lors du menu grub, presser “E”
- saisir :
grub edit> kernel /boot/vmlinuz-2.6.8-2-386 root=/dev/sda1 rw init=/bin/bash
- valider, puis, au menu grub, presser “B”
- au boot, on obtient un terminal root à partir duquel on peut modifier le mot de passe root
Afficher un fichier avec les numéros de lignes
perl -ne 'print "$. - $_"' infile.txt
Débloquer un terminal
Il arrive que votre terminal soit bloqué suite à une commande qui ne rend pas la main ; exemple :
telnet 10.0.0.1 Trying 10.0.0.1... Connected to 10.0.0.1. Escape character is '^]'. ^C ^C exit quit ^^^X^X^X^A^Z^Z^Z^Z^Z^C^C^V^C^C^M
Pour débloquer le terminal : ^V^O<enter>
(<ctrl+v><ctrl+o><enter>)
La commande reset
peut aussi fonctionner pour rétablir le titre de la fenêtre, après avoir lu un binaire par exemple.
Source : commandlinefu
Changer la langue du clavier
Pour changer la langue du clavier (AZERTY ou QWERTY) :
setxkbmap [fr | us]
Fichiers notoires
rhosts
Contient la liste des hosts / logins ayant accès sans authentification aux services remote comme rsh ou rlogin, par exemple l'utilisateur dude sur la machine 192.168.2.3.
192.168.2.3 dude
/etc/motd
Il contient le message de bienvenue qui s'affiche quand un utilisateur se connecte à la machine.
cat /etc/motd Linux vtiga 2.6.18-4-686 #1 SMP Wed May 9 23:03:12 UTC 2007 i686 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
/etc/inittab
Configure le service init, à l'origine de tous les autres processus lancéssur le système
- on règle le runlevel par défaut au démarrage :
id:5:initdefault:
on démarre ici en niveau d'exécution 5 (graphique)
- on peut désactiver la combinaision de touches Ctrl+Alt+Suppr qui sert à redémarrer en commentant cette ligne :
ca:12345:ctrlaltdel:/bin/shutdown -r now
- le fichier contient des lignes du genre :
l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2
Cela indique les scripts lancés pour chaque runlevel ainsi que les paramètres envoyés. Par ex. le dossier /etc/rc3.d contient des liens symboliques vers le fichiers de scripts qui seront chargés lors d'un runlevel 3.
- activer les mdp shadow : les mots de passe de chaque utilisateur ne sont plus sotckés dans /etc/passwd (lisible pour tous) mais sont hashés (md5 le plus souvent) dans /etc/shadow qui lui n'est lisible que par root.
/forcefsck
Ce fichier n'existe pas “normalement”. On le créer afin de forcer un fsck
au prochain démarrage de la machine.
touch /forcefsck
La machine, après avoir effectué le fsck
, supprime le fichier de sorte qu'elle ne le refera pas à tou les futurs démarrages.
Sécurité générale sous Linux
(Résumé d'une partie du bouquin Sécurité sous Linux de Aron Hsiao, ed. Campus Press)
Configuration de LILO
Lilo (Linux LOader) est le programme qui lance l'image de Linux, et qui se place dans le MBR.
- au prompt :
LILO boot: linux init=/bin/bash
permet de lancer le programme bash à la place d'init, et donc de donner un shell root au pécore moyen de base sans authentification aucune. - le fichier de config est
/etc/lilo.conf
: il contient une section globale (en premier) et une 2nde section contenant les images à loader (qui commence au mot cléimage=
ouother=
). - lilo peut demander un mot de passe pour se charger grâce au mot-clé password. S'il est placé dans la section globale il sera demander pour loader n'importe quelle image ; s'il est placé après il sera demandé pour loader l'image qu'il suit.
password= "A9dl00!"
le mot de passe est en clair dans le fichier de config
restricted
permet à une image protégée par mot de passe d'être amorcée sans mot de passe à moins que des arguments en ligne de commande ne soient envoyés au noyau. A l'instar de password, restricted peut se mettre dans les 2 sections pour avoir une portée différente.prompt
permet de proposer une invite pour passer des paramètres au noyau (LILO boot:
)timeout
permet de définir le temps d'attente avant un boot automatique sur l'image par défaut- pour prendre en compte les modification, ou recharger lilo dans le MBR :
# /sbin/lilo
- sécuriser le fichier de config pour interdire la lecture du fichier (souvenons nous que le pass est en clair dedans !) :
chmod 600 /etc/lilo.conf
Les niveaux d'exécution
Debian GNU/Linux utilise des runlevels (runlevels) légèrement différents de ceux-ci, qui sont documentés dans /etc/inittab
- 0 : arrêt système, tous les processus sont arrêtés
- 1 : mode mono-utilisateur (argument
single
au boot). Aucun service n'est lancé sauf le réseau. Seul root peut se loggué, et uniquement en console. - 2 : mode multi-utilisateur minimal. Seuls quelques services sont démarrés.
- 3 : mode multi-utilisateur complet (normal).
- 4 : non utilisé ou spécifié par l'utilisateur
- 5 : mode multi-utilisateur avec serveur X (système amorcé en X11R6)
- 6 : reboot = tous les processus sont arrêtés, la machine redémarre
/etc/securetty
contient le liste des terminaux qui acceptent un login root$HOME/.bash_logout
est lancé lorsqu'un utilisateur se déloggue. Ca peut être interessant de rajouter/usr/bin/clear
à la fin.
Ce fichier est issu de /etc/skel/.bash_logout
lors de la création du compte utilisateur.
/etc/shells
contient le liste des shells proposés à l'utilisateur quand il fait la commandechsh
Protections réseau
(D'après http://www.dedibox-news.com/doku.php?id=distrib:debian:securiser_sa_debian)
Se protéger contre les Smurf Attack :
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
Eviter le source routing :
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
Se protéger des attaques de type Syn Flood :
echo "1" > /proc/sys/net/ipv4/tcp_syncookies echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
Désactivez l’autorisation des redirections ICMP:
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects
Eviter le log des paquets ICMP erroné:
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
Active le logging des paquets aux adresses sources falficiées ou non routables :
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
Divers
- sur la debian est fourni la commande
iconv
qui permet de transcoder du texte de et vers n'importe quel jeu de caractères. Exemple :
iconv -f utf8 -t iso8859-15 fichier_utf8.txt
- il est intéressant de monter /usr, /bin et /sbin en “ro” car ils ne devraient être modifiés que lors d'une mise à jour du système
- fichier sensible : /root/.bash_history
- la documentation debian se situe ici :
/usr/share/doc/debian/FAQ/index.html
et dans/usr/share/doc/Debian/reference/index.html
- lors de la mise à jour en kernel 2.6.25-2-686 (le 29/07/2008) il fallait ajouter la ligne suivante dans
/etc/kernel-img.conf
do_initrd = Yes
- Le bonding sous Linux correspond à peu près l'équivalent de l'Etherchannel avec Cisco : il s'agit de créer une interface logique, aggrégat de (une ou) plusieurs interfaces physiques. L'exemple type est d'utiliser 2 cartes réseaux 100 Mbps pour créer une interface logique à 200 Mbps, supportant la perte d'une des cartes (dans ce cas le lien fonctionne en mode dégradé à 100 Mbps).
Liens :
Liens
Debian
Site généraux fr :
Sites généraux en :
Divers autres sites, articles, blogs :