Je sais que l'activation de setuid sur les scripts pose des problèmes de sécurité et est donc inactive par défaut, mais attendez-vous à ce que cela fonctionne pour les exécutables. J'ai créé et exécutable qui affiche uid en sortie en suivant les instructions décrites dans ce post: Autoriser setuid sur les scripts shell
Mais il retourne le même uid (1000) avant et après l'exécution sudo chmod +s ./setuid-test
. Je pense que cela signifie que setuid n'a aucun effet sur mon exécutable, pourquoi et comment le résoudre?
Le code source:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
printf("%d", geteuid());
return 0;
}
Construit et exécuté avec
$ gcc -o setuid-test setuid-test.c
$ ./setuid-test
1000
$ sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
$ ./setuid-test
1000
En courant ls -la
, voici ce que j'obtiens:
me@me:~$ ls -la setuid-test
-rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
permissions
executable
setuid
Apprenant PHP
la source
la source
me@me:~$ ls -la setuid-test
---- renvoie -----rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
df .
dans le répertoire pour trouver le point de montagemount | grep nameofmountpoint
. Y a-t-il unnosuid
drapeau qui y figure?Réponses:
La plupart des systèmes de fichiers conçus pour Unix / Linux peuvent être montés avec un
nosuid
attribut, ce qui empêchera les binaires setuid ou setgid situés sur ces systèmes de fichiers de modifier l'uid ou le gid effectif d'un processus. Il est souvent utilisé lors du montage de systèmes de fichiers "non fiables", ceux qui sont sous le contrôle d'un non-administrateur.Dans votre cas, le système de fichiers que vous utilisez est de type ecryptfs, qui selon askubuntu: Erreur lors de l'exécution de binaire avec root setuid sous le répertoire personnel chiffré applique automatiquement nosuid (et nodev), en commençant par les versions d'il y a quelques années.
Voici une description de la raison du changement, à partir de https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-3409 :
la source
chown root
,chmod +s
3) le monter 4) exécuter l'exécutableLe bit SetUID sur l'exécutable permet d'exécuter l'exécutable sur le propriétaire du fichier (pas sur le superutilisateur). Pour pouvoir exécuter l'exécutable en tant que root, exécutez:
la source
setuid-test
devrait affichernobody
l'UID de.nobody
, pasroot
nobody
, donc j'attends65534
en retour, mais je vois1000
qui est le propriétaire!nosuid
, alors votre programme ne peut pas fonctionner.mount | grep /home/me
renvoie/home/me/.Private on /home/me type ecryptfs (ecryptfs_check_dev_ruid,ecryptfs_cipher=xxx,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs,ecryptfs_sig=0123456789abcdef,ecryptfs_fnek_sig=fedcba9876543210)