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é.