Description
Dans la continuité de mon article précédent
Durcir Linux : modifier le partitionnement
il est une commande intéressante à utiliser : chattr
Cet outil permet de modifier les attributs de fichiers, répertoires.
Il existe une option qui est fortement pratique : l’option i - dont le
but est de rendre figé, immuable l’état d’un fichier, ou répertoire et
d’interdire toute modification ultérieure, même par l’administrateur système,
généralement nommé root.
Les répertoires à protéger, tout particulièrement, sont :
/bin,/boot,/etc,/usr,/root,/sbin,- ainsi que les fichiers liés à :
/initrd,/lib,/lib64,/vmlinuz
⇒ Pour protéger/figer/rendre immuable, un petit coup de commande :
chattr -R +i /bin /boot /etc /usr /root /sbin /lib* /initrd* /vmlinuz* 2> /dev/null
chattr -R -i /etc/adjtime /etc/blkid.tab /etc/mtab /etc/network/run /etc/udev/rules.d 2> /dev/null
⇒ Pour enlever l’option i sur lesdits répertoires et fichiers, en question,
il suffit d’écrire la commande ainsi :
chattr -R -i /boot /usr /bin /sbin /lib* /root /vmlinuz* /initrd* /etc 2> /dev/null
Mise en garde
Tout outil nécessitant une modification système, comme par exemple visudo, ou les outils de gestion de paquets, tels que ceux ci-dessous, impose la gymnastique de rendre muable avant leur usage, et d’avoir le réflexe de figer en suivant !
N’oubliez pas que si le système vous refuse l’action, c’est que vous avez probablement figer l’état de différents binaires. ;-)
apt, dpkg, synaptic
Ces commandes peuvent être insérées dans un script, pour vous faciliter
la vie, et mieux, aussi vous devriez les intégrer à votre script de gestion
apt.
Si jamais vous avez la bonne idée d’abuser de cette commande, veuillez comprendre absolument qu’avec les outils apt, dpkg, synaptic, - et très certainement, tout outil gérant l’installation logicielle -, il vous faudra :
- utiliser l’option
-i; - utilisez l’outil d’installation logiciel,
- et veillez à remettre l’option
+ien suivant…
Vous êtes avertis, autrement vous seriez surpris par quelques dysfonctionnements.
Utilisation
Dans le fichier /etc/apt/apt.conf.d/00apt, ajouter :
- en première ligne, dans l’invocation pre, un appel vers le script ci-dessous, tel que :
DPkg::Pre-Invoke{
"/repertoire/chattr_sys 0";
(…)
}
- et, en dernière ligne, dans l’invocation post :
DPkg::Post-Invoke {
(…)
"/repertoire/chattr_sys 1";
}
Script shell
#!/bin/sh
###
#
# Author: Stéphane HUC
# mail: devs@stephane-huc.net
#
# License: GNU/GPL 3
#
# Github: https://git.framasoft.org/hucste/tools
#
# Date: 2016/05/12
#
###
###
#
# Change attributes system
#
###
arg="$1"
dirname="$(dirname $(readlink -f -- "$0"))"
email_to="email@domain.tld" # write your mail, here
email_from="Admin <admin@domain.tld>"
mail=0 # if u wish mail, set to 1
HOST="$(cat /etc/hostname)"
active() {
chattr -R +i /bin /boot /chroot /etc /opt /usr /root /sbin /lib* /initrd* /vmlinuz* 2> /dev/null
chattr -R -i /etc/adjtime /etc/blkid.tab /etc/mtab /etc/network/run /etc/udev/rules.d /var/lib /var/run 2> /dev/null
printf "Chattr immutable: active\n"
}
disable() {
chattr -R -i /bin /boot /chroot /etc /opt /usr /root /sbin /lib* /initrd* /vmlinuz* 2> /dev/null
printf "Chattr immutable: disable\n"
}
send_mail() {
case "$1" in
1|on|true) mssg="ACTIVE" ;;
0|off|false) mssg="DISABLE" ;;
esac
[ "$mail" -gt 0 ] && echo "Chattr immutable: ${mssg} on $HOST" | mail -S from="${email_from}" -s "Chattr immutable ~ $HOST" "${email_to}"
sleep 1
unset mssg
}
launcher() {
case "$arg" in
1|on|true)
active;
send_mail "$arg"
;;
0|off|false)
disable;
send_mail "$arg"
;;
*)
clear
N="service ${0##*/}"
echo "Usage: $N 0|off|false to disable immutable systems..." >&2
echo "Usage: $N 1|on|true to active immutable systems..." >&2
exit 1
;;
esac
}
verify_uid() {
if [ $(id -u) -ne 0 ]; then
printf "[ \\33[1;31m %s \\33[0;39m ] %s \n" "KO" "Need to get rights admins!"
exit 1
fi
}
verify_uid
launcher
Vous pouvez retrouver la dernière version de ce script sur mon gitlab !
Documentation
Manpage
- un coup de manpage, vous renseignera encore plus profondément :
$ man chattr