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 bind
flagę i dodałem NOEXEC
w / 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.sh
i mogłem dobrze wykonać plik. Myślałem, że flaga NOEXEC nie powinna pozwalać mi niczego wykonywać?
Czy to mount --bind /test1 /test2
nie to samo, co montaż z zupełnie innego dysku fizycznego? Jak w / test1 i / test2 są na różnych dyskach?
źródło
Odpowiedzi:
Opcja „NOEXEC” w
mount
poleceniu 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.__________
1
mount
komenda zazwyczaj montuje się system plików . (Prawdopodobnie sprzężenie zwrotne lubbind
podłą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.źródło
#!/bin/sh
u 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?