Compare commits

7 Commits

Author SHA1 Message Date
c21c1589de version sub3 2025-10-22 17:20:54 +02:00
76e333eab8 ajout redaction procedure 2025-03-20 08:13:35 +01:00
4beaf6d108 remove allowuser 2024-10-04 12:27:20 +02:00
559c1d7ea8 switch to debian 2024-09-27 12:39:10 +02:00
8815709fea enonce 2022-06-28 11:52:58 +02:00
4c64360318 enonce 2022-06-28 11:45:34 +02:00
a74c3d2d29 mise au point enonce, ssh root ok depuis alpine 2020-10-05 11:35:06 +02:00
7 changed files with 24 additions and 280 deletions

View File

@@ -1,39 +0,0 @@
---
- hosts: b1
user: root
gather_facts: false
vars_prompt:
- name: script
prompt: "script? "
private: false
- name: result_file
prompt: "result file ? "
private: false
pre_tasks:
- name: insert header
lineinfile:
path: "{{ result_file }}"
line: "machine\tuser\tquestions.."
state: present
create: true
delegate_to: localhost
tasks:
- name: copy script
copy:
src: "{{ script }}"
dest: /root
mode: 0700
- name: exec script
command: "/root/{{ script }}"
register: result
post_tasks:
- name: get result
lineinfile:
path: "{{ result_file }}"
line: "{{ result.stdout }}"
create: true
delegate_to: localhost

View File

@@ -1,20 +0,0 @@
## Sur votre windows dans un terminal
ssh-keygen
scp -P #machine .ssh\.id_rsa.pub epsi@cours.opendoor.fr:
## Sur le container connecté en tant qu'utilisateur epsi
mkdir -pm 0700 ~/.ssh
cat id_rsa.pub >> .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
sudo vim /etc/ssh/sshd_config
...
PermitRootLogin without-password
...
AllowGroups wheel root
AllowUsers root@100.0.0.1
PasswordAuthentication no
sudo systemctl restart sshd

View File

@@ -1 +0,0 @@
better run eval playbook with -f 1 to avoid result overwriting

View File

@@ -4,23 +4,27 @@
Renforcer la sécurité des accès Renforcer la sécurité des accès
## Prérequis: ## Compte utilisateur dédié aux opération d'administration
Le compte epsi doit avoir été créé (tp prise en main) et disposer d'un mot de passe Créer un compte utilisateur standard
- login: sub3
- répertoire personnel (doit exister) /home/sub3
- mot de passe: de votre choix ( -1 point à chaque demande de réinitialisation)
- membre du groupe _sudo_
## Authentification par clé ## Authentification par clé
On va faire en sorte que la connexion ssh en tant qu'utilisateur epsi On va faire en sorte que la connexion ssh en tant qu'utilisateur sub3
se fasse par clé publique et non pas par mot de passe. se fasse par clé publique et non pas par mot de passe.
_sur votre machine_: utiliser la commande ssh-keygen (ou le programme puttygen) si votre windows n'est pas équipé d'un client ssh natif pour générer une paire de clé publique / clé privée. _sur votre machine_: utiliser la commande ssh-keygen (ou le programme puttygen) si votre windows n'est pas équipé d'un client ssh natif pour générer une paire de clé publique / clé privée.
_sur le container_: il faut rajouter la clé publique (le contenu du fichier id_rsa.pub se trouvant sur *votre* machine) dans le fichier *~epsi/.ssh/authorized_keys* _sur le container_: il faut rajouter la clé publique (le contenu du fichier id_rsa.pub se trouvant sur *votre* machine) dans le fichier *~sub3/.ssh/authorized_keys*
Il sera peut-être nécessaire de créer le répertoire ~epsi/.ssh Il sera peut-être nécessaire de créer le répertoire ~sub3/.ssh
Attention au permissions: ce répertoire doit appartenir à epsi et avoir les permissions 700 le fichier authorized_keys doit appartenir à epsi et avoir les permissions 600 Attention au permissions: ce répertoire doit appartenir à sub3 et avoir les permissions 700 le fichier authorized_keys doit appartenir à sub3 et avoir les permissions 600
### Validation: ### Validation:
@@ -36,11 +40,22 @@ Si on vous demande un mot de passe de connexion vous avez raté une étape.
Une fois que l'authentification par clé fonctionne, modifiez la configuration du serveur ssh ( fichier /etc/ssh/sshd_config, page de man sshd_config) pour: Une fois que l'authentification par clé fonctionne, modifiez la configuration du serveur ssh ( fichier /etc/ssh/sshd_config, page de man sshd_config) pour:
* Directive PermitRootLogin: n'autoriser que les connexions en root sans mot de passe. * Directive PermitRootLogin: n'autoriser que les connexions en root sans mot de passe.
* Directives AllowGroups et AllowUser: n'autoriser que les membres des groupes et root wheel à se connecter ET l'utilisateur root depuis l'adresse 100.0.0.1 * Directives AllowGroups : n'autoriser que les membres des groupes root et sudo à se connecter
* Directives PasswordAuthentication: interdir l'authentification par mot de passe * Directives PasswordAuthentication: interdir l'authentification par mot de passe
### Validation: ### Validation:
Vous devez toujours pouvoir vous connecter en tant qu'utilisateur epsi Vous devez toujours pouvoir vous connecter en tant qu'utilisateur sub3
La connexion en root doit être refusée La connexion en root doit être refusée
## Finalisation
Mettez au point au format md dans ~/sub3/ssh.md la procédure décrivant :
* la création d'une paire de clés
* les conséquences d'avoir une clé privée non protégée par une passphrase
* les étapes à réaliser pour que l'utilisateur puisse se connecter avec cette paire de clés sur une machine distante.
La procédure distinguera clairement sur quelle machine (client ou distante) chaque opération doit être faite.
Elle précisera les points de vigilance à avoir pour éviter toute erreur (et les pistes pour diagnostiquer et corriger ces erreurs)

12
eval.sh
View File

@@ -1,12 +0,0 @@
#! /bin/bash
# this script is meant to be run by ansible
source functions.sh
# check that alias has been tried
addHeader
fileMustContain ~epsi/.ssh/authorized_keys 'ssh-rsa'
fileMustContain ~epsi/.ssh/authorized_keys 'tom@workine'
fileMustContain /etc/ssh/sshd_config ' Allow(Groups|Users)'
fileMustContain /etc/ssh/sshd_config "^PermitRootLogin no"
fileMustContain /etc/ssh/sshd_config "^PasswordAuthentication no"

View File

@@ -1,36 +0,0 @@
---
- hosts:
- b2
gather_facts: false
vars:
result_file: "tp_ssh.csv"
pre_tasks:
- name: insert header
lineinfile:
path: "{{ result_file }}"
line: "machine\tuser\tauth keys etu\tauth key tom\tallow groups/user\tpermit root login\tpassword auth"
state: present
create: true
delegate_to: localhost
tasks:
- name: copy script
copy:
src: "{{ item }}"
dest: /root
mode: 0700
loop:
- functions.sh
- eval.sh
- name: exec script
command: /root/eval.sh
register: result
- name: get result
lineinfile:
path: "{{ result_file }}"
line: "{{ result.stdout }}"
create: true
delegate_to: localhost

View File

@@ -1,163 +0,0 @@
#! /bin/bash
#ok if given program returns given code
# arg1: program to run
# arg2: expected return code (default 0)
function exitCodeOk {
program=$1
code=${2:=0}
$program &> /dev/null
if [ $? -eq $code ] ; then echo -ne "1\t" ; else echo -ne "0\t" ; fi
}
#Ok if file size > X
# arg1: file
# arg2: min size
function fileBiggerThan {
if [ ! -f $1 ] ; then echo -ne "0\t" ; return 0 ; fi
filesize=$(stat --format "%s" $1)
if [ $filesize -lt $2 ] ; then echo -ne "0\t" ; else echo -ne "1\t" ; fi
}
#Ok if file exists
# arg1: file to check
function fileMustExist {
if [ -f ${1} ] ; then echo -ne "1\t"
else echo -ne "0\t"
fi
}
#Ok if file DOESNOT exists
# arg1: file to check
function fileMustNOTExist {
if [ -f ${1} ] ; then echo -ne "0\t"
else echo -ne "1\t"
fi
}
#Ok if dir exists
# arg1: dir to check
function dirMustExist {
if [ -d ${1} ] ; then echo -ne "1\t"
else echo -ne "0\t"
fi
}
# Ok if given dir DOESNOT exists
# arg1: dir
function dirMustNOTExist {
if [ -d ${1} ] ; then echo -ne "0\t"
else echo -ne "1\t"
fi
}
# Ok if file contains at least one occurence of pattern
# arg1: file
# arg2: pattern
function fileMustContain {
file=$1
shift
string=$@
if [ ! -f $file ] ; then echo -ne "0\t" ; return 0 ;fi
if ( grep -i -qE "${string}" $file ) ;
then echo -ne "1\t"
else
echo -ne "0\t"
fi
}
# Return num of occurences of pattern
# arg1: file
# arg2: pattern
function fileCountPattern {
file=$1
shift
string=$@
if [ ! -f $file ] ; then echo -ne "0\t" ; return 0 ;fi
num=$(grep -ciE "${string}" $file )
echo -ne "$num\t"
}
# Ok if file contains N pattern
# arg1: file
# arg2: num of expected item
# arg3: pattern
function fileMustContainNItem {
file=$1
n=$2
shift
string=$@
if [ ! -f $file ] ; then echo -ne "0\t" ; return 0 ;fi
num=$(grep -ciE "${string}" $file )
if [ $num -eq $1 ] ;
then echo -ne "1\t"
else
echo -ne "0\t"
fi
}
# Ok if file DOESNOT contain pattern
# Arg1: file
# ArgN: pattern
function fileMustNOTContain {
file=$1
shift
string=$@
if [ ! -f $file ] ; then echo -ne "0\t" ; return 0 ; fi
if ( grep -i -qE "${string}" $file ) ;
then echo -ne "0\t"
else
echo -ne "1\t"
fi
}
# insert hostname at beginning of result line
function addHeader {
test -f /etc/motd && user="$(cat /etc/motd | sed 's/\n//')\t"
echo -ne "${user}$(hostname -s)\t"
}
# Ok if given package is installed
# arg1: pkg to check
function pkgInstalled {
pkglist=/tmp/pkg.list
test -f $pkglist || rpm -qa > $pkglist
if ( grep -qi $1 $pkglist ) ; then echo -ne "1\t" ; else echo -ne "0\t" ; fi
}
# ok if given process is running
# arg1: process to check
function processIsRunning {
if ( pgrep -f $1 &> /dev/null ) ; then echo -ne "1\t" ; else echo -ne "0\t" ; fi
}
#Ok if given command returns 0
# arg1: command to be run
function commandIsWorking {
command=$1
if ( $command &> /dev/null ) ; then echo -ne "1\t" ; else echo -ne "0\t" ; fi
}
# ok if given pattern is detected on command's stdout or stderr
# arg1: command
# arg2: pattern
function commandStdoutPattern {
command=$1
shift
pattern=$@
if ( $command 2>&1 | grep -qiE "${pattern}" ) ; then echo -ne "1\t" ; else echo -ne "0\t" ; fi
}
# ok if given service is enabled
# arg1: service
function serviceIsEnabled {
service=$1
if ( systemctl is-enabled $1 &> /dev/null ) ; then echo -ne "1\t" ; else echo -ne "0\t" ; fi
}
# ok if given service is active
# arg1: service
function serviceIsActive {
service=$1
if ( systemctl is-active $1 &> /dev/null ) ; then echo -ne "1\t" ; else echo -ne "0\t" ; fi
}