Comportement étrange pour setuid et setgid

1

Je fais une petite expérience avec des bits de privilège spéciaux comme suit:

[root@localhost~]# useradd user1
[root@localhost~]# cp /bin/touch /home/
[root@localhost~]# chown user1:user1 /home/touch
[root@localhost~]# chmod u+s,g+s /home/touch
[root@localhost~]# ls -l /home/touch
-rwsr-sr-x 1 user1 user1 52656 Jun 26 14:17 /home/touch
[root@localhost~]# chmod o+w /usr/local/etc/
[root@localhost~]# ls -ld /usr/local/etc
drwxr-xrwx.2 root root 4096 Jun 26 14:14 /usr/local/etc/
[root@localhost~]# /home/touch /usr/local/etc/root.1
/home/touch: cannot touch '/usr/local/etc/root.1': Permission denied

Parce que les deux bits suid et sgid sont définis pour l'exécutable /home/touch, Je m'attendais à ce que lorsque root exécute la commande /home/touch /usr/local/etc/root.1, l'efficacité user:group devrait être user1:user1, qui devrait avoir un accès en écriture à /usr/local/etc répertoire (voir o=rwx ).

Mais le résultat m'a rendu perplexe. En fait, toute personne appartenant à la root Le groupe échouera comme la racine, mais d'autres utilisateurs pourront exécuter la commande ci-dessus avec succès.

Seulement après avoir changé le mode de répertoire par chmod g+w /usr/local/etc, les utilisateurs appartenant au root groupe exécuter la commande sans erreur de permission.

Ne doit pas l'utilisateur effectif: groupe pour toute personne en cours d'exécution /home/touch être user1:user1? Quel est le problème avec le groupe racine? Est-ce que j'ai manqué quelque chose?

J'ai pris l'expérience sur RHEL 6.4 64 bits

yuanlinios
la source
1
Je remarque que les autorisations de sortie pour /usr/local/etc (“ drwxr-xrwx. ”) Se termine par un point. Cela peut signifier que le répertoire a une liste de contrôle d'accès. Pouvez-vous vérifier cela?
Scott
Un répertoire ou un fichier avec ACL se termine par le signe "+" au lieu de ".".
yuanlinios
J'ai regardé dans la documentation 'ls'. Il a dit: GNU 'ls' utilise un '.' pour indiquer un fichier avec un contexte de sécurité SELinux. Dans mon environnement, la fonctionnalité SELinux est simplement désactivée.
yuanlinios