1. Choisir un bon password. Éviter "toto", login, noms, prénoms, en bref tout ce qui a un sens et sera donc vraisemblablement dans un dictionnaire. Une méthode pour avoir des passwords à peu près corrects : choisir une phrase et prendre la première lettre de chaque mot + la ponctuation.
  2. Changer le password sur zamok : ssh zamok puis une fois loggué zamok% passwd
  3. Utiliser ssh et jamais telnet pour les connexions. Telnet ne crypte pas les échanges et est donc sensible aux sniffers.

 

L'accès à une machine personnelle doit être plus difficile que l'accès à Zamok.

Sous Windows ou Mac OS 8.x peu d'espoirs... Sinon lisez la suite.

  1. Lire la doc de son système : man 7 security par exemple
  2. choisir des bons passwords (voir plus haut)
  3. nettoyer la machine de tous les services inutiles
  4. installer les tcpwrappers
  5. surveiller son système régulièrement.

Nettoyer la machine

Typiquement on modifie le fichier /etc/inetd.conf

# Internet server configuration database
ftp     stream  tcp     nowait  root    /usr/local/libexec/tcpd ftpd -l
#telnet stream  tcp     nowait  root    /usr/libexec/telnetd    telnetd
#shell  stream  tcp     nowait  root    /usr/libexec/rshd       rshd
#login  stream  tcp     nowait  root    /usr/libexec/rlogind    rlogind
finger  stream  tcp     nowait  nobody  /usr/local/libexec/tcpd fingerd -s
#exec   stream  tcp     nowait  root    /usr/libexec/rexecd     rexecd
#uucpd  stream  tcp     nowait  root    /usr/libexec/uucpd      uucpd
#nntp   stream  tcp     nowait  usenet  /usr/libexec/nntpd      nntpd
# run comsat as root to be able to print partial mailbox contents w/ biff,
# or use the safer tty:tty to just print that new mail has been received.
comsat  dgram   udp     wait    tty:tty /usr/libexec/comsat     comsat
ntalk   dgram   udp     wait    tty:tty /usr/libexec/ntalkd     ntalkd
#tftp   dgram   udp     wait    nobody  /usr/libexec/tftpd      tftpd /tftpboot
#bootps dgram   udp     wait    root    /usr/libexec/bootpd     bootpd
#
# "Small servers" -- used to be standard on, but we're more conservative
# about things due to Internet security concerns.  Only turn on what you
# need.
#
#daytime stream tcp     nowait  root    internal
#daytime dgram  udp     wait    root    internal
#time   stream  tcp     nowait  root    internal
#time    dgram  udp     wait    root    internal
#echo   stream  tcp     nowait  root    internal
#echo   dgram   udp     wait    root    internal
#discard stream tcp     nowait  root    internal
#discard dgram  udp     wait    root    internal
#chargen stream tcp     nowait  root    internal
#chargen dgram  udp     wait    root    internal
#

Votre inetd.conf devrait à peu près avoir cette tête là (à Samba près). Telnet ne tourne pas car on utilise ssh (idem pour rsh, rlogin). Finger tourne en mode "secure" au minimum. Tout service non nécessaire doit être commenté (inutile de faire tourner un serveur POP3 ailleurs que sur zamok...).

Éliminer le plus possible les exécutables set-uid root. Par exemple sendmail peut avantageusement être remplacé par postfix.

Utiliser les tcpwrappers

L'installation est propre à l'OS, je ne détaille pas. En gros il y a trois solutions : tcpd est installé par défaut ou bien on installe les binaires, puis on modifie inetd.conf pour appeler tcpd à la place des autres services, ou alors tcpd est intégré à inetd et il faut choisir la bonne options (man inetd, man tcpd).

Une fois l'installation effectuée, il faut mettre en place le filtrage dans /etc/hosts.allow :


# Fichier /etc/hosts.allow de la machine daemon.crans.org (imaginaire)
# L'évaluation s'arrête dès qu'elle a trouvé une règle qui s'applique

# Pour ne faire aucun filtrage :
#ALL : ALL : allow

# J'autorise tout ce qui vient de ma propre machine
ALL : localhost : allow
ALL : daemon.crans.org : allow

# Les machines en qui j'ai "a priori" confiance : l'ENS!
ALL : .ens-cachan.fr : allow

# Pour filter un service
# serviced = nom du demon associé
#
# serviced : .crackers.com : deny     # refuse la connection
# serviced : .hackers.org : allow     # autorise
# serviced : ALL : allow              # tout ce qui reste 


# On traite finger de façon singulière.
fingerd : ALL \
        : spawn (echo Finger. | \
         /usr/bin/mail -s "tcpd\: %u@%h[%a] fingered me!" root) & \
        : deny

# Le reste...
ALL : ALL \
        : severity auth.info : spawn (/usr/bin/finger -l @%h | \
         /usr/bin/mail -s "tcpd\: %u@%h[%a] tried to use %d  (denied)" root) & \
        : twist /bin/echo "You are not welcome to use %d from %h."

Ce qui se passe : tous les services sont autorisés aux machines de l'ENS, sinon tout accès depuis une machine extérieure est interdit, loggué et mailé à l'administrateur.

Surveiller sa machine

Un bon administrateur se doit de lire régulièrement ses logs : /var/log/messages, /var/log/userlog (ajout d'utilisateurs/groupes), /var/log/setuid.* (les fichiers setuid depuis la dernière vérification, typiquement tous les jours), /var/log/secure...

 

Pour cela on utilise GnuPG ou PGP. GnuPG est plus politiquement correct, c'est donc ce que je vais utiliser.

Il faut d'abord se créer une clef, et récupérer celles des correspondants à qui on veut écrire. man gpg est suffisant pour la création de paires de clefs ou importer une clef par un fichier (obtenu très souvent par copier/coller d'une page ou elle est stockée...). Mais pour récupérer la clef pgp publique de quelqu'un par le net a partir de son "KeyId" seulement, lire le man prend du temps et donne une solution qui risque de bloquer certains. Voilà ce qu'il faut faire:

  1. Repérer le "KeyId" de la clef que l'on veut récupérer. On obtient ce nombre hexadécimal par gpg lorsqu'on a un message dont on veut vérifier la signature, ou dans le message lui-même, comme par exemple dans une signature de Chep: "(..) livarot * vieux-lille * PGP ID : A879BEF8 * bleu * tomme * beaufort"
  2. Trouver un "keyserver" joignable, comme wwwkeys.nl.pgp.net ou wwwkeys.uk.pgp.net. (c'est là que la page man peut dérouter, en disant de faire host -l pgp.net | grep wwwkeys pour obtenir la liste des machines inclues dans le domaine pgp.net. En effet, host(1) ne fonctionne pas depuis une machine à l'intérieur de crans.. Il faudrait le faire depuis Zamok.)
  3. On peut enfin importer la clef (publique) par gpg --keyserver wwwkeys.nl.pgp.net --recv-keys 0xA879BEF8 (la page man est encore une fois imprécise: il faut savoir que sans le préfixe hexa classique "0x", gpg peut ne pas reconnaître qu'il s'agit d'une KeyId ..)

Intégration avec pine

Je suppose que l'étape précédente a été correctement effectuée. Lancer pine, taper S (pour Setup), puis C (pour Config).

on veut d'abord des filtres à l'envoi : trouver la ligne sending-filters, puis taper C (pour ChangeVal). Le premier filtre va signer le courrier que l'on envoie, le deuxième va crypter pour l'expéditeur.

/usr/local/bin/gpg --clearsign , /usr/local/bin/gpg -a -e -r _RECIPIENTS_

(Attention l'emplacement de gpg peut varier.) Le deuxième filtre implique que l'on a la clef publique du destinataire.

On va filtrer à l'arrivée. Trouver la ligne display-filters puis éditer en rajoutant :

"-----BEGIN PGP" /usr/local/bin/gpg -d

Lors de la lecture d'un courrier crypté, pine lancera automatiquement gpg pour décrypter le message (non sans avoir demandé le password).

 


top documents home dernière modif le 06.08.01 par K.

 

Sécurité Unix
presentation
liens
informations
vie
annuaire
pages perso
webmail
ssh