Comment obtenir Linux pour honorer les répertoires setuid?

8

Il y a quelque temps, lors d'une conversation dans IRC, un utilisateur d'un canal dans lequel je me trouvais a suggéré à quelqu'un de définir un répertoire afin qu'il hérite de l'ID utilisateur sur les fichiers pour résoudre un problème rencontré par quelqu'un d'autre. À l'époque, j'ai pris la parole et dit que "Linux ne prend pas en charge les répertoires setuid". Après cela, la personne qui m'a donné des conseils m'a montré une boîte à pâte ( http://codepad.org/4In62f13 ) de son système honorant la permission setuid définie sur un répertoire.

Juste pour expliquer, quand je dis "linux ne prend pas en charge les répertoires setuid", ce que je veux dire, c'est que vous pouvez aller dans "répertoire chmod u + s" et cela mettra le bit sur le répertoire. Cependant, Linux (tel que je l'ai compris) ignore ce bit (sur les répertoires).

Essayez comme je pourrais, je ne peux pas tout à fait répliquer cette boîte à pâte. Quelqu'un m'a suggéré une fois qu'il pourrait être possible d'émuler le comportement avec selinux - et de jouer avec les règles, il est possible de forcer un uid sur un fichier, mais pas à partir d'une autorisation de répertoire setuid (que je peux voir). La lecture sur Internet a été assez peu informative - la plupart des endroits affirment "non, setuid sur les répertoires ne fonctionne pas avec linux" avec parfois "cela peut être fait dans des circonstances spécifiques" (comme ceci: http://arstechnica.com/ etc / linux / 2003 / linux.ars-12032003.html )

Je ne me souviens pas qui était la personne d'origine, mais le système d'origine était un système Debian 6, et le système de fichiers qu'il exécutait était monté xfs avec "default, acl". J'ai essayé de le répliquer, mais pas de chance jusqu'à présent (essayé jusqu'à présent avec différentes versions de debian, ubuntu, fedora et centos)

Quelqu'un peut-il me dire sur quoi ou comment obtenir un système pour honorer setuid sur un répertoire?

Takigama
la source
XFS a certainement une option de montage ( grpid|bsdgroupsou nogrpid|sysvgroups) qui signifie que les fichiers dans les répertoires sont créés avec le groupe du répertoire plutôt qu'avec le groupe du propriétaire; peut-être jouer avec ça?
Zanchey

Réponses:

7

Setuid pour les répertoires ne se comporte pas comme setgid. Sauf si la sortie du shell était de FreeBSD, quelqu'un s'ennuyait et s'amusait un peu à vos dépens.

L'autorisation setuid définie sur un répertoire est ignorée sur les systèmes UNIX et Linux. [4] FreeBSD peut être configuré pour l'interpréter de manière analogue à setgid, c'est-à-dire pour forcer tous les fichiers et sous-répertoires à appartenir au propriétaire du répertoire le plus haut. [5]

Dans FreeBSD, les répertoires se comportent comme si leur bit setgid était toujours défini, quelle que soit sa valeur réelle. Comme indiqué dans open (2), "Lorsqu'un nouveau fichier est créé, il reçoit le groupe du répertoire qui le contient."

http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories

Aaron Copley
la source
Je pense que c'est le cas ... cependant, le gars était à peu près certain d'avoir atteint son objectif ... je me suis ensuite tourné vers les forums Debian parce qu'il utilisait Debian, et j'ai obtenu ceci pour une réponse: forums.debian.net /… J'ai peut-être posté dans un état d'idée inférieur à celui et j'ai eu l'épaule froide. Après environ un mois et un peu de recherche, je ne suis pas certain que cela ne puisse certainement pas être fait, mais je ne comprends pas pourquoi les gars de Debian croient que c'est possible sans modifier quelque chose.
Takigama
S'il y arrivait, il serait la meilleure source sur la façon dont cela a été fait. J'ai moi-même fait des recherches sur le sujet et je n'ai rien trouvé.
Aaron Copley
@AaronCopley: Avez-vous une autre source que wikipedia pour le fait que l'autorisation setuid définie sur un répertoire est intégrée sur les systèmes Linux?
Martin Thoma
Non. Mais vous êtes invités à l'essayer et à voir par vous-même. :)
Aaron Copley
2

Réponse partielle / solution:

J'essayais de faire la même chose, j'ai décidé de ne pas me battre et d'essayer une autre méthode. Ce que j'ai essayé était des listes de contrôle d'accès, pour définir des autorisations par défaut. (Remarque: vous devrez peut-être d'abord les activer).

setfacl -R --set-file=- . <<EOF
# file: testdir/
# owner: testuser
# group: testgroup
user::rwx
group::rwx
group:normaluser:rwx
mask::rwx
other::r-x
default:group::rwx
default:group:normaluser:rwx
default:mask::rwx
default:other::r-x
EOF

Ici, testuser est utilisé pour exécuter des tests, et l'utilisateur normal peut supprimer les résultats, sans avoir à utiliser root (à chaque fois).

ctrl-alt-delor
la source
Cela ajoute un nouveau groupe, mais définir l'ID de groupe fonctionne correctement.
ctrl-alt-delor
-2

Depuis RHEL man chmod

chmod conserve les bits set-user-ID et set-group-ID d'un répertoire, sauf indication contraire explicite. Vous pouvez définir ou effacer les bits avec des modes symboliques comme u + s et gs, et vous pouvez définir (mais pas effacer) les bits avec un mode numérique.

Numériquement si je me souviens bien, chmod 4711 ./dirajoute le bit set UID, chmod 2711 ./dirajoute le bit set gid pour 6711définir l'héritage uid + gid selon la démonstration dans pastebin.

Par la page de manuel chmod u+s== chmod 4XXXet chmod g+s==chmod 2XXX

Oneiroi
la source
1
non, je comprends comment les appliquer, ce n'est pas le problème.
Takigama
(appuyez sur Entrée par erreur) Le problème est ce qu'ils font à un répertoire, ma conviction était que setuid sur les répertoires n'était pas quelque chose que Linux faisait, par exemple (système ubuntu 10.10): testuser @ boson: ~ $ ls -ald ~ drwsrwsrwx 3 testuser testuser 4096 2012-03-21 01:55 / home / testuser Ce répertoire a à la fois setuid et setgid. Maintenant, en tant qu'utilisateur tt @ boson: ~ $ touch ~ testuser / fichier t @ boson: ~ $ ls -la! $ Ls -la ~ testuser / fichier -rw-r - r-- 1 t testuser 0 2012-03 -21 01:57 / home / testuser / file Notez comment le bit setuid sur le répertoire n'a aucun effet (ce que j'attends). comment faire pour qu'un système linux utilise setuid sur un répertoire?
Takigama
Vous pouvez les effacer avec quelque chose comme =755ou en 00755utilisant les chiffres
Steve Buzonas