Come si fa a Linux di onorare le directory setuid?


8

Qualche tempo fa, durante una conversazione in IRC, un utente in un canale in cui mi trovavo suggeriva che qualcuno avesse impostato una directory in modo che ereditasse l'ID utente sui file per risolvere un problema riscontrato da qualcun altro. Al momento ho parlato e ho detto "Linux non supporta le directory setuid". Dopodiché, la persona che mi ha dato il consiglio mi ha mostrato un pastebin ( http://codepad.org/4In62f13 ) del suo sistema in onore dell'autorizzazione setuid impostata su una directory.

Giusto per spiegare, quando dico "linux non supporta le directory setuid" ciò che intendo è che puoi andare "chmod u + s directory" e imposterà il bit nella directory. Tuttavia, Linux (come ho capito) ignora questo bit (nelle directory).

Per quanto ci provi, non riesco proprio a replicare quel pastebin. Qualcuno mi ha suggerito una volta che potrebbe essere possibile emulare il comportamento con selinux - e giocare con le regole, è possibile forzare un uid su un file, ma non da un'autorizzazione di directory setuid (che posso vedere). Leggere su Internet è stato piuttosto poco informativo - molti posti affermano che "no, setuid su directory non funziona con Linux" con l'occasionale "può essere fatto in circostanze specifiche" (come questo: http://arstechnica.com/ etc / linux / 2003 / linux.ars-12032003.html )

Non ricordo chi fosse la persona originale, ma il sistema originale era un sistema debian 6 e il filesystem che stava eseguendo era xfs montato con "default, acl". Ho provato a replicarlo, ma finora non ho avuto fortuna (provato finora con varie versioni di debian, ubuntu, fedora e centos)

Qualcuno può darmi un'idea di cosa o come ottenere un sistema per onorare il setuid in una directory?


XFS ha certamente un'opzione mount ( grpid|bsdgroupso nogrpid|sysvgroups) che significa che i file nelle directory vengono creati con il gruppo della directory piuttosto che con il gruppo del proprietario; forse ci giochi?
Zanchey,

Risposte:


7

Setuid per le directory non si comporta come setgid. A meno che, l'output della shell fosse da FreeBSD, qualcuno era annoiato e si divertiva un po 'a tue spese.

L'autorizzazione setuid impostata su una directory viene ignorata sui sistemi UNIX e Linux. [4] FreeBSD può essere configurato per interpretarlo in modo analogo a setgid, in particolare per forzare tutti i file e le sottodirectory ad essere posseduti dal proprietario della directory principale. [5]

In FreeBSD, le directory si comportano come se il loro bit setgid fosse sempre impostato, indipendentemente dal suo valore reale. Come indicato in open (2), "Quando viene creato un nuovo file, viene assegnato il gruppo della directory che lo contiene."

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


Credo che sia così ... tuttavia, il ragazzo era abbastanza certo di aver raggiunto il suo obiettivo ... mi sono quindi rivolto ai forum debian perché stava usando debian, e ho ottenuto questo per una risposta: forums.debian.net / ... Forse ho pubblicato in uno stato meno di idea e ho avuto la spalla fredda. Dopo circa un mese e un po 'di ricerche, non sono sicuro che non si possa assolutamente fare, ma non riesco a capire perché i debianisti credano che sia possibile senza modificare qualcosa.
Takigama,

Se lo avesse raggiunto, sarebbe stata la migliore fonte su come è stato fatto. Ho studiato l'argomento da solo e non ho trovato nulla.
Aaron Copley,

@AaronCopley: hai un'altra fonte oltre a Wikipedia per il fatto che le autorizzazioni setuid impostate su una directory sono importate su sistemi Linux?
Martin Thoma,

No. Ma sei il benvenuto per provarlo e vedere di persona. :)
Aaron Copley il

2

Risposta parziale / aggirare:

Stavo cercando di fare la stessa cosa, ho deciso di non combatterlo e provare un altro metodo. Quello che ho provato sono state le liste di controllo degli accessi, per impostare le autorizzazioni predefinite. (Nota: potrebbe essere necessario abilitarli prima).

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

Qui testuser viene utilizzato per eseguire i test e l'utente normale può eliminare i risultati, senza comportare l'utilizzo di root (ogni volta).


Questo aggiunge un nuovo gruppo, ma set id gruppo funziona bene.
ctrl-alt-delor,

-2

Da RHEL man chmod

chmod conserva i bit set-user-ID e set-group-ID di una directory se non diversamente specificato. Puoi impostare o cancellare i bit con modalità simboliche come u + se gs, e puoi impostare (ma non cancellare) i bit con una modalità numerica.

Numericamente, se ricordo bene, chmod 4711 ./diraggiunge il bit UID impostato, chmod 2711 ./diraggiunge il bit gid impostato per l' 6711impostazione dell'ereditarietà uid + gid come da dimostrazione in pastebin.

Per la pagina man chmod u+s== chmod 4XXXe chmod g+s==chmod 2XXX


1
no, capisco come applicarli, non è questo il problema.
Takigama,

(premi invio per errore) Il problema è quello che fanno in una directory, la mia convinzione era che setuid su directory non fosse qualcosa che Linux ha fatto, per esempio (sistema Ubuntu 10.10): testuser @ boson: ~ $ ls -ald ~ drwsrwsrwx 3 testuser testuser 4096 2012-03-21 01:55 / home / testuser Quella directory ha sia setuid che setgid. Ora, come l'utente tt @ boson: ~ $ touch ~ testuser / file t @ boson: ~ $ ls -la! $ Ls -la ~ testuser / file -rw-r - r-- 1 t testuser 0 2012-03 -21 01:57 / home / testuser / file Nota come il bit setuid nella directory non ha alcun effetto (cosa mi aspetto). come si fa in modo che un sistema linux usi setuid in una directory?
Takigama,

Puoi cancellarli con qualcosa di simile =755o 00755utilizzando i numeri
Steve Buzonas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.