Trucs et astuces
retours d'expériences
signer un fichier ELF
Le but
Etre capable de vérifier l'authenticité d'un programme ELF ou d'un
module Linux.
Signature
Première opération, générer une clef GPG pour la signature.
# gpg --gen-key
Seconde opération signer le programme test au format ELF.
# gpg -b test
Troisième opération, insérer la signature dans le fichier ELF.
# gpg -b test
# objcopy --add-section .elf_sig=test.sig test test.signed
Lire la signature
La signature du fichier ELF peut être vérifiée par le noyau lors
de l'appel système execve ou lors du chargement du module
par le module de vérification elfsig.ko.
Le shell script ci-dessous permet de retrouver simplement la signature
embarquée dans un fichier ELF.
#!/bin/ksh
function usage
{
print "$0 file section"
exit 2
}
[[ $# = 2 ]] || usage
typeset -i to_skip
typeset -i the_size
file=$1
section=$2
readelf -S $file | grep $section | read a b c d e f reste
to_skip=0x${e}
the_size=0x${f}
dd if=$file of=$file.$section bs=1 skip=$to_skip count=$the_size
chown et capabilties
Observation:
Je veux modifier l'appartenance d'un fichier et selon la documentation je peux le faire sans problème avec tout utilisateur.
En fait la documentation n'est pas à jour, car par défaut seul root peut
effectuer le changement d'appartenance.
pmorel@vaio:~$ touch file
pmorel@vaio:~$ ls -l file
-rw-r--r-- 1 pmorel pmorel 0 May 19 19:08 file
pmorel@vaio:~$ chown 1.1 file
chown: changing ownership of `file': Operation not permitted
pmorel@vaio:~$
Le problème
Le problème vient des capabilities: le système de fichier supporte
les capabilities et dans ce cas un test est fait lors de la recherche
du fichier pour savoir si le process demandant le changement d'utilisateur
a le droit (capability) de le faire.
Ceci est géré par la capability CAP_CHOWN.
Solution
La solution, si vous voulez pouvoir donner le droit à un utilisateur
lambda de modifier le possesseur d'un fichier est de donner au programme
chown cette capability
Le programme setcap est prévu à cet effet, il doit
être utilisé par root
pmorel@vaio:~$ sudo setcap 'cap_chown=ep' /bin/chown
Le résulat:
pmorel@vaio:~$ chown 1.1 file
pmorel@vaio:~$ ls -l file
-rwxr-xr-x 1 daemon daemon 0 mai 19 19:08 file
pmorel@vaio:~$
Attention, vous donnez la possibilité à un utilisateur d'outre-passer les limites imposées par les quotas
Notes
Pour debian, setcap est livré par le package libcap2-bin.
pmorel@vaio:~$ sudo apt-get install libcap2-bin
|