Cosa significa flag NOEXEC quando si montano le directory su RHEL?


11

Sto cercando di capire la bandiera NOEXEC durante il montaggio.

Sto riscontrando un problema di esecuzione nella directory / tmp su qualcuno che non può accedere ad atm in cui la directory / tmp è montata su un'unità diversa da '/' e NOEXEC è presente. Volevo provare a ricreare questo scenario sulla mia macchina, ma non ho un secondo disco rigido. Ho provato a fare il seguente comando:

mount --bind /test1 /test2

Ho quindi rimosso la bindbandiera e aggiunto NOEXECin / etc / fstab. Quindi, ho creato un file in / test2 chiamato test.sh dove echo 'ciao mondo'. Provo ad eseguirlo e dice "permesso negato". Ho quindi eseguito chmod 777 test.she sono stato in grado di eseguire il file bene. Ho pensato che il flag NOEXEC non dovrebbe permettermi di eseguire nulla?

Non mount --bind /test1 /test2è lo stesso del montaggio da un'unità fisica completamente diversa? Come in / test1 e / test2 sono su unità diverse?


Ho il sospetto che potresti essere vittima di qualche peculiarità di Bind Mount. Vedere questa risposta .
Kamil Maciorowski il

Risposte:


7

L'opzione 'NOEXEC' nel mountcomando non consente l'esecuzione di file binari eseguibili nel file system montato 1 . Tuttavia, quando uno script (un file di testo che inizia con la riga di lei-bang; ovvero, una riga che inizia con #!) viene dato ad alcune shell (bash), eseguirà l'eseguibile chiamato su quella riga (ad esempio, /usr/bin/perl) e passerà il percorso dello script della shell come primo argomento. L'interprete effettivo potrebbe non essere su quel mountpoint.
__________
1 Il mountcomando in genere monta un file system . (Probabilmente, loop-back o bindmount possono essere considerati un'eccezione a questa generalità.) In alcuni casi (ad es. /tmp), Questo file system conterrà solo una directory.


Quindi, sebbene il file sh risieda in / test2, viene eseguito in / bin / sh, non / test2? Sull'altra macchina, esiste un processo java che sta scrivendo script shell nella directory / tmp e quindi eseguendoli. Penso di ricordare che gli script di shell che sta creando hanno #!/bin/shin alto. Non so come lo script della shell venga eseguito se non attraverso java e riferimenti / bin / sh. Se fa riferimento a / bin / sh e la directory bin ha i privilegi di esecuzione, perché gli script della shell non vengono eseguiti come nel mio test?
user972276

Dipende tutto dalla chiamata shell / programma, gli script shell non sono ELF e non possono essere eseguiti direttamente, tuttavia alcune shell non consentiranno l'esecuzione di uno script su un FS su cui è montato NOEXEC, moriranno. Non sono sicuro del comportamento di / bin / sh in questo caso. (Soprattutto dal momento che non so quale stai usando, ci sono alcuni gusti).
KJ4IPS,

Pensaci, quando usi la shell, il sistema nota il #! linea e chiama l'interpereter appropriato (/ bin / bash /tmp/file.sh), ma se il bit java sta semplicemente chiamando (/tmp/file.sh), non funzionerà.
KJ4IPS,

l'istanza java non si trova nella directory / tmp e dovrebbe usare un interprete per eseguire gli script di shell, giusto? A meno che java non abbia quella funzionalità integrata, ciò significa che l'esecuzione non sarebbe ancora avvenuta nella directory / tmp.
user972276

Secondo me la tua risposta afferma erroneamente che il compito della shell è leggere un shebang. Vedere questa risposta .
Kamil Maciorowski il
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.