tp ssh : initial commit
This commit is contained in:
39
0eval.yml
Normal file
39
0eval.yml
Normal file
@@ -0,0 +1,39 @@
|
||||
---
|
||||
- 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
|
||||
1
README.txt
Normal file
1
README.txt
Normal file
@@ -0,0 +1 @@
|
||||
better run eval playbook with -f 1 to avoid result overwriting
|
||||
163
functions.sh
Normal file
163
functions.sh
Normal file
@@ -0,0 +1,163 @@
|
||||
#! /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
|
||||
}
|
||||
|
||||
47
tp_ssh.md
Normal file
47
tp_ssh.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# TP SSH
|
||||
|
||||
## Objectif
|
||||
|
||||
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
|
||||
|
||||
|
||||
## Authentification par clé
|
||||
|
||||
On va faire en sorte que la connexion ssh en tant qu'utilisateur epsi
|
||||
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*
|
||||
(vous pouvez utiliser la commande scp pour copier la clé)
|
||||
|
||||
Il sera peut-être nécessaire de créer le répertoire ~epsi/.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
|
||||
|
||||
### Validation:
|
||||
|
||||
Garder votre connexion ssh active.
|
||||
|
||||
Ouvrez une nouvelle connexion ssh: on doit vous demander la passphrase protégeant votre clé privée, si vous en avez définie une.
|
||||
|
||||
Si on vous demande un mot de passe de connexion vous avez raté une étape.
|
||||
|
||||
|
||||
## Renforcer la sécurité de ssh
|
||||
|
||||
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:
|
||||
|
||||
* interdir les connexions en root
|
||||
* n'autoriser que les membres du groupe wheel à se connecter
|
||||
* interdir l'authentification par mot de passe
|
||||
|
||||
### Validation:
|
||||
|
||||
Vous devez toujours pouvoir vous connecter en tant qu'utilisateur epsi
|
||||
|
||||
La connexion en root doit être refusée
|
||||
Reference in New Issue
Block a user