%

Durcir Linux : Utiliser chattr

Article publié, le et modifié le
4 minutes de lecture

Cet article contient 731 mots.
Source brute de l'article :
Commit version : 297fd65

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

Info

⇒ 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 +i en 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

Fichier : chattr_sys

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/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