51 votes

Linux : mise en place d'un administrateur système à distance

De temps en temps, on me demande de fournir une assistance à distance, un dépannage et/ou un réglage des performances sur les systèmes Linux.

Les grandes entreprises disposent souvent déjà de procédures bien établies pour fournir un accès à distance aux vendeurs/fournisseurs et je n'ai qu'à me conformer à ces procédures. (Pour le meilleur ou pour le pire).

D'autre part, les petites entreprises et les particuliers se tournent invariablement vers moi pour que je leur explique ce qu'ils doivent faire pour me mettre en place. En général, leurs serveurs sont directement connectés à l'internet et les mesures de sécurité existantes sont les valeurs par défaut de leur distribution Linux.

Presque toujours, j'aurai besoin d'un accès au niveau racine et la personne qui configurera l'accès pour moi n'est pas un expert en administration système. Je ne veux pas de leur mot de passe root et je suis également presque sûr que mes actions ne sera pas malveillante, mais quelles instructions raisonnablement simples devrais-je donner à.. :

  • créer un compte et échanger des informations d'identification en toute sécurité
  • mettre en place l'accès root (sudo)
  • restreindre l'accès à mon compte
  • fournir une piste d'audit

(Et oui, je suis conscient et je préviens toujours ces clients qu'une fois que j'ai un accès administrateur, il est trivial de cacher toute action malveillante, mais supposons que je n'ai rien à cacher et que je participe activement à la création d'une piste d'audit).

Qu'est-ce qui peut être amélioré dans les étapes ci-dessous ?


Mon jeu d'instructions actuel :

créer un compte et échanger des informations d'identification en toute sécurité

Je fournis un hachage du mot de passe et je demande que mon compte soit configuré avec ce mot de passe crypté, de sorte que nous n'aurons pas besoin de transmettre un mot de passe en clair, que je serai le seul à connaître le mot de passe et que nous ne commencerons pas avec un mot de passe faible et prévisible.

sudo useradd -p '$1$********' hbruijn

Je fournis une clé publique SSH (paire de clés spécifique par client) et je demande à ce qu'ils configurent mon compte avec cette clé :

sudo su - hbruijn
mkdir -p ~/.ssh
chmod 0700 ~/.ssh
echo 'from="10.80.0.0/14,192.168.1.2" ssh-rsa AAAAB3NzaC1y***...***== hbruijn@serverfault' >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys 

mettre en place l'accès root (sudo)

Je demande au client d'installer sudo pour moi avec sudo sudoedit ou en utilisant leur éditeur favori et en l'ajoutant à /etc/sudoers :

hbruijn ALL=(ALL) ALL

restreindre l'accès à mon compte

Généralement, le client autorise encore les connexions par mot de passe et je lui demande d'ajouter les deux lignes suivantes au fichier /etc/ssh/sshd_config pour au moins restreindre mon compte aux seules clés SSH :

Match user hbruijn
PasswordAuthentication no

En fonction du client, j'acheminerai tous mes accès SSH via un seul hôte bastion afin de toujours fournir une seule adresse IP statique (par exemple 192.168.1.2) et/ou de fournir la plage d'adresses IP utilisée par mon fournisseur d'accès (par exemple 10.80.0.0/14). Le client peut avoir besoin d'ajouter ces adresses à une liste blanche de pare-feu si l'accès SSH est restreint (la plupart du temps, SSH n'est pas filtré).

Vous avez déjà vu ces adresses IP comme étant les adresses from= dans le cadre de la ~.ssh/authorized_keys qui limite les hôtes à partir desquels ma clé peut être utilisée pour accéder à leurs systèmes.

fournir une piste d'audit

Jusqu'à présent, aucun client ne m'a demandé cela, et je n'ai rien fait de spécifique au-delà de ce qui suit pour couvrir mes arrières :

J'essaie d'utiliser systématiquement sudo avec des commandes individuelles et essayez d'éviter d'utiliser des sudo -i o sudo su - . J'essaie de ne pas utiliser sudo vim /path/to/file mais utiliser sudoedit au lieu de cela.

Par défaut, toutes les actions privilégiées seront alors enregistrées dans syslog (et /var/log/secure ):

Sep 26 11:00:03 hostname sudo:  hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=jboss ; COMMAND=sudoedit /usr/share/jbossas/domain/configuration/domain.xml  
Sep 26 11:00:34 hostname sudo:  hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/messages

J'ai pratiquement renoncé à personnaliser mes environnements de travail, la seule chose que je fais vraiment est de définir les éléments suivants dans mon ~/.bash_profile d'augmenter l'historique de bash et d'inclure les horodatages :

export HISTSIZE=99999999999
export HISTFILESIZE=99999999999
export HISTIGNORE="w:ls:ls -lart:dmesg:history:fg"
export HISTTIMEFORMAT='%F %H:%M:%S  '
shopt -s histappend

8 votes

Vous pouvez enregistrer (facilement modifiable a posteriori) et même partager des sessions en screen Ainsi, dans les cas extrêmes, votre client peut suivre en direct ce que vous faites.

0 votes

Si vous souhaitez améliorer la piste d'audit, vous devez leur demander d'activer la journalisation à distance s'ils en ont la possibilité.

24voto

faker Points 17246

La seule chose qui me vient à l'esprit serait d'ajouter --expiredate à la adduser appel.
Le client sait ainsi que son accès expirera automatiquement à une date déterminée.

Il doit toujours vous faire confiance car vous avez un accès root et vous pouvez toujours supprimer le drapeau d'expiration.

16voto

user9517 Points 113163

Vous pouvez enregistrer vos sessions avec le script(1) de l'utilitaire.

$ script session.log
Script started, file is session.log
$ ls
file1  session.log
exit
Script done, file is session.log

では tout se trouve dans le fichier session.log.

0 votes

Recommanderiez-vous de l'exécuter sur votre propre hôte, avant de démarrer la session ssh vers un système distant, ou de l'inclure dans mon profil sur le système distant ?

1 votes

Je suppose que vous pouvez faire l'un ou l'autre - je ne l'ai utilisé qu'une seule fois et la plupart du temps, les gens s'en moquent.

7voto

user1026169 Points 533

Comme vous vous connectez déjà à l'aide d'une clé publique SSH, il serait plus simple de ne pas fournir de hachage de mot de passe. adduser --disabled-password (de manière équivalente, useradd -p '!' (je pense), ce qui équivaut en fait à PasswordAuthentication no pour ce compte, et il n'y a aucune chance que quelqu'un espionnant votre courrier électronique puisse forcer le hachage du mot de passe et se connecter en votre nom.

3 votes

L'ajout de la Match user hbruijn \n PasswordAuthentication no à sshd_config devrait empêcher quiconque de se connecter à distance avec mon mot de passe décrypté (les utilisateurs locaux pourraient éventuellement l'utiliser avec la fonction su - hbruijn ) mais pour autant que je sache, je dois toujours avoir un mot de passe valide pour sudo Cependant, les objectifs ne sont pas les mêmes. Peut-être devrais-je simplement réinitialiser mon mot de passe après m'être connecté ?

0 votes

Oh, bon point pour sudo. Je ne suis pas sûr qu'un compte dans --disabled-password peut recevoir un mot de passe en exécutant la commande passwd de ce compte.

0 votes

De plus, qu'est-ce qui empêche quiconque d'écouter le hachage du mot de passe que vous fournissez ? Cette partie est un maillon faible qui compromet l'utilisation des clés ssh où il n'y a pas d'importance si votre clé publique est interceptée.

3voto

Jens Timmerman Points 866

Pourquoi fournir un mot de passe si vous utilisez des clés publiques/privées.

Les clés publiques sont destinées à être partagées. C'est donc elles qu'il faut utiliser pour échanger des informations d'identification en toute sécurité, et non des mots de passe hachés.

sudo useradd --disabled-password hbruijn

Lorsque vous envoyez votre clé publique, vérifiez l'empreinte digitale par un second canal, comme un appel téléphonique, afin de vous assurer que personne ne l'a modifiée en cours de route.

Puisque vous n'aurez plus de mot de passe pour utiliser sudo, vous devez également modifier votre ligne dans le fichier sudoers en

hbruijn ALL=(ALL) NOPASSWD:ALL

Si vous n'êtes pas à l'aise avec l'absence de mot de passe pour sudo, et que vous voulez vraiment un mot de passe, il n'est toujours pas nécessaire d'envoyer votre mot de passe haché, laissez le compte être créé sans mot de passe, définissez votre clé publique, et une fois que votre compte est configuré, vous pouvez vous connecter via ssh et lancer passwd pour définir votre propre mot de passe.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X