This commit is contained in:
2022-06-28 11:52:58 +02:00
parent 4c64360318
commit 8815709fea
7 changed files with 0 additions and 316 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,19 +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
...
AllowUsers root@100.0.0.1 epsi
PasswordAuthentication no
sudo systemctl restart sshd

View File

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

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
}

View File

@@ -1,46 +0,0 @@
# 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*
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:
* Directive PermitRootLogin: n'autoriser que les connexions en root sans mot de passe.
* Directives AllowUser: n'autoriser que l'utilisateur epsi depuis n'importe quelle machine, ainsi que l'utilisateur root depuis l'adresse 100.0.0.1
* Directives PasswordAuthentication: 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