Outils pour utilisateurs

Outils du site


blog

Snapshot LVM

Voir :

  • btrfs
  • Stratis
  • nilfs2
2025/03/24 15:06

Snapshot de process avec criu

CRIU avec Docker tmux

Source : https://github.com/jpetazzo/critmux

Démo ici : https://asciinema.org/a/9889

docker run -t -i --privileged --name critmux jpetazzo/critmux
docker stop critmux
docker start critmux ; docker attach critmux

Brouillon

wget http://ftp.fr.debian.org/debian/pool/main/c/criu/criu_1.6.1-1_amd64.deb
sha256sum criu_1.6.1-1_amd64.deb

Le nombre en hexadécimal retourné par sha256sum doit être le même que celui figurant sur la page https://packages.debian.org/experimental/amd64/criu/download

78c1acc0fa73e7b7843945f314802760c485557a927f9f886489d0ccb823fc87  criu_1.6.1-1_amd64.deb
dpki -i criu_1.6.1-1_amd64.deb
apt-get -f install
# mkdir checkpoint
# criu dump -D checkpoint -t $(pgrep iceweasel) --file-locks
Error (sk-inet.c:141): Connected TCP socket, consider using tcp-established option.
Error (cr-dump.c:1584): Dump files (pid: 17543) failed with -1
Error (cr-dump.c:1947): Dumping FAILED.

On compile newns (voir http://criu.org/VNC)

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/mount.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/param.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <signal.h>
#include <sched.h>
 
#define STACK_SIZE	(8 * 4096)
 
static int ac;
static char **av;
static int ns_exec(void *_arg)
{
	int fd;
 
	fd = open("newns.log", O_CREAT | O_TRUNC | O_RDWR | O_APPEND, 0600);
	if (fd >= 0) {
		close(0);
		dup2(fd, 1);
		dup2(fd, 2);
		close(fd);
	}
 
	setsid();
	execvp(av[1], av + 1);
	return 1;
}
 
int main(int argc, char **argv)
{
	void *stack;
	int ret;
	pid_t pid;
 
	ac = argc;
	av = argv;
 
	stack = mmap(NULL, STACK_SIZE, PROT_WRITE | PROT_READ,
			MAP_PRIVATE | MAP_GROWSDOWN | MAP_ANONYMOUS, -1, 0);
	if (stack == MAP_FAILED) {
		fprintf(stderr, "Can't map stack %m\n");
		exit(1);
	}
	pid = clone(ns_exec, stack + STACK_SIZE,
			CLONE_NEWPID | CLONE_NEWIPC | SIGCHLD, NULL);
	if (pid < 0) {
		fprintf(stderr, "clone() failed: %m\n");
		exit(1);
	}
	return 0;
}
gcc newns.c -o newns
mv newns /usr/local/bin/
chmod +x /usr/local/bin/newns
$ newns iceweasel
clone() failed: Operation not permitted

Voir https://github.com/lxc/lxc/issues/261

J'ai essayé : Sans succès !

echo 1 > /sys/fs/cgroup/cpu,cpuacct/cgroup.clone_children 
echo 1 > /proc/sys/kernel/unprivileged_userns_clone

Analysons

$ strace newns 2>&1 | grep -i clone
clone(child_stack=0x7f105164fff0, flags=CLONE_NEWIPC|CLONE_NEWPID|SIGCHLD) = -1 EPERM (Operation not permitted)
write(2, "clone() failed: Operation not pe"..., 40clone() failed: Operation not permitted
2025/03/24 15:06

Snap snapd le gestionnaire de paquet multi distro

Voir :

Voir aussi :

Install de Snap

sudo apt update
sudo apt install snapd
 
## get the latest snapd
# sudo snap install snapd
 
sudo snap install core

Test

snap install hello-world

Config proxy

sudo -E snap set system proxy.http="$http_proxy"
sudo -E snap set system proxy.https="$https_proxy"

Sous Ubuntu 18.04

# snap list
Name                  Version         Rev   Tracking  Publisher    Notes
core                  16-2.35.5       5742  stable    canonical✓   core
gnome-3-26-1604       3.26.0          74    stable/…  canonical✓   -
gnome-calculator      3.30.1          260   stable/…  canonical✓   -
gnome-characters      3.30.0          139   stable/…  canonical✓   -
gnome-logs            3.30.0          45    stable/…  canonical✓   -
gnome-system-monitor  3.30.0          57    stable/…  canonical✓   -
gtk-common-themes     0.1-4-g88bc1b2  818   stable/…  canonical✓   -
rocketchat-desktop    2.7.0           4     stable    rocketchat✓  -

Install un paquet

sudo snap find notepad
# snap info notepad-plus-plus
sudo snap install notepad-plus-plus
sudo snap install --classic notepadqq

Mise à jour

sudo snap refresh --list
sudo snap refresh

Lancer une application

$ snap list
Name               Version  Rev    Tracking       Publisher   Notes
core               16-2.48  10444  latest/stable  canonical✓ core
pycharm-community  2020.3   222    latest/stable  jetbrains✓ classic

$ snap run pycharm-community &

Redémarrer un service

snap stop multipass
snap start multipass

Logs

journalctl --unit 'snap.multipass*'

Autres

Autre

snap install core
sudo snap refresh core

Remove

apt-get -y autoremove --purge snapd snap-confine snapd ubuntu-core-launcher squashfs-tools

Accès à /etc /var … (mais toujours pas /tmp)

snap install --devmode gedit
snap connect vlc:removable-media
2025/03/24 15:06

Signer des fichiers

Avec ssh_keygen

Avec OpenSSL

Création de la paire de clefs

Génération de la clef privé

openssl genrsa -out priv.pem 4096

Génération de la clef public

openssl rsa -in priv.pem -pubout -out public.pem
Signer
openssl dgst -sha256 -sign priv.pem -out plop.txt.sha256 plop.txt
openssl base64 -in plop.txt.sha256 -out /tmp/plop.txt.sign
Vérifier la signature
openssl base64 -d -in plop.txt.sign -out /tmp/plop.txt.sha256
openssl dgst -sha256 -verify public.pem -signature plop.txt.sha256 plop.txt

Exemple de script pour signer

Ce script crée un fichier contenant une date Ce fichier date est signé

La signature est vérifiée Un délais est défini au delà duquel il est considéré comme expiré.

poc_crypto_sign.sh

#! /bin/bash
 
set -o nounset
 
DELAY=60
 
KEY_PRIV=priv.pem
KEY_PUB=public.pem
SIGN_FILE=plop.txt.sign
TMP_SIGN_FILE=/tmp/plop.txt.sha256
DATA_FILE=plop.txt
 
enc_create_key_priv() {
        openssl genrsa -out "$KEY_PRIV" 4096
}
 
enc_create_key_pub() {
        openssl rsa -in "$KEY_PRIV" -pubout -out "$KEY_PUB"
}
 
enc_sign() {
        openssl dgst -sha256 -sign "$KEY_PRIV" -out "$TMP_SIGN_FILE" "$DATA_FILE"
        openssl base64 -in "$TMP_SIGN_FILE" -out "$SIGN_FILE"
}
 
err() {
        local err_code=$1
        shift
        echo $* >&2
        exit $err_code
}
 
enc_verif_sign() {
        openssl base64 -d -in "$SIGN_FILE" -out "$TMP_SIGN_FILE"
        openssl dgst -sha256 -verify "$KEY_PUB" -signature "$TMP_SIGN_FILE" "$DATA_FILE" > /dev/null
        if [ $? -ne 0 ]
        then
                err 1 "Error. Sign. Verification Failure"
        fi
}
 
date_epoch() {
        echo $(date +%s)
}
 
read_date_file() {
        echo "$(cat $DATA_FILE)"
}
 
create_date_file() {
        date_epoch > "$DATA_FILE"
        enc_sign
}
 
check_date() {
        enc_verif_sign
        local -i epoch_file="$(read_date_file)"
        local -i epoch_now="$(date_epoch)"
        echo "DEBUG: $epoch_file > $(( epoch_now - DELAY ))"
        if (( epoch_file > epoch_now ))
        then
                err 2 "Error. Time in futur"
        elif (( $epoch_file < $(( epoch_now - DELAY )) ))
        then
                err 3 "Error. Expired"
        else
                echo "OK"
        fi
}
 
#enc_create_key_priv
#enc_create_key_pub
#create_date_file
#enc_sign
 
enc_verif_sign
read_date_file
check_date
2025/03/24 15:06
blog.txt · Dernière modification : de 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki