Catégorie : Systèmes

2 mai 2016 /

Voici un petit mémo qui montre comment changer le répertoire de données MySQL par défaut, puis à régler SELinux pour qu’il tienne compte des changements.

Arrêt du serveur MySQL:

service mysqld stop

Création d’un nouveau répertoire de données:

mkdir /nouveau/repertoire/mysql
chown mysql:mysql /nouveau/repertoire/mysql

Déplacer la base de données d’origine:

mv /var/lib/mysql/* /nouveau/repertoire/mysql

Modification du fichier de configuration MySQL:

vi /etc/mysql/my.cnf

Et on y change cette ligne:

datadir = /var/lib/mysql

devient:

datadir = /nouveau/repertoire/mysql

ainsi que celle la:

socket = /var/lib/mysql/mysql.sock

qui devient:

socket = /nouveau/repertoire/mysql/mysql.sock

Mappage du contexte SELinux pour le répertoire /nouveau/repertoire/mysql/ , avec la commande semanage:

semanage fcontext -a -t mysqld_db_t "/nouveau/repertoire/mysql(/.*)?"

Application du contexte pour une prise en compte par le système à chaud:

restorecon -Rv /nouveau/repertoire/mysql/

Démarrage du serveur MySQL:

service mysqld start

Vérification de l’accès et de la connectivité:

mysql -u root -p

mysql> show databases;

Si cela fonctionne, vous avez changé le répertoire par défaut de MySQL avec une prise en compte par SELinux avec succès.

Par contre si vous obtenez un message de ce genre:

ERROR 2002 (HY000): Impossible de se connecter au serveur MySQL local par socket '/var/lib/mysql/mysql.sock'

Il faudra ajouter cela à votre fichier /etc/my.cnf :

[client]
socket = /srv/mysql/mysql.sock

Et dernière chose, pour éviter la connexion via le socket:

mysql -u root -p --protocol tcp

1 mai 2016 /

Telnet, (depuis un serveur distant)

telnet 192.168.0.14 20000

Si le port est ouvert:

Trying 192.168.0.14...
Connected to entropia (192.168.0.14).
Escape character is '^]'.

Si le port est fermé (ou service non démarré):

Trying 192.168.0.14...
telnet: connect to address 192.168.0.14: Connection refused
telnet: Unable to connect to remote host: Connection refused

Netstat, (pour tester en local)

netstat -paunt | grep 3306; echo $?

Si le port est ouvert:

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1979/mysqld
0

Si le port est fermé (ou service non démarré):

1

Netcat, (depuis un serveur distant)

nc -v -z 192.168.0.14 3306; echo $?

Si le port est ouvert:

Connection to 192.168.0.14 3306 port [tcp/mysql] succeeded!
0

Si le port est fermé (ou service non démarré):

nc: connect to 192.168.0.14 port 3306(tcp) failed: Connection refused
1

nc  192.168.0.14 3306< /dev/null ; echo $?

Si le port est ouvert:

4
5.1.73▒d))4f*<,i▒N*'%#~rC8/#`0

Si le port est fermé (ou service non démarré):
1

Wget pour tester un serveur web, (depuis un serveur distant)

wget -qO- 192.168.0.14:80 ; echo $?

wget -q --spider 192.168.0.14:80 ; echo $?

Curl, (depuis un serveur distant)

curl telnet://192.168.0.14:22

Si le port est ouvert, la commande restera bloquée car elle attend que l’on saisisse quelque chose. ctrl+c pour sortir.

Si le port est fermé:

curl: (7) couldn't connect to host

Bash, (depuis un serveur distant)

timeout 1 bash -c 'cat < /dev/null > /dev/tcp/192.168.0.14/22' ; echo $?

Si le port est ouvert:
0
Si le port est fermé:

bash: connect: Connexion refusée
bash: /dev/tcp/192.168.0.14/22: Connexion refusée
1

Nmap, (depuis un serveur distant)

nmap -p 80 192.168.0.14

Si le port est ouvert:

Starting Nmap 5.51 ( http://nmap.org ) at 2016-03-29 10:00 CEST
Nmap scan report for entropia.local (192.168.0.14)
Host is up (0.00068s latency).
PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:50:56:01:27:55 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds

Si le port est fermé:

Starting Nmap 5.51 ( http://nmap.org ) at 2016-03-29 10:06 CEST
Nmap scan report for entropia.local (192.168.0.14)
Host is up (0.00045s latency).
PORT   STATE  SERVICE
80/tcp closed http
MAC Address: 00:50:56:01:27:55 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

Pour tester plusieurs port en même temps:

nmap -p 22,1944,20000 192.168.0.14

Python, (depuis un serveur distant)

python
import socket
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('192.168.0.14' , 80))
clientsocket.sent('\n')

Si le port est ouvert, vous arriverez à faire un « clientsocket.sent(‘\n’) » (qui vous retournera surement cette une erreur):
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: '_socketobject' object has no attribute 'sent'

Si le port est fermé, au moment du « clientsocket.connect((‘192.168.0.14’ , 80)) » :
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in connect
socket.error: [Errno 111] Connection refused

28 avril 2016 /

Il peut être parfois utile de pouvoir identifier facilement un port réseau sur un serveur lors des opération de brassage.
Pour identifier facilement une carte, on peut utiliser la commande ethtool et son option -p (ou –identify) pour faire clignoter la diode d’activitée (celle des données) durant une durée déterminé.

Pour faire clignoter la carte eth0 pendant 5 seconde:

ethtool -p eth0 5

Pour faire clignoter la carte eth0 indéfiniment:

ethtool -p eth0

26 avril 2016 /

Le timestamp désigne le nombre de secondes écoulées depuis le 1er janvier 1970 à minuit UTC précise. Noter le temps de cette façon, indépendamment du fuseau horaire, est très pratique pour comparer des dates, mais cela s’avère difficile à lire pour l’utilisateur.

giphy

Heureusement, sous Linux on peut facilement y parvenir.

Pour obtenir le timestamp de la date et de l’heure courante :

date +%s

Pour avoir le timestamp d’une date précise:

date -d "2016-02-22 04:30:00" +%s

Et enfin, convertir un timestamp en date:

date -d @1461655272.314

25 avril 2016 /

[pastacode lang= »bash » manual= »yum%20-y%20install%20openssh-server » message= »Installation de Openssh » highlight= » » provider= »manual »/]

[pastacode lang= »bash » manual= »mkdir%20%2Fchroot_sftp » message= »Création du répertoire qui va accueillir le Chroot » highlight= » » provider= »manual »/]

[pastacode lang= »bash » manual= »ssh%20-V » message= »On s’assure d’avoir une version supérieur à la 4.9″ highlight= » » provider= »manual »/]

[pastacode lang= »bash » manual= »chown%20root%3Aroot%20%2Fchroot_sftp » message= »On s’assure que root:root est propriétaire » highlight= » » provider= »manual »/]

Le répertoire chrooté doit impérativement appartenir à root (login:groupe).
Pour un autre utilisateur voir l’option « bind » de la commande mount.

[pastacode lang= »bash » manual= »addgroup%20sftpusers » message= »Création du groupe sftpusers » highlight= » » provider= »manual »/]

[pastacode lang= »bash » manual= »vi%20%2Fetc%2Fssh%2Fsshd_config » message= »Configuration d’Openssh » highlight= » » provider= »manual »/]

Il faut préciser ici, que l’on utilise le serveur sftp interne à OpenSSH.
Nous activons également le chroot sur le répertoire /chroot_sftp pour tous les utilisateurs du groupe sftpusers et nous interdisons, par mesure de sécurité, la redirection X11 ainsi que le tunnel TCP.

On commence par commenter et modifie le paramètre « Subsystem »:

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

Puis on met ça juste à la fin du fichier :

 Match Group sftpusers
ChrootDirectory /chroot_sftp
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no

Le partie « Match » doit absolument se trouver à la fin du fichier comme on peut le voir dans le man de sshd_config.

Dans le paramètre « ChrootDirectory » on peut rajouter %u pour un répertoire portant le nom de l’utilisateur, ou simplement %h pour le répertoire /home de l’utilisateur

Match
Introduces a conditional block. If all of the criteria on the Match line are satisfied, the keywords on the following lines override those set in the global section of the config file, until either another Match line or the end of the file.

[pastacode lang= »bash » manual= »useradd%C2%A0%20–gid%20sftpusers%20–groups%20sftpusers%20-m%20–shell%20%2Fbin%2Ffalse%20-d%20%2Fchroot_sftp%20sftp1″ message= »Création du compte client sftp1″ highlight= » » provider= »manual »/]

[pastacode lang= »bash » manual= »mkdir%20%2Fchroot_sftp%2Fsftp1%0Achown%20sftp1%3Asftp1%20%2Fchroot_sftp%2Fsftp1%0Achmod%20700%20%2Fchroot_sftp%2Fsftp1″ message= »Création de son répertoire de travail sftp » highlight= » » provider= »manual »/]

[pastacode lang= »bash » manual= »%2Fetc%2Finit.d%2Fssh%20restart » message= »On relance ssh » highlight= » » provider= »manual »/]

[pastacode lang= »bash » manual= »systemctl%20restart%20sshd.service » message= »ou » highlight= » » provider= »manual »/]

[pastacode lang= »bash » manual= »sftp%20sftp1%40localhost » message= »Test de bon fonctionnement » highlight= » » provider= »manual »/]