Avertissement : cette section donne quelque ficelles de sécurité, en aucun cas un serveur respectant TOUS ces trucs pourra être considéré comme sécurisé. Ce sont juste des points de départs qui sont présentés ici, les opérations _minimum_ à effectuer pour avoir une machine sécurisée.
auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/pam_wheel.so group=wheel
et rajouter un utilisateur (ici mdecore) dans le groupe wheel, pour l'autoriser à se connecter en root via la commande su :
# usermod -Gwheel mdecore #
Tous les utilisateurs appartenant au groupe wheel auront le droit de se connecter en root via la commande su, à condition bien sûr d'avoir le bon mot de passe. Se connecter en root en condole est déconseillé, l'utilisation de la commande su (ou équivalente) est conseillé.
Noter que l'opération précedente ne marche pas avec konsole et gnome-terminal, il faut utiliser xterm ou kvt.
# # Fichier /etc/securetty : liste des consoles a partir desquelles # l'utilisateur ``root'' peut se connecter. En principe, seule la premiere # (tty1, accessible par <Ctrl-Alt-F1>) devrait etre autorisee. # tty1 #tty2 #tty3 #tty4 #tty5 #tty6
# # Fichier /etc/ftpusers : liste des utilisateurs qui ne sont PAS autorises a # se connecter en FTP. Ces utilisateurs sont en general ``root'', ``uucp'', # ``news'' et ressemblants, car ils ont trop de pouvoirs pour etre autorises # a faire du FTP. # root uucp bin mail
login auth required pam_rhosts_auth.so no_rhosts
$ head -c 6 /dev/urandom | mimencode aMuiZ9Lx $
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
options { directory "/var/named" ; listen-on { 127.0.0.1; 192.168.1.1; }; version "Quoi d'neuf, docteur ?" ; } ;
Cela spécifie au serveur DNS qu'il doit écouter exclusivement sur les adresses 127.0.0.1 et 192.168.1.1. De plus, une demande de version se soldera par l'affichage d'un texte sympatique...
Listen 127.0.0.1:80
FIXME ServerToken Prod -> pas le nom d'Apache affiche host -l atlas.ens.uvsq.fr
# find / -type f \( -perm -02000 -o -perm -04000 \) -ls #
Ces programmes sont dangereux car l'exécution par utilisateur normal se fait avec les droits de l'utilisateur root. Seuls les programmes en ayant vraiment besoin devraient avoir ces bits spéciaux. Un fichier ayant l'un de ces bits et ne faisant pas partie des programmes standards peut être le signe d'une intrusion d'un pirate sur la machine.
...
, ..
ou encore ..^G
) :
# find / -name ".. " -print -xdev # find / -name ".*" -print -xdev | cat -v #
La présence de tels fichiers peut être le signe d'une intrusion d'un pirate sur la machine.
# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ld {} \; #
Des fichiers avec de tels droits peut être le signe d'une intrusion d'un pirate sur la machine.
# find / -nouser -o -nogroup #
La présence de tels fichiers peut être le signe d'une intrusion d'un pirate sur la machine.
A l'aide de rpm :
# rpm -Va ..?..... /etc/cron.daily/aaa_base ..?..... /etc/cron.daily/aaa_base_backup_rpmdb ..?..... /etc/cron.daily/aaa_base_clean_catman ..?..... /etc/cron.daily/aaa_base_clean_core ..?..... /etc/cron.daily/aaa_base_clean_instlog ..?..... /etc/cron.daily/aaa_base_clean_tmp ..?..... /etc/cron.daily/aaa_base_do_mandb S.?....T /etc/cron.daily/aaa_base_rotate_logs ..?..... /etc/cron.daily/aaa_base_updatedb S.5....T c /etc/inittab S.5....T c /etc/issue S.5....T c /etc/issue.net .......T c /etc/ld.so.conf S.5....T c /etc/mailcap S.5....T c /etc/mime.types S.5....T c /etc/modules.conf S.5....T c /etc/motd .......T c /etc/netgroup .M...... c /etc/permissions .M...... c /etc/permissions.easy .M...... c /etc/permissions.paranoid .M...... c /etc/permissions.secure [...] #
Pour une Debian, utiliser debsums :
# debsums -s # debsums -a ??? [...] FIXME #
# chattr +i /etc/services # chattr +i /etc/inetd.conf # chattr +i /etc/passwd # chattr +i /etc/shadow # chattr +i /etc/group # chattr +i /etc/gshadow # chattr +i /etc/lilo.conf #
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Dire à init de relire son fichier de configuration :
# /sbin/init q
kern.info /dev/tty10 kern.info /var/log/kernel.log
Pour affichier tous les messages d'alerte du noyau et toutes les erreurs données par tous les démons, sauf les erreurs d'authentification, sur la dixième console et dans xconsole :
kern.warn;*.err;authpriv.none /dev/tty10 kern.warn;*.err;authpriv.none |/dev/xconsole
Pour afficher tous les événements de priorité info ou supérieur de tous les démons sauf mail et autentification dans le fichier /var/log/message.log :
daemon.info;mail.none;authpriv.none /var/log/message.log
Pour n'afficher que les messages d'autentification dans le fichier /var/log/secure.log :
authpriv.info /var/log/secure.log
Pour afficher tous les messages qui mène a un crash systeme sur la dixième console et dans le fichier /var/log/emerg.log :
*.emerg /dev/tty10 *.emerg /var/log/emerg.log
Relancer syslog pour que les modifications soient prisent en compte :
# killall -HUP syslogd #
defaults { instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST cps = 25 30 } includedir /etc/xinetd.d
Le répertoire /etc/xinetd.d peut contenir les fichiers suivants :
$ ls /etc/xinetd.d chargen daytime-udp ntalk rlogin sgi_fam time chargen-udp echo proftpd rsh talk time-udp daytime echo-udp rexec rsync telnet $
Le format des fichiers de chaque service est simple à comprendre. Par exemple, pour le fichier /etc/xinetd.d/telnet :
service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no }
Un script Perl, nommé xconv.pl, permet de convertir un fichier /etc/inetd.conf en /etc/xinetd.conf.
En bref, voici un aperçu des trucs sympas :
service ftp { id = ftp socket_type = stream wait = no user = root server = /usr/sbin/chroot server_args = /var/servers/ftp /usr/sbin/in.ftpd -l }