L’authentification par clé publique est un « must » de sshd par rapport à l’utilisation des mots de passe. Or, bien souvent, les utilisateurs sont définis dans un annuaire LDAP. Le problème devient alors : où stocker les clés publiques des utilisateurs ?
Si la réponse est : dans chaque répertoire de tous les utilisateurs, sur toutes les machines auxquelles ils ont accès, je gage que vous devrez utiliser des outils de déploiement pour éviter cette tâche fastidieuse…
Mais puisque vous avez un annuaire : pourquoi ne pas stocker les clés dans l’annuaire ?
Cette opération est réalisée en 3 étapes :
Enrichir le schéma de l’annuaire
avec OpenLDAP, il fut ajouter la configuration :
dn: cn=openssh-lpk,cn=schema,cn=config objectClass: olcSchemaConfig cn: openssh-lpk olcAttributeTypes: ( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey' DESC 'MANDATORY: OpenSSH Public key' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 ) olcObjectClasses: ( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey' SUP top AUXILIARY DESC 'MANDATORY: OpenSSH LPK objectclass' MAY ( sshPublicKey $ uid ) )
Configurer le démon sshd pour qu’il récupère indirectement les clés publiques
Pour cela, ajoutez les deux lignes suivantes dans /etc/ssh/sshd_config :
AuthorizedKeysCommand /etc/ssh/ldap-auth-keys.sh AuthorizedKeysCommandUser nobody
Vérifiez que l’utilisateur « nobody » existe.
Lors d’une authentification par clé publique, sshd va lancer la commande /etc/ssh/ldap-auth-keys.sh en lui passant le nom de l’utilisateur en paramètre. Cette commande doit retourner la ou les clés publiques associées à l’utilisateur dans l’annuaire, s’il y en a.
Ecrire la commande /etc/ssh/ldap-auth-keys.sh
Le script adéquat peut contenir la commande suivante :
ldapsearch -x '(&(objectClass=posixAccount)(uid='"$1"'))' 'sshPublicKey' | sed -n '/^ /{H;d};/sshPublicKey:/x;$g;s/\n *//g;s/sshPublicKey: //gp'
Maintenant les tests !
Conservez une connexion ssh active sur le serveur et faite un « reload » : si le démon ne redémarre pas, faites un « start » pour avoir l’erreur sur l’écran…
Je n’applique pas toujours les « bonnes » pratiques concernant la mise en gestion de configuration et il m’arrive souvent de créer un dépôt GIT après avoir validé une maquette…et j’oublie toujours les commandes qui me permettent de créer le nouveau dépôt à partir des sources pré-existants. Alors, pour ne plus oublier, je les liste ici.
Je suppose que tous les sources et fichiers à mettre dans GIT sont dans le répertoire ./monappli. Les commandes à exécuter sont :
1.Initialisation du dépôt local :
$ cd ./monapp $ git init
2.A ce moment là, nous vous suggérons de créer le fichier .gitignore
3.On ajoute les fichiers dans le dépôt local :
$ git add .
4.Puis on les « commit » :
$ git commit -m "commit initial"
5.Au besoin, on définit le dépôt GIT distant :
$ git remote add origin URL_du_dépôt_distant
6.Enfin, on met à jour le dépôt distant à partir du dépôt local :
$ git push origin master
Les CMS comme WordPress, Joomla ! et les autres sont des outils puissants et pratiques, mais ils sont largement bugués et doivent être mis à jour très fréquemment. Ceci est d’autant plus vrai que les administrateurs ajoutent de nombreux plugins de plus ou moins bonne qualité.
D’ailleurs, encore combien de temps avant que notre site ne soit piraté ?
Nous avons été sollicités à de nombreuses reprises par des Clients qui constataient des anomalies sur leur site : souvent des pirates ont profité d’une faille pour écrire ou ré-écrire un script PHP du CMS. Ces scripts utilisent alors les fonctions de messagerie de PHP pour spammer la planète.
La question est : comment retrouver le script fautif ?
La réponse est dans le manuel de PHP : modifiez les valeurs des paramètres suivants afin de tracer les scripts qui envoient du mail et le tour est joué !
mail.add_x_header = On mail.log = /chemin/vers/mail.log
Notez que le fichier vers le log doit être accessible en écriture par le serveur Apache/Nginx.
Tout Unixien sait bien que la taille d’un répertoire, obtenue par la commande « ls -lhd /chemin/vers/rep », ne donne pas la taille du contenu du répertoire, taille qu’on obtiendrait par la commande « du -sh /chemin/vers/repertoire ».
La « taille » d’un répertoire (au sens « ls -lhd ») est fonction du nombre de fichiers qu’il contient, que ces fichiers soient volumineux ou non. Ainsi, quand vous créez un répertoire, sa taille est initialement de 4 Ko, puis passe à 8, 16, 24 Ko…. si de nouveaux fichiers sont créés dans ce répertoire.
Votre serveur – qui n’est pas (encore) virtualisé – dispose de plusieurs cartes réseau Ethernet : comment distinguer chacune des cartes eth0, eth1, … ?