Previous: Table des encadrés
Up: Nullix 110 (LYX 1.5.4)
Next: 2 Réglages de kde
  Contents
Subsections
La sécurité consiste en premier lieu à avoir une vision globale de
ce qui se passe. Et à ne pas créer de trous sous prétexte de régler
un problème ailleurs. Primum non nocere.
1.1 Login manager
- Le message d'accueil pour un login en mode terminal dépend du fichier
/etc/issue pour un login local et du fichier /etc/issue.net
pour un login distant (telnet).
- Sous la
, le login graphique dépendait du répertoire /opt/kdeX/share/config/kdm.
Avec cette spécificité que le fichier kdmrc était réécrit par
YaST à chaque occasion. Contournement : création d'une archive *.pld
et ajout des lignes correspondantes dans le batch qzq_anti_suse.
- Sous la
, le répertoire précédent existe encore, mais n'est
là que pour archive. Les fichiers actifs se trouvent dans /etc/opt/kdeX/share/config/kdm
: ce sont eux qu'il faut modifier. Si l'on utilise kcontrol
pour cela, les commentaires descriptifs sont écrasés.
- Pour des raisons juridiques évidentes, les messages d'accueil doivent
être inamicaux. En particulier, ils ne doivent pas contenir le mot
"Welcome". Le message par défaut Welcome to SuSE Linux 9.3 (i586) - Kernel est donc totalement inapproprié. De même, il n'est pas raisonnable
de publier la liste des utilisateurs.
- Message d'accueil retenu
Here is %h \n Unauthorised access is prohibited
- Le fichier kdmrc contient les sections suivantes :
- [General]
- ...
- [Xdmcp]
- ...
- [Shutdown]
- ...
- [X-*-Core]
- AllowNullPasswd=false ; AllowRootLogin=true ;
AllowShutdown=Root AuthNames=XDM-AUTHORIZATION-1,MIT-MAGIC-COOKIE-1
; AutoReLogin=false ; ClientLogFile=.xsession-errors-%s ; ...
- [X-:*-Core]
-
- [X-:0-Core]
-
- [X-*-Greeter]
- BackgroundCfg=/etc/opt/kde3/share/config/kdm/backgroundrc
; ColorScheme=Keramik ; EchoMode=OneStar ; ForgingSeed=1104924527
; GUIStyle=Keramik ; GreetString=Here is %h, %m \n
unautorised login prohibited ; GreeterPos=60,80 ; Language=en_US
; LogoArea=Clock ; MaxShowUID=65000 ; MinShowUID=500 ; SelectedUsers=
; UseBackground=true ; UseTheme=false ; UserCompletion=false ; UserList=false
- [X-:*-Greeter]
-
- [X-:0-Greeter]
- EnableChooser=false ; LogSource=/dev/xconsole
; ShowLog=true ;
- Il faut AllowNullPasswd=false partout. De même pour UserList=false.
- Il faut AllowShutdown=Root dans la section générale et AllowShutdown=All
dans la section locale.
- Jusqu'à la
, l'apparence du login graphique était réglée
par le fichier /opt/kde2/share/config/kdmrc et proposait les
sections suivantes :
- message d'invitation
- GreetString=SuSE Linux on HOSTNAME
GreeterPosFixed=true
GreeterPosX=100
GreeterPosY=100
LogoArea=KdmClock
LogoPixmap=/opt/kde2/share/apps/kdm/pics/kdelogo.png
- login
- SessionTypes=kde,failsafe
ShowPrevious=false
ShowUsers=None
EchoMode=OneStar (NoEcho)
AutoLogin1st=false
AutoLoginEnable=false
- shutdown
- Restart=/sbin/reboot
Shutdown=/sbin/halt
ShutdownButton=ConsoleOnly
- Examiner quels sont les services offerts à l'extérieur par la commande
nmap -sT localhost
Il reste à fermer tout ce qui n'est pas volontairement ouvert.
- La TAB. 2 donne la liste des services
actuellement ouverts (a=madras, i=maverick, n=monalisa, o=moonlight)
TAB. 2:
Les services ouverts.
|
|
- Certains services sont lancés par xinetd et contrôlés par les descriptifs
contenus dans/etc/xinetd.d/. Dans TAB. 2,
ils sont listés avec les programmes associés (user, path, args). La
commande
for i in * ; do echo $i ; grep disable $i | tr "\t"
" " | \
sed -e "s¶ [ ]*¶ ¶g" | grep "disable
= "; done
donne la liste de ces services avec la mention des services désactivés.
- Dans la
, ces services dépendaient du fichier /etc/inetd.conf.
- D'autres services, comme 80=httpd (apache), 111=sunrpc, 139=netbios-ssn
(samba), 515=printer, 1026=nterm, 6000=X11, sont lancés par le mécanisme
runlevel. On en obtient la hiérarchie par le batch qyx_docs_runlevel,
décrit LISTING 2.
TAB. 3:
docs_runlevel
 |
- Ce mécanisme fait intervenir les batchs figurant dans le répertoire
/etc/init.d/. Un bilan en est donné TAB. 3
(avec le code 0=halt, S=pré-1, 1=single user, 2=local, 3=network,
5= graphical+net, 4=???, 6=shutdown). Les batchs concernant le boot
sont en tête, et le classement est chronologique (S=start, K=kill).
On constate en particulier que la somme des numéros S et K est constante..
- Il conviendrait d'examiner
- apmd : Advanced Power Management (APM) daemon
- fbset - show and modify frame buffer device settings
- junkbuster - The Internet Junkbuster Proxy
- named - Internet domain name server
- nscd - name service cache daemon
- Sont normalement activés : apache, dhcpd, smbd et nmbd
- Ont été désactivés :
- dhcrelay - Dynamic Host Configuration Protocol Relay Agent
- /etc/pcmcia/config - PCMCIA card configuration database
- wvdial.dod - PPP dialer with built-in intelligence
1.3 Le path de root et de su root
- Changer le nom de la machine : YaST fait cela, mais la prise en compte
n'est uniformément effective qu'après un reboot (problèmes avec samba,
print etc).
- Path de root. En fait il y a trois valeurs souhaitables pour $PATH.
Lorsque root s'est réellement logué, lorsqu'un "su root"
a eu lieu, et lorsque $ipse veut administrer par un "su
root", c'est à dire se trouver dans la situation 1 alors
qu'il est dans la situation 2
- Se donner les moyens de ne pas confondre un programme interactif lancé
par $ipse et le programme correspondant lancé par root. Un réglage
des couleurs semble utile (réglage du prompt des konsoles par pathroot
ci-dessous, réglage de la couleur de kfmclient).
- Pour des raisons de sécurité, il est important que le $PATH "su
root" soit aussi réduit que possible. L'extension du $PATH
doit donc résulter d'une action volontaire. Un batch, placé dans $ipse/bin,
qui écrit un batch dans /root/bin. Ce deuxième batch, appelé pathroot,
s'exécute par
. /root/bin/pathroot
et contient les commandes
PATH=$ipse/bin:/opt/kde3/bin:/opt/kde/bin:/usr/lib/java/jre/bin
USER=root
KDEHOME=/root/.kde
PS1="\\033[31m\\u@\\h:\\w\\033[30m
> "
export PATH USER PS1 KDEHOME
La variable KDEHOME est indispensable pour pouvoir lancer un filemanager
par une commande kfmclient openProfile filemanagement . (un
point à la fin).
- remarque : la config de kedit se trouve dans ~/.kde2/share/config/keditrc...
mais su-root utilise /opt/kde2/share/config/keditrc, et pas celle
de /root/.kde2 ...
1.4 Enregistrement des fichiers /var/log/*.log
- Nous avons divisé nos remarques sur les fichiers *.log en trois
parties : enregistrement, rotation, traitement. Ces fichiers constituent
à la fois un outil de sécurité et un point de vulnérabilité (denial
of service et coulage). Leur gestion doit être faite avec attention.
- Chaque fois qu'un fichier *.log est créé, le problème de sa rotation
doit être géré. De plus, il semble raisonnable que ces fichiers s'appellent
tous *.log.
- Une méthode générale d'enregistrement des fichiers *.log est fournie
par syslog, mais de plus en plus d'applications gèrent leurs fichiers
elles-mêmes.
- Dans le système , un message est caractérisé par une signature (facility)
et une priorité (level).
- facility
- auth, authpriv, cron, daemon, kern, lpr, mail, mark,
news, (security= auth), syslog, user, uucp and local0 ... local7.
- level
- debug, info, notice, warning (warn= warning), err, (error=
err), crit, alert, emerg, (panic= emerg). Les acronymes warn, error
et panic ont été maudits par les instances maudissantes : ne pas les
utiliser.
- Un script peut émettre un message en direction de syslog
par la commande logger. Exemples, issu de /etc/ppp/ip-up
:
-
- logger -p auth.notice -t poll.tcpip
logger -p auth.notice -t ip-up.local
Ces commandes envoient des messages facility=auth, level=notice, avec
le tag indiqué (qui sera répété à chaque ligne).
- Le script lanceur /etc/init.d/syslog est paramétré par le fichier
/etc/sysconfig/syslog (cf. LISTING 3).
La commande principale est le choix du démon.
- Depuis la
, le démon d'enregistrement est syslog-ng,
contrôlé par le fichier /etc/syslog-ng/syslog-ng.conf. Auparavant
(
), le démon était syslog, contrôlé par le fichier
/etc/syslog.conf.
- Utiliser /etc/init.d/syslog restart pour relancer le démon
après chaque modification. La nouvelle version tient compte des émetteurs
de messages qui s'exécutent en mode chrooted (comme dhcpd
ou named). En effet, ces démons émettent depuis /var/lib/xxx/dev/log
au lieu d'émettre depuis /dev/log comme tout le monde.
- Lorsqu'un message est émis vers syslog, la façon dont un
couple signature-priorité se traduit par un routage vers un fichier
ou un autre est sous le contrôle du fichier /etc/syslog-ng/syslog-ng.conf
(LISTING 4).
- Pour la
, le fichier de configuration est SuSE-compilé
à partir de /etc/syslog-ng/syslog-ng.conf.in et de /etc/sysconfig/syslog.
Après avoir modifié ces deux fichiers source, il faut lancer SuSEconfig
: SuSEconfig -verbose -module syslog-ng. Ce dispositif n'est
plus actif sous
.
- *** Voici les déclarations des différents fichiers *.log que
nous utilisons
-
- /var/log/auth.log
/var/log/boot.log
/var/log/cron.log
/var/log/firewall.log
/var/log/kdm.log
/var/log/local.log
/var/log/mail.log
/var/log/messages.log
/var/log/news/*.log
/var/log/SaX.log
/var/log/warn.log
/var/log/XFree86.*.log
/var/log/Xorg.*.log
/var/log/xinetd.log
- Un certain nombre de programmes décrivent leurs propres méthodes dans
leurs propres fichiers de configuration. Cela se traduit souvent par
des sous répertoires.
- Il est efficace d'imposer cette utilisation de sous répertoires par
toutes les applications utilisant une gestion directe.
- apache2
- /etc/httpd/httpd.conf (
) ou /etc/sysconfig/apache2
(
)
-
- ErrorLog /var/log/httpd/error.log
CustomLog /var/log/httpd/access.log combined
SSLLog /var/log/httpd/ssl_engine.log
TransferLog /var/log/httpd/access.log
CustomLog /var/log/httpd/ssl_request.log
en + :/var/log/httpd/rcapache.log
en + :/var/log/httpd/ssl_scache.dir
en + :/var/log/httpd/ssl_scache.pag
- cups
- (
) /etc/cups/cupsd.conf
-
- AccessLog /var/log/cups/access.log
ErrorLog /var/log/cups/error.log
PageLog /var/log/cups/page.log
- dhcp-start
- /etc/init.d/dhcp
-
- STARTPROC_LOGFILE=/var/log/dhcpd/rc.dhcpd.log
- dhcp
- /etc/dhcpd.conf
-
- log-facility local0 ==info==> /var/log/dhcpd/dhcpd.log
- ircd
-
- news
-
- ppp
- /etc/ppp/options
-
- log-facility local2 ==info==> /var/log/pppd.log
- quagga
-
- radius
-
- samba
- /etc/smb.conf
-
- log level=3
log file=/var/log/samba/%m.log
/var/log/samba/xxx.log
/var/log/samba/nmbd.log
/var/log/samba/smbd.log
- scpm
- (
) /etc/scpm.conf
-
- LOGFILE=/var/log/scpm.log
- smpppd
-
- squid
-
- vsftp
- (
) /etc/vsftpd.conf
-
- logsyslog_enable=NO
log_ftp_protocol=NO
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftp/vsftpd.log
xferlog_std_format=NO
xferlog_file=/var/log/vsftp/xfer.log
dual_log_enable=YES
setproctitle_enable=YES
- YaST2
-
- Il faut s'assurer que tous ces fichiers *.log vont bien être transformés
en *.gz lorsqu'ils auront dépassé une certaine taille. Les taux
de compression étant énormes, le gain de place est évident. Les messages
étant très répétitifs, ce taux peut atteindre
. En outre, cela
permet de découper les archives en morceaux datés et utilisables.
- Aucun fichier du répertoire /var/log ne doit dépasser la taille
prescrite, et en tout cas pas 4 Mo. Un tel dépassement est soit le
signe d'un mauvais réglage, soit le signe d'un autre genre de problèmes.
- Jusqu'à
, le mécanisme d'archivage se règle dans /etc/logfiles.
Une tentative pour réutiliser ce mécanisme dans les distributions
suivantes, imposait de reprendre l'ancien script /etc/cron.daily/aaa_base_rotate_logs
et ... de tout gérer à la main. En particulier, donner une valeur
non nulle à la variable MAX_DAYS_FOR_LOG_FILES (le fichier rc.config
ayant disparu).
- A partir de la
, le mécanisme logrotate s'installe
par défaut. Le fichier /etc/cron.daily/logrotate/ appelle chaque
jour la commande /usr/sbin/logrotate, en utilisant le fichier
de configuration /etc/logrotate.conf. Celui-ci contient quelques
commandes "en facteur" pour tous les fichiers. Utiliser :
- daily
-
- rotate
- 365
- maxage
- 365
- create
-
- compress
- ; compresscmd /usr/bin/bzip2 ; uncompresscmd /usr/bin/bunzip2
- dateext
-
- include
- /etc/logrotate.d
- missingok
-
- notifempty
-
- Configurations individuelles fournies par
et
incluses à partir du répertoire /etc/logrotate.d/ :
- apache2
- yast
- mcelog
- yast
- mysql
- yast : caveat /var/lib/mysql/mysqld.log
- net-snmp
- yast
- ntp
- gestion lourdement modifiée
ntpd
- rsync
- yast
- scpm
- yast
- syslog
- séparer mail et news
- syslog-ng
- yast
- vsftpd
- yast
- wtmp
- yast
- xdm
- yast
- xinetd
- yast
- zmd-backend
- yast
- zypper.lr
- modifié en YaST
- Configurations individuelles écrites spécialement :
- YaST
- gère zypper.lr et déclare quelques autres fichiers
pour compatibilité.
- audit
-
- auth-cron
- la gestion des scripts cron (non prévue par défaut)
- cups
- n'était pas prévue = surprise
- dhcpd-named
-
- mail
- séparé de syslog
- net-snmp
-
- news
- séparé de syslog
- ntpd
-
- sax-video
- ces fichiers sont écrasés par SaX à chaque utilisation.
Utile pour compatibilité.
- speciaux
- boot et evms
- zmd-message
- non prévu par yast. On obtient des fichiers non comprimés
et valables pour un seul jour d'activité.
- Il faut donc vérifier qu'un traitement est effectivement prévu pour
chacun des fichiers *.log existants. Le batch qyl_docs_logs
fait cela.
- Après chaque modification "sensible", il faut lancer
/etc/cron.daily/logrotate afin de vérifier qu'il n'y a pas
d'erreur de syntaxe. Sans quoi, logrotate se bloque totalement,
et tous les fichiers *.log grossissent hors contrôle.
- Dans une énumération de fichiers à traiter, on passe à la ligne en
passant à la ligne, et surtout pas avec un backslash à la fin (à
la bash). Ceci serait compris comme un fichier qui s'appellerait
"\r"... avec empoisonnement du fichier
/var/lib/logrotate.status.
- La signification précise de daily, weekly et monthly
n'est pas claire. S'agit-il de tourner quoi qu'il arrive à la fin
de la période, ou bien de tourner au plus une fois par période (et
cela seulement si la taille est dépassée) ?
- La TAB. 4 donne la liste des logs pour
lesquels un traitement est écrit .
TAB. 4:
Liste des *.log pour lesquels un traitement est écrit
|
|
- Il semble utile de créer un nouvel utilisateur secur:secur
de façon à ne pas être root lors de cette exploitation, et de ne pas
être non plus l'utilisateur usuel (problème de taille et de sauvegardes).
Et alors, de façon à pouvoir travailler aisément après une commande
su secur, il est utile :
- d'inclure les lignes suivantes dans /home/secur/.bashrc
export PATH=$PATH:~/bin:/opt/kde3/bin
export KDEHOME=~/.kde
export MAIL=/var/mail/secur
export GTK_RC_FILES=/etc/gtk/gtkrc:~/.gtkrc
- de créer dans ~/bin une commande kfm
contenant
kfmclient openProfile midnightcommander
- Fichiers boot. Il est intéressant de comparer le fichier runlevel
avec les messages émis lors du boot et conservés dans /var/log/boot.msg.
Avec la pagaille introduite dans le mécanisme rc.config, il
faut retravailler ce fichier. Tel est le but du script (secur) qsb_boot,
conduisant au fichier boot_joli.log. On constate que l'ordre
des messages reçus est fort différent de l'ordre des runlevels.
1.7 SuSEfirewall2
- Ne fonctionnait pas sous
. Sous
, le batch de
lancement est /sbin/SuSEfirewall2. Ce fichier lit et interprète
le fichier descripteur de règles /etc/sysconfig/SuSEfirewall2.
Caveat : stop a pour résultat de laisser les portes ouvertes.
Pour tout fermer, utiliser close... sauf pour une machine
distante !!!
- Les fichiers /etc/init.d/SuSEfirewall2{init, setup, final} exécutent
des morceaux choisis du script principal (à différentes étapes du
boot) et ne sont pas destinés à un usage humain.
- La configuration consiste à décrire quels sont l'intérieur, l'extérieur
et la dmz. Il règle le forwarding ainsi que le masquerading du réseau
interne.
- Le firewall doit être déclaré dans les runlevels init=2,3,5 ; setup,final=3,5.
- Il faudrait examiner les ipchains engendrées (repartir du batch qyr,
LISTING 12).
- Comment ne pas enregistrer les martiens ???? les commandes
-
- echo 0 > /proc/sys/net/ipv4/conf/all/log_martians
echo 0 > /proc/sys/net/ipv4/conf/eth1/log_martians
sont annulées à chaque recharge du réseau.
1.8 Exploitation de firewall.log
*** revoir pour
- Il est important de ne pas noyer les messages critiques sous des montagnes
d'inutilités. Par exemple, une connexion wanadoo engendre les montagnes
de "martian sources". Il faut en bloquer l'enregistrement,
par une commande :
echo 0 > /proc/sys/net/ipv4/conf/*/log_martians
Il faut mettre à zéro les deux drapeaux all et ethx,
car il y a un ou booléen entre les deux.
- A ceci près que root est, par construction, le seul à pouvoir écrire
dans ce genre de fichiers, et qu'un batch suid root ne suffit pas.
Comment mettre cela dans un script ? (le problème étant que les drapeaux
repassent à 1 à chaque déconnexion).
- La partie intéressante de firewall.log est constituée des "
Packet log" . Sous
, ils sont enregistrés au niveau
info (tandis que les martiens le sont au niveau warn). Sous
,
les " Packet log" sont enregistrés au niveau warn,
et les martiens au niveau ***.
- L'exploitation se fait par mise en tête de l'adresse distante. On
obtient alors un tri par émetteur puis par date.
- Une traduction des numéros de protocole facilite la lisibilité. Une
liste de protocoles est rappelée dans /etc/protocols. En particulier,
- La traduction des numéros de services est indispensable, mais il y
a des cas où elle est nuisible (exploration de ports en succession).
Pour l'instant, on procède en deux temps : repérage des numéros de
services, sélection des lignes de filtre puis filtrage. Il est indispensable
de ne pas utiliser le filtre complet car il est très long et l'algorithme
se traîne abusivement (un adressage direct serait utile).
- Tout cela est implémenté dans la commande packetian (user
digger) décrite LISTING 6.
La liste des modules disponibles est donnée par la TAB. 5
(les numéros renvoient vers le manuel pam-modules).
Le traçage s'obtient en plaçant une ligne pam_warn dans
le fichier /etc/pam.d/xxx concerné. Cela provoque un message
étiqueté "auth.warn". Dans la configuration standard,
cela se traduit par un message sur la console F10, et une ligne dans
/var/log/warn. Nous avons choisi de regrouper ces messages dans un
fichier spécial /var/log/auth. Dans tous les cas, être attentif à
ce que ces logs ne soient lisibles que par root !!!
TAB. 5:
Liste des modules pam.
|
|
- login : login sur console
-
- PAM-warn[365]: service: login [on terminal: tty2]
PAM-warn[365]: user: (uid=0) -> root [remote: ?nobody@?nowhere]
login[365]: pam_unix session started for user root, service login
login[365]: pam_unix session finished for user root, service login
- passwd : changement de mot de passe
-
- PAM-warn[400]: service: passwd [on terminal: <unknown>]
PAM-warn[400]: user: (uid=0) -> root [remote: ?nobody@?nowhere]
PAM-warn[400]: service: passwd [on terminal: <unknown>]
PAM-warn[400]: user: (uid=0) -> root [remote: ?nobody@?nowhere]
- xdm : login graphique
1.11 Nouveaux utilisateurs
- Il est utile que les mêmes utilisateurs aient les mêmes uid d'une
installation à la suivante (ce qui permet de conserver les droits...
). Cette remarque est en particulier valable pour $ipse.
- Ne pas oublier d'élaguer le squelette, c'est à dire /etc/skel
avant de créer les utilisateurs.
- useradd [-c comment] [-d home_dir] [-e expire_date] [-f
inactive_time] [-g initial_group] [-G group[,...]] [-m [-k
skeleton_dir]] [-o] [-p passwd] [-s shell] [-u uid] login
- Recopier au minimum $ipse/bin et $ipse/docs/nullix
- kusers (anciennes versions) n'attribue pas correctement les droits
sur les fichiers.
- kmusers semble fonctionner correctement.
- gag interplanétaire : pass ne s'écrit pas pareil dans les claviers
us et fr. Or le password ne s'affiche pas (trou de sécurité dans l'anti-trou).
Previous: Table des encadrés
Up: Nullix 110 (LYX 1.5.4)
Next: 2 Réglages de kde
  Contents
douillet@ensait.fr
2008-11-27