Co oznacza flaga NOEXEC podczas montowania katalogów na RHEL?

11

Próbuję zrozumieć flagę NOEXEC podczas montażu.

Mam problem z wykonaniem w katalogu / tmp na innym komputerze, na którym nie mam dostępu do bankomatu, w którym katalog / tmp jest zamontowany na innym dysku niż „/” i obecny jest NOEXEC. Chciałem spróbować odtworzyć ten scenariusz na moim komputerze, ale nie mam drugiego dysku twardego. Próbowałem wykonać następujące polecenie:

mount --bind /test1 /test2

Następnie usunąłem bindflagę i dodałem NOEXECw / etc / fstab. Następnie utworzyłem plik w / test2 o nazwie test.sh, w którym echo „hello world”. Próbuję go uruchomić, a napis „odmowa zgody”. Następnie pobiegłem chmod 777 test.shi mogłem dobrze wykonać plik. Myślałem, że flaga NOEXEC nie powinna pozwalać mi niczego wykonywać?

Czy to mount --bind /test1 /test2nie to samo, co montaż z zupełnie innego dysku fizycznego? Jak w / test1 i / test2 są na różnych dyskach?

użytkownik972276
źródło
Podejrzewam, że możesz być ofiarą jakiejś osobliwości związania wierzchowca. Zobacz tę odpowiedź .
Kamil Maciorowski

Odpowiedzi:

7

Opcja „NOEXEC” w mountpoleceniu nie pozwala na wykonywanie wykonywalnych plików binarnych w podłączonym systemie plików 1 . Jednak gdy skrypt (plik tekstowy rozpoczynający się od linii she-bang, tj. Linia rozpoczynająca się od #!) jest podawany niektórym powłokom (bash), uruchomi plik wykonywalny o nazwie tej linii (np. /usr/bin/perl) I przekaże ścieżka skryptu powłoki jako pierwszy argument. Rzeczywisty tłumacz może nie znajdować się w tym punkcie montowania.
__________
1mount komenda zazwyczaj montuje się system plików . (Prawdopodobnie sprzężenie zwrotne lub bindpodłączenia można uznać za wyjątek od tej ogólności.) W niektórych przypadkach (np. /tmp) Ten system plików będzie zawierał tylko jeden katalog.

KJ4IPS
źródło
Tak więc, chociaż plik sh znajduje się w / test2, jest on wykonywany w / bin / sh, a nie / test2? Na drugim komputerze jest proces Java, który zapisuje skrypty powłoki w katalogu / tmp, a następnie je wykonuje. Myślę, że pamiętam, że skrypty powłoki, które tworzy, znajdują się #!/bin/shu góry. Nie wiem, w jaki sposób wykonuje się skrypt powłoki, poza przejściem przez java i referencje / bin / sh. Jeśli odwołuje się do / bin / sh, a katalog bin ma uprawnienia do wykonywania, dlaczego skrypty powłoki nie wykonałyby się tak, jak podczas mojego testu?
user972276
To wszystko zależy od wywoływania powłoki / programu, skrypty powłoki nie są ELF-ami i nie mogą być bezpośrednio wykonywane, jednak niektóre powłoki nie pozwolą na uruchomienie skryptu na FS z zamontowanym NOEXEC, po prostu umrą. Nie jestem pewien, jakie zachowanie / bin / sh powinno być w tym przypadku. (Zwłaszcza, że ​​nie wiem, którego używasz, istnieje kilka smaków).
KJ4IPS
Pomyśl o tym, kiedy używasz powłoki, system zauważa #! line i wywołuje odpowiedni interpreter (/ bin / bash /tmp/file.sh), ale jeśli bit java właśnie wywołuje (/tmp/file.sh), to nie zadziała.
KJ4IPS
instancja Java nie znajduje się w katalogu / tmp i musiałaby używać interpretera do wykonywania skryptów powłoki, prawda? Chyba że java ma tę wbudowaną funkcjonalność, co oznacza, że ​​wykonanie nadal nie nastąpiłoby w katalogu / tmp.
user972276
Moim zdaniem twoja odpowiedź niesłusznie twierdzi, że zadaniem powłoki jest przeczytanie szelestu. Zobacz tę odpowiedź .
Kamil Maciorowski