Suite et fin Samba
Acceder a partir d'un client samba
Comment accéder à un share Windows ou un serveur Samba depuis un poste de travail Linux?
aptitude install smbclient smbfs
smbclient: lister les partages sur les machines distantes smbfs: monter les systèmes de fichiers sur la machine locale
Config smb-common: domaine: deblab.org encryption: oui WINS: non
Lister les shares sur une machine Windows:
smbclient -L 192.168.2.145 -U administrateur Password: Domain=[CISCO] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager] Sharename Type Comment --------- ---- ------- travaux-bbw Disk IPC$ IPC IPC distant cneu Disk nathalie Disk ADMIN$ Disk Administration C$ Disk Partage par dsession request to 192.168.2.145 failed (Called name not present)session request to 192 failed (Called name not present) Domain=[CISCO] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager] Server Comment --------- ------- Workgroup Master --------- -------
Monter le share ADMIN$:
smbmount //192.168.2.145/ADMIN$ /mnt/ -o username=administrateur
On devrait aussi pouvoir le faire avec mount, mais il y a une erreur:
mount -t smbfs //192.168.2.145:/debshare /mnt/test/ -o username=administrateur 3917: Connection to 192.168.2.145: failed SMB connection failed
mount n'a pas l'air de prendre l'option -t smbfs…
Comparaison SMB - NFS
On va comparer en lecture et en écrite les performances de samba et de NFS. Ceci se fera à l'aide de la commande time
Samba
Monter la partition sur la machine windows:
smbmount //192.168.2.145/deblab /mnt/ -o username=administrateur ===== Ecriture ===== On va générer un fichier de 64 Mo:
time dd if=/dev/urandom of /mnt/test_file bs=16k count=4096 4096+0 enregistrements lus. 4096+0 enregistrements écrits. 67108864 bytes transferred in 29,624564 seconds (2265311 bytes/sec)
real 0m29.629s user 0m0.025s sys 0m19.338s%
Lecture
time dd if=/mnt/smb/rand_carl of=/dev/null bs=16k 4096+0 enregistrements lus. 4096+0 enregistrements écrits. 67108864 bytes transferred in 11,333032 seconds (5921528 bytes/sec) real 0m11.360s user 0m0.011s sys 0m0.227s
NFS
Monter la partition nfs distante.
mount -t nfs 192.168.2.254:/debshare /mnt/nfs
Ecriture
Créer un fichier sur la partition montée:
time dd if=/dev/urandom of=/mnt/nfs/rand_carl bs=16k count=4096 4096+0 enregistrements lus. 4096+0 enregistrements écrits. 67108864 bytes transferred in 24,811292 seconds (2704771 bytes/sec) real 0m25.053s user 0m0.016s sys 0m21.178s
C'est plus rapide en écriture avec NFS.
Lecture
dd if=/mnt/nfs/rand_carl of=/dev/null bs=16k 4096+0 enregistrements lus. 4096+0 enregistrements écrits. 67108864 bytes transferred in 6,342907 seconds (10580143 bytes/sec) real 0m6.371s user 0m0.016s sys 0m0.111s
Exercice
S'arranger pour qu'au boot il monte un share windows: Ajouter dans /etc/fstab la ligne:
//192.168.2.145/debshare /mnt/smb smbfs defaults,username=administrateur,password=lammur 0 0
Secure shell
SSH: protocole d'authentification + d'encryption
super demon
inetd: démarre et arrête les demons à la demande. xinetd = extended inetd
installer le serveur telnet: telnetd:
aptitude install telnetd
Est-ce qu'il tourne?
root@403-15:/home/linux# ps ax | grep telnet root@403-15:/home/linux#
Non.
Lorsqu'on initie une session telnet, le super-demon va lancer telnet.
telnet localhost Trying 127.0.0.1... Connected to 403-15.deblab.org. Escape character is '^]'. Debian GNU/Linux 3.1 403-15.deblab.org 403-15 login:
Dans un autre shell, vérifier ce qui tourne:
ps ax | grep telnet 4166 pts/0 S+ 0:00 telnet localhost 4167 ? S 0:00 in.telnetd: 403-15.deblab.org
La seconde ligne montre que le demon telnetd a été lancé.
Pour sortir de la session telnet:
exit
Configuration de inetd dans le fichier /etc/inet.conf Lors de l'installation de telnetd, un script a activé le serveur telnetd:
telnet stream tcp nowait telnetd.telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd
Pourquoi ne faut-il pas utiliser [[telnet]]?
Nous allons utiliser l'analyseur de trafic ethereal. Installation:
aptitude install ethereal
tcpdump est un outil équivalent en mode console.
Pour utiliser ethereal avec des droits suffisants, il faut le lancer en temps que root (comme c'est une application graphique, il faut le faire dans un terminal dans une session X Window).
capture → start → interface: eth0 → start
Lancer une connexion telnet vers une autre machine dans une autre console:
telnet 192.168.2.141
Après s'être identifié, arrêter la capture (bouton stop).
Ensuite, classer les paquets par protocole et repérer les paquets de type TELNET. On peut voir dans la fenêtre inférieure le contenu des paquets. On peut repérer un paquet avec “password”. Le mot de passe est envoyé à raison de un caractère par paquet qui suit (le dernier caractère du paquet).
Pour voir la session de manière plus lisible, aller dans le menu Analyze → Follow TCP stream.
Donc, on va utiliser ssh à la place de telnet.
Encryption par clef publique
Un algorithme utilisé utilise une clef (ensemble de caractères) pour encrypter un message.
- clef symétrique: on utilise la même clef pour encrypter est décrypter
- clef asymétrique: une clef privée depuis laquelle on fait une clef publique (avec un algorithme non réversible)
- clef publique: encrypter
- clef privée: décrypter
- la clef publique est envoyé à quelqu'un (l'expéditeur), qui encrypte un message et l'envoie au destinataire qui décrypte le message avec sa clef privée
connexion ssh
Pour se connecter, on utilise le client ssh:
ssh localhost The authenticity of host 'localhost (127.0.0.1)' can't be established. RSA key fingerprint is 9c:55:d5:2b:b8:67:4e:73:8f:57:4f:b5:26:20:5c:85. Are you sure you want to continue connecting (yes/no)?
La machine locale ne connait la machine distante, elle affiche l'empreinte de la clef du serveur distant. Si on accepte, la clef publique du serveur distant est mémorisée dans /home/user/.ssh/known_hosts:
Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Par défaut, ssh lance une demande de connexion avec l'utilisateur courant. Pour changer:
ssh -l user machine
ou
ssh user@machine
Où machine est le nom (pour autant qu'on puis la résoudre avec un DNS) ou l'IP de la machine distante (qui tourne un serveur ssh).