Compare commits

6 Commits

Author SHA1 Message Date
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 18 additions and 278 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

@@ -6,21 +6,21 @@ Renforcer la sécurité des accès
## Prérequis:
Le compte epsi doit avoir été créé (tp prise en main) et disposer d'un mot de passe
Le compte formation doit avoir été créé (tp prise en main) et disposer d'un mot de passe
## 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 formation
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 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 *~formation/.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 ~formation/.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 à formation et avoir les permissions 700 le fichier authorized_keys doit appartenir à formation et avoir les permissions 600
### Validation:
@@ -41,6 +41,17 @@ Une fois que l'authentification par clé fonctionne, modifiez la configuration d
### Validation:
Vous devez toujours pouvoir vous connecter en tant qu'utilisateur epsi
Vous devez toujours pouvoir vous connecter en tant qu'utilisateur formation
La connexion en root doit être refusée
La connexion en root doit être refusée
## Finalisation
Mettez au point au format 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
}