Update tuto 3

This commit is contained in:
nemunaire 2019-10-22 18:03:09 +02:00
parent 12b62208bd
commit beb834c01c
9 changed files with 1890 additions and 44 deletions

View File

@ -8,9 +8,10 @@ Les *capabilities*
Historiquement, dans la tradition UNIX, on distinguait deux catégories de Historiquement, dans la tradition UNIX, on distinguait deux catégories de
processus : processus :
* les processus *privilégiés* : dont l'identifiant de son utilisateur est 0 ; * les processus *privilégiés* : dont l'identifiant numérique de son utilisateur
* les processus *non-privilégiés* : dont l'identifiant de son utilisateur n'est est 0 ;
pas 0. * les processus *non-privilégiés* : dont l'identifiant numérique de son
utilisateur n'est pas 0.
Lors des différents tests de permission fait par le noyau, les processus Lors des différents tests de permission fait par le noyau, les processus
privilégiés outrepassaient ces tests, tandis que les autres devaient passer les privilégiés outrepassaient ces tests, tandis que les autres devaient passer les
@ -143,7 +144,7 @@ Ou, dans sa version plus lisible :
</div> </div>
## Exercice : visualisateur de capabilities d'un processus ## Exercice : visualisateur de capabilities d'un processus {-}
Écrivons maintenant un programme permettant de voir les *capabilities* Écrivons maintenant un programme permettant de voir les *capabilities*
d'un processus : d'un processus :
@ -190,7 +191,7 @@ Je vous recommande la lecture des *man* suivants :
Et de ces quelques articles : Et de ces quelques articles :
* [Secure Your Containers with this One Weird Trick](https://rhelblog.redhat.com/2016/10/17/secure-your-containers-with-this-one-weird-trick/) * [Secure Your Containers with this One Weird Trick](https://www.redhat.com/en/blog/secure-your-containers-one-weird-trick)
* [Guidelines for extended attributes](https://www.freedesktop.org/wiki/CommonExtendedAttributes/) * [Guidelines for extended attributes](https://www.freedesktop.org/wiki/CommonExtendedAttributes/)
* [File-based capabilities](https://lwn.net/Articles/211883/) * [File-based capabilities](https://lwn.net/Articles/211883/)
* [A bid to resurrect Linux capabilities](https://lwn.net/Articles/199004/) * [A bid to resurrect Linux capabilities](https://lwn.net/Articles/199004/)

View File

@ -93,7 +93,7 @@ fichier\newline `/sys/fs/cgroup/freezer/virli/freezer.state`.
Pour plus d'information sur les différents fichiers présents dans ce *cgroup*, Pour plus d'information sur les différents fichiers présents dans ce *cgroup*,
consultez consultez
[la documentation associée](https://www.kernel.org/doc/Documentation/cgroup-v1/freezer-subsystem.txt). [la documentation associée](https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/freezer-subsystem.html).
### Changement d'état ### Changement d'état
@ -221,7 +221,8 @@ Liste non exhaustive de données à monitorer :
* ... * ...
Tous les cgroups existants dans le dernier noyau publié ont leur documentation Tous les cgroups existants dans le dernier noyau publié ont leur documentation
accessible ici : <https://www.kernel.org/doc/Documentation/cgroup-v1/> accessible ici :
<https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/index.html>
### Permettre à l'utilisateur de monitorer des processus ### Permettre à l'utilisateur de monitorer des processus
@ -282,4 +283,4 @@ avait dans la v1. Davantage d'informations sont disponibles :
* [Understanding the new control groups API](https://lwn.net/Articles/679786/) * [Understanding the new control groups API](https://lwn.net/Articles/679786/)
; ;
* [Kernel Document about Control Group v2](https://www.kernel.org/doc/Documentation/cgroup-v2.txt). * [Kernel Document about Control Group v2](https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html).

46
tutorial/3/check.sh Executable file
View File

@ -0,0 +1,46 @@
#!/bin/sh
note_init() {
NOTE=0
echo -n $@
}
note() {
NOTE=$(($NOTE + $1))
echo -n ,$@
}
for LOGIN in $@
do
note_init $LOGIN
if [ -f "$LOGIN" ]; then
QUESTIONSF="$LOGIN"
else
QUESTIONSF="$LOGIN/questions.txt"
fi
# Questions
if grep -E -i "(grsec)" "${QUESTIONSF}" 2> /dev/null > /dev/null; then
note 1
else
note 0
fi
if grep -E -i "(/proc/.*/oom_|score)" "${QUESTIONSF}" 2> /dev/null > /dev/null; then
note 1
else
note 0
fi
if grep -E -i "root" "${QUESTIONSF}" 2> /dev/null > /dev/null; then
note 1
else
note 0
fi
echo #" = $NOTE"
done

View File

@ -58,7 +58,7 @@ l'utilisateur lors de l'installation) le système de base.
<div lang="en-US"> <div lang="en-US">
```bash ```bash
debootstrap jessie newroot/ http://httpredir.debian.org/debian/ debootstrap buster newroot/ http://httpredir.debian.org/debian/
``` ```
</div> </div>
@ -72,7 +72,7 @@ de base sous forme de tarball\ :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
wget http://gentoo.mirrors.ovh.net/gentoo-distfiles/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20181021T214502Z.tar.xz wget http://gentoo.mirrors.ovh.net/gentoo-distfiles/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20191020T214501Z.tar.xz
tar xpf stage3-amd64-*.tar.xz -C newroot/ tar xpf stage3-amd64-*.tar.xz -C newroot/
``` ```
</div> </div>

View File

@ -12,7 +12,7 @@ mémoire est donc utilisée de manière plus efficace.
[^vm-overcommit]: Dépendant de la valeur de `/proc/sys/vm/overcommit_memory`, [^vm-overcommit]: Dépendant de la valeur de `/proc/sys/vm/overcommit_memory`,
généralement 0. Voir généralement 0. Voir
<https://www.kernel.org/doc/Documentation/vm/overcommit-accounting>. <https://www.kernel.org/doc/html/latest/vm/overcommit-accounting.html>.
Mais évidemment, cela peut donner lieu à des situations où le noyau n'est plus Mais évidemment, cela peut donner lieu à des situations où le noyau n'est plus
en mesure de trouver de bloc physiquement disponible, alors qu'ils avaient en mesure de trouver de bloc physiquement disponible, alors qu'ils avaient
@ -48,5 +48,5 @@ Grâce à cette notification, il est possible de figer le processus pour
l'envoyer sur une autre machine. Et ainsi libérer la mémoire avant que l'OOM l'envoyer sur une autre machine. Et ainsi libérer la mémoire avant que l'OOM
killer ne passe. killer ne passe.
Jetez un œil à [cet article parru sur LVM](https://lwn.net/Articles/590960/) à Jetez un œil à [cet article parru sur LWN](https://lwn.net/Articles/590960/) à
ce sujet. ce sujet.

View File

@ -10,7 +10,7 @@ envoyé à une autre adresse et/ou non signé et/ou reçu après la correction n
sera pas pris en compte. sera pas pris en compte.
Par ailleurs, n'oubliez pas de répondre à Par ailleurs, n'oubliez pas de répondre à
[l'évaluation du cours](https://www.epitaf.fr/moodle/mod/quiz/view.php?id=40). [l'évaluation du cours](https://www.epitaf.fr/moodle/mod/quiz/view.php?id=308).
## Tarball ## Tarball
@ -24,9 +24,10 @@ pour chaque exercice) :
<div lang="en-US"> <div lang="en-US">
``` ```
login_x-TP3/
login_x-TP3/escape.c login_x-TP3/escape.c
login_x-TP3/procinfo.sh login_x-TP3/procinfo.sh
login_x-TP3/rev_kdb_leds.sh login_x-TP3/suspend_schedule.sh
login_x-TP3/view_caps.c login_x-TP3/view_caps.c
login_x-TP3/monitor.sh login_x-TP3/monitor.sh
login_x-TP3/monitor_init.sh login_x-TP3/monitor_init.sh

View File

@ -125,38 +125,14 @@ uts:[4026531838]
</div> </div>
### `rev_kdb_leds.sh`, `batinfo.sh`, `cpuinfo.sh` ### `batinfo.sh`, `cpuinfo.sh`
Explorons le pseudo système de fichiers `/sys` pour écrire un script Explorons le pseudo système de fichiers `/sys` pour écrire un script
qui va, en fonction de ce que vous avez de disponible : qui va, en fonction de ce que vous avez de disponible :
* inverser l'état des diodes de notre clavier ;
* nous afficher des statistiques sur notre batterie ; * nous afficher des statistiques sur notre batterie ;
* nous afficher des statistiques la fréquence de notre CPU. * nous afficher des statistiques la fréquence de notre CPU.
#### `rev_kdb_leds.sh`
Si vous avez :
* numlock On,
* capslock Off,
* scrolllock Off ;
Après avoir exécuté le script, nous devrions avoir :
* numlock Off,
* capslock On,
* scrolllock On.
Voici un exemple d'utilisation :
<div lang="en-US">
```
42sh$ ./rev_kdb_leds.sh input20
```
</div>
#### `batinfo.sh` #### `batinfo.sh`
Voici un exemple d'utilisation : Voici un exemple d'utilisation :
@ -207,3 +183,67 @@ Thermal throttle count: 0
</div> </div>
N'hésitez pas à rajouter toute sorte d'information intéressantes ! N'hésitez pas à rajouter toute sorte d'information intéressantes !
### `rev_kdb_leds.sh`, `suspend_schedule.sh`
Maintenant que vous savez lire des informations dans `/sys`, tentons d'aller
modifier le comportement de notre système. Au choix, réaliser l'un des scripts
suivant, en fonction du matériel dont vous disposez :
* inverser l'état des diodes de notre clavier ;
* mettre en veille votre machine, en ayant programmé une heure de réveil.
#### `rev_kdb_leds.sh`
Si vous avez :
* numlock On,
* capslock Off,
* scrolllock Off ;
Après avoir exécuté le script, nous devrions avoir :
* numlock Off,
* capslock On,
* scrolllock On.
Voici un exemple d'utilisation :
<div lang="en-US">
```
42sh# ./rev_kdb_leds.sh input20
```
</div>
`input20` correspond à l'identifiant de votre clavier, sous
`/sys/class/input/`.
#### `suspend_schedule.sh`
Votre script prendra en argument l'heure à laquelle votre machine doit être
réveillée, avant de la mettre effectivement en veille.
Bien sûr, vous ne devez utiliser que des écritures (et des lectures) dans le
système de fichiers `/sys`. Il n'est pas question de faire appel à un autre
programme (vous pourriez cependant avoir besoin de `date(1)` pour faire les
calculs horaires).
Voici un exemple d'utilisation :
<div lang="en-US">
```
42sh# ./suspend_schedule.sh 15:42
```
</div>
Vous aurez besoin de définir une alarme au niveau de votre RTC, via le
fichier : `/sys/class/rtc/rtcX/wakealarm`.
Attention au fuseau horaire utilisé par votre RTC, si votre système principal
est Windows, elle utilisera sans doute le fuseau horaire courant. Sinon, ce
sera UTC.
Un article très complet sur le sujet est disponible ici :
<https://www.linux.com/tutorials/wake-linux-rtc-alarm-clock/>

View File

@ -3,7 +3,7 @@ title: Virtualisation légère -- TP n^o^ 3
subtitle: Linux Internals partie 1 subtitle: Linux Internals partie 1
author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps} author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps}
institute: EPITA institute: EPITA
date: Mercredi 24 octobre 2018 date: Mercredi 23 octobre 2019
abstract: | abstract: |
Ce premier TP consacré aux Linux Internals va nous permettre Ce premier TP consacré aux Linux Internals va nous permettre
d'appréhender les notions de pseudos systèmes de fichiers, de d'appréhender les notions de pseudos systèmes de fichiers, de
@ -12,14 +12,14 @@ abstract: |
\vspace{1em} \vspace{1em}
Certains éléments de ce TP sont à rendre à <virli@nemunai.re> au Certains éléments de ce TP sont à rendre à <virli@nemunai.re> au
plus tard le mercredi 7 novembre 2018 à 12 h 42. Consultez la plus tard le mercredi 6 novembre 2019 à 13 h 42. Consultez la
dernière section de chaque partie pour plus d'information sur les dernière section de chaque partie pour plus d'information sur les
éléments à rendre. éléments à rendre.
En tant que personnes sensibilisées à la sécurité des échanges En tant que personnes sensibilisées à la sécurité des échanges
électroniques, vous devrez m'envoyer vos rendus signés avec votre électroniques, vous devrez m'envoyer vos rendus signés avec votre
clef PGP. Pensez à clef PGP. Pensez à
[me](https://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96) [me](https://keys.openpgp.org/search?q=nemunaire%40nemunai.re)
faire signer votre clef et n'hésitez pas à [faire signer votre faire signer votre clef et n'hésitez pas à [faire signer la
clef](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/). votre](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/).
... ...

1757
tutorial/3/tutorial.tex Normal file

File diff suppressed because it is too large Load Diff