Identifiants déconseillés de Novembre

Mise à jour pour novembre de la liste des identifiants déconseillés sur un serveur accessible depuis internet (ssh et ftp). La liste est complète et intègre l’ensemble des identifiants depuis un an, avec les nouveaux apparus le mois dernier.

Vous trouverez la liste à télécharger  ici.

Voici la liste (incomplète, puisqu’expurgée des identifiants ne passant pas en HTML sur le site) des identifiants utilisés:

!@#$%^
0002593w
00089
0racle
1
1234
12345
1qaz
24_touchy
\357\273\277root
3nt3rw3b
a
aa
aaa
aabakken
Aadolf
aaguilar
aalish
aaliyah
Aaliyah
Aamu
aandrei
Aapeli
aapo
Aapo
Aappo
Aarne
Aarni
Aarno
Aaro
aaron
Aaron
Aarre
Aarto
Aatami
Aatos
Aatto
Aatu
ab
Aba
abakus
abas
abba
abbott
abby
abc
abc123
abcd
abcde
abcs
abdollah
abel
abelard
abelium
abra
abraham
abrahams
absolon
abuse
ac
acc
acer
achille
achramowicz
acosta
acs
act
actis
ad
adachi
adam
adan
adeline
adil
aditya
adm
adm2
admin
Admin
admin1
admin2
admin4
adminftp
administracion
administrador
administrateur
Administrateur
administration
administrator
Administrator
admon
adnan
adoblas
adolphe
adrian
adriano
advantage
agarcia
agata
agueda
aigtransfer
aldo
alex
alexandre
alexis
alfredo
alias
alin
alina
alondra
altagracia
amal
amanda
amendoza
amstelecom
ana
andi
andie
andik
andre
andrea
andrew
angel
angelica
anna
anonymous
anton
antonia
anyone
apc
apple
Arho
Ari
arodriguez
arvin
as
auditor
auditoria
augusto
axel
b
backup
baltasar
basilio
bautista
beatriz
ben
benedicta
benedicto
benita
benito
bernie
berta
bin
blas
boot
bot
brian
brigida
bruno
bus
c
cadi
cady
cafe
cai
cailin
cailine
calista
cameron
candie
candy
carlabs
carta
cartas
casandra
casino
cat
cayetano
cayo
cgarcia
cgdsommieres
cgi
christian
ciceron
cindy
cirilo
cjohnson
clientes
cocolino
colon
comerciais
comercial
comms
condor
consultoria
coocon
correo
csuarez
curcio
d
dasusr1
data
db2inst1
dcmoralde
deane
dedlogistica
deepesh
delta
demetrio
demo
denom
deo
design
deutch
diablo
display
dk
dke
dl
dle
dm
dmaac
dme
dmin
domingo
drivers
dsantiago
dsigned
dumbo
e
eaguilar
edilson
.edu
efrain
ejerez
eloy
eminem
engracia
enio
enzo
eroot
es
estudiante
eva
export
ezequiel
fabio
fakeuser
falcon
fax
fedora
fermin
fernando
fire
fluffy
fly
francisco
franck
fred
freebox
ftp
ftpuser
gail
games
gast
german
gerry
ghost
gilberto
gilmar
global
globus
gnats
good
.gov
gpadilla
grace
granta
gregorio
grupo2
gt05
guest
guest1
haruki
heidi
hilaria
hilario
hipolito
hiram
hiroshi
hitler
home
http
httpd
image
info
information
install
internet
invite
iris
isidro
ismael
itschool
jack
jagdish
jair
jasonbc
jboss
jeamar
jeanpaul
jfparra
jian
jloor
jmaldonado
joan
joaquin
jobert
johan
joomla
jorgef
joseluis
jsolis
jsuarez
jtello
juliano
karon
katharina
knoppix
kristablack.net
left
leon
leonardo
lgonzalez
liaw
library
lieu
lilly
linda
linux
logic
lorenzo
lpa
lpd
ls
lschmidt
lscsymbiosis
lsnoxell
luca
lucas
lucius
ludovic
lugog
luigi
luis
luisa
luke
lunar
lus
luther
luxmundi
lward
lyle
lyn
lynux
lynx
lz
m0n0wall
mac
machine
mack
macosx
macthom
mad
madalena
madmad23
madmin
madonna
magazine
magenta
magic
mai
mail
mailman
maintain
maintenance
mambo
manager
manu
manu2
manu-desktop
marcar
marcia
marian
./marie-françoise
marine
mario
marion
master
mat
mat3
mat4
mateo
matilde
matt
matt4
mcc
medina
mercedes
michael
miguel
Miika
Miikka
mike
miranda
mireya
mlmb
monica
montrelle
moralez
movieup
mromero
murmar
murray
mvega
mysql
mythtv
nada
nadia
nagios
nana
nancy
narciso
natalia
nestor
netdump
news
newsroom
nicoara
nieves
nina
nlopez
no
nobody
noe
noemi
norberto
norris
null
NULL
office
olivia
or
oracle
oracle1
oratest
order
ot
oubiwann
pabla
paco
pam
paradise
pass
password
patricia
patricio
patrick
paula
payala
paz
pelayo
penelope
perla
petr
pgsl
photo
pia
piedad
pio
placido
player
player2
plcmspip
PlcmSpIp
pontoBXS
porfirio
postgres
postmaster
ppazmino
presidencia
primaveras
prueba
prueba1
public
r00t
raimundo
ramiro
raul
recruit
research
reynaldo
rfmngr
right
roberto
rocio
rogelio
root
['root
rosario
rot
rsync
sales
salvatore
samba
sancho
sarah
saturnino
scanner
scanspublics
scorpion
seb
sebastian
sec
security
sergio
sergior
server
service
severino
sherry
shortcut
shoutcast
simon
simoni
sims
sistemas
sjuarez
skin
slim
smtp
sol
soporte
spam
sql
ssh
staff
stephanie
stephen
steven
sthippolyte
stud
student
su
sua
support
supporte
svn
sybille
sync
sys
sysadmin
system
t
t1na
tadeo
tax
taylor
td
teacher
teamspeak
temp
teofilo
test
test1
teste
teste2
tester
testi
testing
testuser
thao
thy
ti
tiffany
tomas
tomcat
tomsu
toor
toto
trash
tricia
ts
tzuss
unknown
upload
user
user1
userftp
username
usuario
utente
utilidad
utilidades
valentin
vh
vicente
web
webadmin
webalizer
webmaster
wilf
wilford
william
wilson
wr
www
www1
www-data
xten
yosef
yvonne

Identifiants déconseillés

Quand on surveille ses logs (ce que tout bon administrateur réseau devrait faire), on finit par voir que des tentatives d’accès non autorisés utilisent souvent les mêmes identifiants.

Par conséquent, l’administrateur intelligent se gardera bien d’utiliser ceux ci et choisira des logins moins faciles à deviner par les « pirates ».

Comme j’administre une quantité de serveurs grandissante et importante, je centralise tous les identifiants utilisés qui ont entrainé un échec d’identification. Vous trouverez le fichier ici: Identifiants refusés

Faites en bon usage. Sur mes machines, aucun des ces identifiants n’est autorisé ( et tant pis pour les utilisateurs qui veulent quelque chose de simple ET que leurs données soient en sécurité…)

Réinitialiser le mot de passe root sur MySQL

« La force de la mémoire, c’est d’oublier »

Mais parfois, c’est embêtant…

Vous administrez un serveur MySQL sur un base Debian et vous avez oublié le mot de passe de root pour accèder à phpmyadmin? Pas de panique!

Suivez ces instructions:

cat /etc/mysql/debian.cnf

Relevez le mot de passe donné dans ce fichier.

Allez sur votre interface phpmyadmin et utilisez l’utilisateur debian-sys-maint avec le mot de passe relevé ci dessus.
Ensuite, grâce au lien privilèges, allez modifiez le mot de passe voulu.

Le fichier /etc/mysql/debian.cnf possède les droits en 600 et appartient à root. Il n’est donc pas lisible par un autre utilisateur.

Cette méthode rapide et facile ne fonctionne que sur les bases Debian. Pour les autres, ou si celle ci ne fonctionne pas, il faudra utiliser les méthodes classiques, comme par exemple celle ci

Apache2: résoudre « Could not reliably determine the server’s fully qualified domain name … »

Lorsque le serveur apache2 va démarrer, il va chercher à s’auto identifier pour savoir à quoi il doit répondre. Or, par défaut, rien n’est paramétré.

Il suffit, dans un premier temps, d’ajouter la directive suivante au fichier /etc/apache2/httpd.conf ou au fichier /etc/apache2/apache2.conf:

ServerName     nomduserveur.domaine.com

Mais ça n’est pas suffisant. En effet, si apache doit interroger nomduserveur.domaine.com comme nous venons de lui indiquer, il doit connaître son IP, et c’est dans le fichier /etc/hosts que ça doit être fait. Modifiez le fichier /etc/hosts pour avoir quelque chose ressemblant à ceci (en utilisant vos noms et IP de machines!):

127.0.0.1    localhost nomduserveur nomduserveur.domaine.com
192.168.10.23    nomduserveur nomduserveur.domaine.com
...

Maintenant, si vous relancez apache, vous ne devriez plus obtenir l’erreur indiquée dans le titre.

Identifier son système sous linux

Lorsque l’on doit faire une mise à jour du bios de son ordinateur, il est plus rassurant (et plus fiable) d’avoir le maximum d’informations sur son matériel.

Avec Debian/Ubuntu, vous pouvez obtenir ces informations facilement en installant le paquet libsmbios-bin et en utilisant la commande getSystemId (via sudo!)

exemples:

pour mon Aspire One (jaunty)

Libsmbios version:      2.2.13
Product Name:           AOA150
Vendor:                 Acer
Version du BIOS:        v0.3114
System ID:              0x0000
Service Tag:            xxxxxxxxxxxxxxxxxxxxx
Express Service Code:   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Asset Tag:
Property Ownership Tag:

Pour mon Fujitsu Amilo (hardy):

Libsmbios:    0.13.10
Error getting the System ID   :
Error getting the Service Tag : std::exception
Product Name: AMILO Xa 2528
BIOS Version: 1.0L-4C15-000F
Vendor:       FUJITSU SIEMENS
Is Dell:      0

Un serveur Web (hardy):

Libsmbios:    0.13.10
Error getting the System ID   :
Error getting the Service Tag : std::exception
Product Name: EPIA
BIOS Version: 6.00 PG
Vendor:       VIA TECHNOLOGIES, INC.
Is Dell:      0

Une VirtualBox (jaunty):

Libsmbios version:      2.2.13
Product Name:           VirtualBox
Vendor:                 innotek GmbH
Version du BIOS:        VirtualBox
System ID:              0x0000
Service Tag:            0
Express Service Code:   0
Asset Tag:
Property Ownership Tag:

Pour les développeurs python, vous noterez que ça vous installe d’office python-libsmbios. Je vous laisse imaginer tous les usages possibles pour vos applications.

Htop toujours disponible

htop-05Données du problème

J’ai un serveur avec écran, dans une armoire fermée à clef avec un porte transparente qui démarre sans interface graphique. Je souhaitais faire apparaître un htop systématiquement à chaque démarrage.

Méthode testée sur Ubuntu, mais pouvant certainement être adaptée à d’autres distributions.

Il suffit de mettre le code suivant dans le fichier /etc/event.d/tty1

# tty1 - getty
#
# This service maintains a getty on tty1 from the point the system is
# started until it is shut down again.
 
start on stopped rc2
start on stopped rc3
start on stopped rc4
start on stopped rc5
 
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
 
respawn
exec /sbin/getty 38400 tty1 -nl /usr/bin/htop

Attention

  • Dans cette configuration, le clavier est actif. Il est donc utilisable par n’importe quel utilisateur accédant au clavier.
  • Le logiciel est lancé en root! Donc, si le clavier est accessible, n’importe quel utilisateur peut killer un processus appartenant à un autre (même init!)
  • htop consomme de la mémoire et de la puissance processeur. Même si c’est relativement peu, c’est à prendre en compte.

Du fait que le clavier est inacessible, dans mon cas, cela n’est pas un problème, mais c’est à garder en tête avant d’activer cette fonctionalité.

Update du 24/01/2011

Depuis que la version de Upstart a changé sur Ubuntu, cela ne fonctionne plus exactement de la même manière:

  • Il faut modifier le fichier /etc/init/tty1.conf
  • Il faut remplacer la ligne exec /sbin/getty -8 38400 tty1 par exec /usr/bin/htop </dev/tty6 >/dev/tty6
  • Le clavier est toujours actif! Attention: si vous avez installé GPM, la souris l’est aussi et permet d’utiliser les menus de htop! Pensez à la mettre sous clef.

Filtrer les connexions ssh

Portier SSH

Si vous possédez un serveur avec SSH opérationnel, vous ne serez pas long à avoir des messages tels que ceux ci dans le fichier /var/log/auth.log:

...
Mar 11 12:48:21 serv sshd[12956]: Failed password for invalid user root from 64.71.148.162 port 47270 ssh2
Mar 11 15:45:04 serv sshd[6954]: Did not receive identification string from 210.21.30.72
Mar 11 15:46:48 serv sshd[7041]: Did not receive identification string from 81.93.188.5
Mar 11 15:47:50 serv sshd[7106]: User root from 210.21.30.72 not allowed because none of user s groups are listed in AllowGroups
Mar 11 15:47:50 serv sshd[7106]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=210.21.30.72  user=root
Mar 11 15:47:52 serv sshd[7106]: Failed password for invalid user root from 210.21.30.72 port 54346 ssh2
Mar 11 15:49:33 serv sshd[7241]: User root from 81.93.188.5 not allowed because none of user s groups are listed in AllowGroups
Mar 11 15:49:33 serv sshd[7241]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=81.93.188.5  user=root
Mar 11 15:49:35 serv sshd[7241]: Failed password for invalid user root from 81.93.188.5 port 44663 ssh2
Mar 12 00:51:18 serv sshd[22229]: User root from host.ongamemarketing.com not allowed because none of user s groups are listed in AllowGroups
Mar 12 00:51:18 serv sshd[22229]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=host.ongamemarketing.com  user=root
Mar 12 00:51:20 serv sshd[22229]: Failed password for invalid user root from 174.133.12.130 port 48089 ssh2
Mar 12 00:51:22 serv sshd[22236]: User root from host.ongamemarketing.com not allowed because none of user s groups are listed in AllowGroups
Mar 12 00:51:22 serv sshd[22236]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=host.ongamemarketing.com  user=root
Mar 12 00:51:24 serv sshd[22236]: Failed password for invalid user root from 174.133.12.130 port 48521 ssh2
Mar 12 01:47:10 serv sshd[30827]: Did not receive identification string from 114.200.199.144
Mar 12 01:53:17 serv sshd[31227]: Invalid user staff from 114.200.199.144
Mar 12 01:53:17 serv sshd[31227]: pam_unix(sshd:auth): check pass; user unknown
Mar 12 01:53:17 serv sshd[31227]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=114.200.199.144
Mar 12 01:53:19 serv sshd[31227]: Failed password for invalid user staff from 114.200.199.144 port 35343 ssh2
Mar 12 01:53:27 serv sshd[31234]: Invalid user sales from 114.200.199.144
...

Vous avez besoin de pouvoir vous connecter en ssh depuis le réseau local, depuis l’extérieur, mais vous voulez limiter les risques. Il existe plusieurs solutions, qui peuvent être cumulées:

Sécuriser par la configuration de SSH

N’autoriser QUE certains utilisateurs à accéder au service

Si vous avez peu d’utilisateurs nécessitant un accès ssh, vous pouvez les déclarer ainsi en ajoutant cette ligne dans le fichier de configuration /etc/ssh/sshd_config (et en redémarrant le service après chaque modification)

AllowUsers titi toto

Après relance du service ssh, les utilisateurs titi et toto pourront se connecter en ssh, les autres utilisateurs se verront refuser leur mot de passe.

Vous pouvez aussi créer un groupe (par exemple: sshusers) et autoriser tous les utilisateurs de ce groupe à se connecter en ssh. Ceux n’appartenant pas à ce groupe se verront refuser leur mot de passe.

addgroup sshusers
adduser toto sshusers
adduser titi sshusers

Puis ajoutez la ligne suivante dans /etc/ssh/sshd_config:

AllowGroups sshusers

IN and OUT

Oui, mais voilà un nouveau problème:

  1. Le serveur fait passerelle avec internet, et possède une carte sur le réseau interne, et une carte vers le réseau internet.
  2. Tous mes utilisateurs internes doivent pouvoir accéder par ssh (ce qui est le cas avec la configuration par défaut), mais ne doivent pas pouvoir accéder depuis l’extérieur (parce qu’ils n’en ont pas besoin, ou parce que les mots de passe des utilisateurs sont trop simples)
  3. Si je laisse la configuration ainsi, le serveur sera piraté très rapidement.

Il est possible d’ajouter une directive à la liste des autorisations, permettant de faire ceci:

AllowUsers *@192.168.0.*

Ainsi, tous les utilisateurs du réseau local (et possédant un compte sur le serveur) pourront accéder par ssh, mais ne pourront pas le faire s’ils ne proviennent pas du réseau local (par internet).
Si je veux pouvoir ensuite me connecter depuis l’internet pour faire de la télémaintenance, il me suffit d’ajouter mon compte et de transformer la ligne en ceci:

AllowUsers manu *@192.168.0.*

(1)

Il est possible aussi de cumuler les directives Users et Groups pour obtenir des possibilités supplémentaires. Exemple:

  1. Seuls certains de mes utilisateurs locaux doivent pouvoir se connecter au serveur, depuis le net ou en local.
  2. Je veux pouvoir m’y connecter de partout (local et internet)

La configuration est la suivante:

AllowGroups sshusers
AllowUsers manu

Ainsi, seuls les utilisateurs appartenant au groupe sshusers pourront se connecter au serveur, en plus de l’utilisateur manu qui pourra se connecter depuis n’importe où.

Si je possède un adresse IP fixe, et que je suis assez bête pour crée un compte manu avec le mot de passe manu, je peux tout de même limiter l’accès par mon adresse IP (80.80.80.80)

AllowUsers @80.80.80.80

Je suis désolé, ça va pas être possible…

Vous pouvez même ajouter des directives inverses, pour interdire les connexions:

DenyUsers invite
DenyGroups stagiaires

Autres configurations conseillées de ssh

Vous pouvez modifier d’autres éléments du fichier de configuration, qui permettront de sécuriser un peu plus votre serveur ssh:

  • Changer le port d’écoute par défaut: vous pouvez changer ce port par autre chose que 22. Sachez cependant que la protection apportée par ce changement est TRÈS FAIBLE. Un scan de vos port repérera le port que vous avez choisi, et des logiciels de scans sont capable de déterminer le service qui tourne derrière ce port. Cela vous permettra seulement d’échapper à certains robots qui ne tentent des connexions que sur le port 22.
  • N’autoriser une identification que par clef: il vous faudra générer des clefs d’identification (avec seahorse pour gnome ou ssk-keygen) pour tous vos utilisateurs et empêcher l’autentification par mot de passe dans la configuration de SSH. Cette protection est très efficace, par contre, il faut que les clefs soient sécurisées (pas sur une clef usb qui peut se perdre ou se faire voler, pas sur un partage accessible, pas échangées par courriel, …). L’autre inconvénient, c’est que vos clefs doivent voyager avec vous et être installées sur les ordinateurs que vous utilisez; d’où une incompatibilité avec le point précédent, si vous n’avez pas une politique stricte de stockage des clefs.
  • Ne JAMAIS autoriser la connexion de l’utilisateur root: (PermitRootLogin no).  Il y a toujours un utilisateur root sur tous les Linux (même sur Ubuntu) et vous facilitez le travail d’un éventuel pirate, puisqu’il n’a qu’un mot de passe à trouver. Autrement, il doit d’abord trouver un login valide, puis son mot de passe, puis celui du root. Si vos mots de passe et vos logins sont adaptés, cela lui prendra des années avant d’y arriver par ce moyen.

Ajouter des logiciels de sécurisation

fail2ban

fail2ban est un logiciel qui va surveiller les tentatives de connexion échouées dans le fichier /var/log/auth.log , et bloquer, en modifiant les règles iptables à la volée, un nombre trop élevé de connexions échouées. Ce logiciel permet aussi, de la même manière, de protéger votre serveur apache, postfix, vsftpd, proftpd, wuftpd, sasl, dns, …
Une fois installé, il vous suffit d’éditer le fichier /etc/fail2ban/jail.conf pour configurer son comportement. Exemple pour ssh:

...
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = <a class="linkification-ext" title="Linkification: http://10.0.0.0/24" href="http://10.0.0.0/24">10.0.0.0/24</a>
bantime  = 600
maxretry = 3
...
[SECTION_NAME]
enabled = true # vérifier que cette valeur est à True, sinon le logiciel n'est pas activé!
...
[ssh]
enabled = true
port	= ssh
filter	= sshd
logpath  = /var/log/auth.log
maxretry = 6

Dans cette configuration:

  • Tout ce qui vient du réseau local (10.0.0.0/24) est ignoré. Donc je pourrais me tromper autant de fois que voulu, je ne me ferais pas bannir.
  • En dehors de mon réseau local, par ssh, j’ai droit à 6 tentatives (par session) de connexions échouées. Ensuite, je me ferais bannir. Si je m’identifie, la fois suivante, j’ai encore droit à 6 tentative (ça repart à zéro avec l’identification réussie)
  • Si je suis banni, toutes mes tentatives de connexions pendant les 600 prochaines secondes (10 minutes) seront refusées, sans possibilité d’identification.

La configuration de fail2ban vous offre plein d’autres possibilité, comme de recevoir des mails en cas de tentatives échouées, d’utilisateurs inconnus, etc. Consultez la documentation pour exploiter cet outils très pratique.

denyhosts

denyhosts permet de faire la même chose, un peu différemment. Il maintient une base d’IP bannies dans /etc/hosts.deny et les compare avec les tentatives de connexions.

Il a quelques avantages sur fail2ban, même si je le trouve plus lent (consommateur) à l’usage:

  1. Il permet de bloquer les tentatives d’accès ssh sur l’utilisateur root dès la première tentative.
  2. Il permet de paramétrer comme on le veut les champs from et subject des mails envoyés
  3. Il permet d’envoyer les rapports vers le syslog, qui peut être distant (et ineffaçable)

Simple à configurer, le fichier /etc/denyhosts.conf est largement commenté

Sur le même sujet:

(1) Ne pensez pas que je suis assez bête pour utiliser un login simple tel que « manu » sur mes serveurs… C’est juste pour l’exemple.

rkhunter et unhide

Unhide est un utilitaire permettant de lister les processus actifs cachés. C’est un outil qui vous permet de trouver d’éventuels rootkits installés sur votre système.

S’il n’est pas installé par défaut sur votre distribution, installez le de manière classique.

Si vous utilisez rkhunter pour scanner votre machine, sans opération particulière vous aurez deux problèmes:

  1. rkhunter n’utilisera pas par défaut unhide, et vous perdrez donc le bénéfice d’un seul scan.
  2. rkhunter va détecter un warning sur unhide et unhide-linux26, ce qui vous enverra un mail à chaque détection.

La solution est simple: il suffit d’indiquer à rkhunter que unhide est fiable, en l’ajoutant à sa base de donnée. Ensuite, rkhunter utilisera unhide automatiquement.

ATTENTION: n’utilisez la commande suivante QUE SI VOUS ÊTES SÛR de votre système ! En effet, cette commande va réinitialiser la base de données des programmes considérés comme sûrs par rkhunter. Si vous avez un rootkit ou des programmes cachés, ils ne seront plus détectés!

Il est conseillé de lancer un rkhunter -c et de vérifier le rapport avant de lancer la commande suivante.

Maintenant que vous êtes prévenus, voici la commande magique (en root ou avec sudo):

rkhunter --propupd

C’est tout. La prochaine fois que rkhunter sera lancé, manuellement ou par la programmation, unhide sera détecté et utilisé.

Identification SSH sans mot de passe

Pour utiliser SSH (et dérivés tels que sftp) sans mot de passe, il faut ajouter votre clef sur le serveur. Nous aurons donc un ordinateur (manu-desktop) qui pourra se connecter à un serveur (server) par ssh sans avoir besoin de spécifier de mot de passe.

Notez qu’il existe des outils graphiques pour réaliser ces opérations (par exemple seahorse sous Gnome), mais je n’en parlerais pas.

Sur l’ordinateur client (manu-desktop)

La première chose à faire, si vous n’avez pas de clef pour votre machine, est d’en générer une

manu@manu-desktop:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/manu/.ssh/id_rsa):
Created directory '/home/manu/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/manu/.ssh/id_rsa.
Your public key has been saved in /home/manu/.ssh/id_rsa.pub.
The key fingerprint is:
cd:9e:bb:0a:1e:22:29:fa:e3:dc:12:72:8a:15:13:58 manu@manu-desktop
manu@manu-desktop:~$ ls -l ~/.ssh
total 8,0K
3367418 -rw------- 1 manu manu 1,7K 2009-01-15 13:26 id_rsa
3367419 -rw-r--r-- 1 manu manu  399 2009-01-15 13:26 id_rsa.pub
manu@manu-desktop:~$

Ne mettez pas de passphrase et laisser les options par défaut pour la création de la clef. Il est aussi possible de spécifier les options via la ligne de commande:

ssh-keygen -qt rsa -b 1024 -C manu -f ~/.ssh/manu@manu-desktop.rsa -N ""

La commande précédente crée une clef rsa (-t) avec le commentaire (-C) manu d’une longueur de 1024 bits (-b) dans le fichier ~/.ssh/manu@manu-desktop.rsa (-f) avec une passphrase (-N) vide.

Sur le serveur (server)

Le compte utilisateur de connexion doit exister. Il n’est pas obligé que ce soit le même identifiant que sur le client. Par exemple, sur le serveur, mon compte est nommé zephir.

[root@server]:# adduser zephir
Ajout de l'utilisateur « zephir »...
Ajout du nouveau groupe « zephir » (1002)...
Ajout du nouvel utilisateur « zephir » (1002) avec le groupe « zephir »...
Création du répertoire personnel « /home/zephir »...
Copie des fichiers depuis « /etc/skel »...
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l'utilisateur zephir
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
Nom complet []:
N° de bureau []:
Téléphone professionnel []:
Téléphone personnel []:
Autre []:
Ces informations sont-elles correctes ? [o/N] o
[root@server]:#

Sur l’ordinateur client (manu-desktop), fin des opérations

Il ne reste plus au client qu’à envoyer sa clef d’identification au serveur simplement par la commande suivante:

ssh-copy-id -i ~/.ssh/id_rsa.pub zephir@server

Acceptez l’identification du serveur, le mot de passe est demandé (puisque vous n’avez pas encore envoyé la clef) et la clef est copiée dans le fichier /home/zephir/.ssh/authorized_keys.
Tentez la commande suivante (Ctrl+D pour sortir)

ssh zephir@server

Vous ne devriez plus avoir de demande de mot de passe.

Sur le serveur, fin des opérations

Il est possible de sécuriser le serveur afin de n’accepter que les authentifications avec clef et sans demande de mot de passe (pour ssh. L’accès en local demandera toujours un mot de passe).
Ainsi, les tentatives d’attaque par force brute sont vouées à l’échec. MAIS, soyez conscient que vous ne pourrez plus vous connecter depuis une autre machine que celle pour laquelle vous avez envoyé la clef, pas plus que vous ne pourrez envoyer d’autres clefs.
Paramétrez le fichier /etc/ssh/sshd_config tel que ci dessous:

# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
 
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys
 
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no

Relancez ensuite le serveur ssh pour prendre en compte les modifications.

Note sur la sécurité

L’accès au serveur est possible sans authentification par l’utilisateur manu depuis l’ordinateur client (manu-desktop). Si cet ordinateur est un portable et qu’il se fait voler, celui qui arrivera à se connecter avec l’identité de manu arrivera sans demande de mot de passe à se connecter au serveur !
Réfléchissez bien à l’utilisation de ce mode de fonctionnement avant de le mettre en place.
En cas de vol, il suffira de supprimer le fichier /home/zephir/.ssh/authorized_keys pour que la clef volée avec le portable ne soit plus opérationnelle.
Vous pouvez, de même, recréer et changer vos clefs d’identification lorsque vous le voulez en réutilisant les commandes données en début d’article.

Liens:

http://doc.ubuntu-fr.org/gnupg
http://doc.ubuntu-fr.org/ssh

Serveur de synchronisation rsync

Mettre en place un serveur de synchronisation peut être utile pour éviter les saturations par http ou la mise en place d’un FTP anonyme.
De plus, rsync a l’avantage de ne transférer que les différences entre les dossiers à synchroniser, ce qui est plus rapide et moins consommateur de ressources.

L’installation du paquet rsync, sur Ubuntu, ne suffit pas à activer un serveur rsync; il reste quelques manipulations simples à mettre en place.

Tout d’abord, si le progrmme rsync n’est pas installé, faites le:

apt-get install rsync

Le serveur rsyncd a besoin d’un fichier de configuration /etc/rsyncd.conf. Voici un exemple de fichier:

# sample rsyncd.conf configuration file

# GLOBAL OPTIONS

#motd file=/etc/motd
#log file=/var/log/rsyncd
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
pid file=/var/run/rsyncd.pid
#syslog facility=daemon
#socket options=
read only = yes
list = yes
uid = nobody
gid = nogroup
use chroot = yes
max connections=10
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
syslog facility=local5

# MODULE OPTIONS
[astuces]
	comment = repertoire des astuces
	path = /var/www/astuces
#	use chroot = yes
#	max connections=10
	lock file = /var/lock/rsyncd
# the default for read only is yes...
	#read only = yes
	#list = yes
	#uid = nobody
	#gid = nogroup
#	exclude =
#	exclude from =
#	include =
#	include from =
#	auth users =
#	secrets file = /etc/rsyncd.secrets
	strict modes = yes
#	hosts allow =
#	hosts deny =
	ignore errors = no
	ignore nonreadable = yes
	transfer logging = no
#	log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
	timeout = 600
	refuse options = checksum dry-run
	dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

Pour la définition des options, consulter le man.
Les options peuvent être placées dans une section (auquel cas elles ne s’appliquent qu’à cette section, ou en tête de fichier (hors section) et s’appliquent alors à toutes les sections, sauf configuration contraire dans l’une d’elle.

Le serveur peut désormais être lancé manuellement ainsi:

sudo rsync --daemon

Mais il est plus simple d’activer le lancement en démon au démarrage en modifiant le fichier /etc/default/rsync. Voici un fichier correctement paramétré:

# defaults file for rsync daemon mode
# start rsync in daemon mode from init.d script?
#  only allowed values are "true", "false", and "inetd"
#  Use "inetd" if you want to start the rsyncd from inetd,
#  all this does is prevent the init.d script from printing a message
#  about not starting rsyncd (you still need to modify inetd's config yourself).
RSYNC_ENABLE=true
# which file should be used as the configuration file for rsync.
# This file is used instead of the default /etc/rsyncd.conf
# Warning: This option has no effect if the daemon is accessed
#          using a remote shell. When using a different file for
#          rsync you might want to symlink /etc/rsyncd.conf to
#          that file.
# RSYNC_CONFIG_FILE=
# what extra options to give rsync --daemon?
#  that excludes the --daemon; that's always done in the init.d script
#  Possibilities are:
#   --address=123.45.67.89        (bind to a specific IP address)
#   --port=8730                (bind to specified port; default 873)
RSYNC_OPTS=''
# run rsyncd at a nice level?
#  the rsync daemon can impact performance due to much I/O and CPU usage,
#  so you may want to run it at a nicer priority than the default priority.
#  Allowed values are 0 - 19 inclusive; 10 is a reasonable value.
RSYNC_NICE='10'
# Don't forget to create an appropriate config file,
# else the daemon will not start.

Une fois ceci fait, il ne reste plus qu’à relancer rsync:

sudo killall rsync
sudo /etc/init.d/rsync restart

Désormais les utilisateurs peuvent synchroniser anonymement le répertoire que vous avez programmé par la commande:

rsync -avP www.montsite.org::astuces /mon/dossier/a/synchroniser/

Notez que dans la commande ci dessus, astuces est appelé module par rsync. Ce module correspond à la section entre crochets que vous avez défini dans le fichier de configuration ([astuces])

Autres sources d’information:

http://doc.ubuntu-fr.org/rsync
http://prendreuncafe.com/blog/?q=rsyncd
http://man.developpez.com/man5/rsyncd.conf.5.php