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