Mam foo.sh
plik w bieżącym katalogu. Jeśli spróbuję uruchomić ./foo.sh
, otrzymam:
-bash: ./foo.sh: /bin/sh: bad interpreter: Permission denied
Ale jeśli biegnę, /bin/sh ./foo.sh
to działa dobrze.
Jak mogę to naprawić, abym mógł po prostu uruchomić, ./foo.sh
a to automatycznie uruchomi to z / bin / sh?
Edycja: OK, to jest system operacyjny Chrome i ten konkretny folder jest zamontowany noexec
. Najwyraźniej ogranicza to zdolność do biegania ./foo.sh
; ale dlaczego Dlaczego wciąż mogę biegać, sh foo.sh
aby osiągnąć dokładnie to samo? Jakie zatem noexec
daje bezpieczeństwo?
noexec
działa jego magia.Odpowiedzi:
noexec
Flaga będzie odpowiednio zastosować do skryptów, bo to byłoby „oczekuje” zachowania.Jednak ustawienie
noexec
zatrzymuje tylko osoby, które nie wiedzą wystarczająco dużo o tym, co robią. Po uruchomieniush foo.sh
faktycznie biegnieszsh
z domyślnej lokalizacji (prawdopodobnie/bin
), która nie jest zainstalowana w systemie plikównoexec
.Możesz nawet obejść
noexec
zwykłe pliki binarne, wywołującld
bezpośrednio.Spowoduje to uruchomienie bash, niezależnie od tego, czy jest on podłączony do systemu plików
noexec
.źródło
ld.so
(sprytnie)/lib/ld-2.10.1.so $HOME/sh
i powrócił kolejny błąd podczas ładowania biblioteki współdzielone:/home/chronos/user/sh: failed to map segment from shared object: Operation not permitted
. Nie jestem pewien, czy to, co powiedziałeś, było nieprawdą, czy też coś innego wtrąca się. Na przykład / jest montowany jako tylko do odczytu.ld
ild.so
.ld
to linker używany do łączenia kodu obiektowego w celu utworzenia pliku binarnego podczas kompilacji, podczas gdyld.so
linker w czasie wykonywania wykonuje podobną akcję podczas wykonywania programu. Linker, o którym tu mowa, jest linkerem wykonawczym.Możesz również otrzymać ten błąd (lub bardzo, bardzo podobny komunikat), jeśli spróbujesz wykonać plik z 2-bajtowymi zakończeniami linii MS-DOS (powrót wiersza karetki).
Vim jest obecnie tak sprytny, że niekoniecznie pokazuje ci zwrot karetki jako „^ M”. Możesz dać się oszukać, jeśli nie sprawdzisz, co Vim uważa za „format pliku”, i po prostu polegaj na wyglądzie na ekranie.
W tym przypadku „#! / Bin / sh ^ M” powoduje, że jądro próbuje znaleźć „/ bin / sh ^ M”, czego nie może. Rzeczywiście zły tłumacz.
źródło
Jeśli masz opcję uruchomienia skryptu lub programu z pamięci USB (lub innego nośnika wymiennego), możesz spróbować odmontować i ręcznie zainstalować go ponownie:
Podłącz pamięć USB
Znajdź urządzenie pamięci USB za pomocą
$ mount
Zanotuj to; załóżmy, że tak
/dev/sdb1
Odłącz pamięć USB:
Na koniec ponownie zainstaluj pamięć USB:
Z punktem montowania nazwa montowania pamięci USB
źródło
Ze względów bezpieczeństwa systemu w ChromeOS / ChromiumOS niektóre foldery są zaznaczone
noexec
i musisz albo ponownie zainstalować je za pomocą poniższego polecenia, albo użyj alternatywnej ścieżki, która nie zostałanoexec
ustawiona, jak w drugim przykładzie.Polecenia te zakładają jesteś przynajmniej w trybie dewelopera i mieć dostęp do
shell
zchronos@localhost / $
, a nie tylkocrosh>
i znać hasło sudo.Bardziej zrównoważona metoda, która powinna przetrwać aktualizację, ponieważ Google rezerwuje większość
/usr/local
dla programistów:Dodatkową zaletą oddanie rzeczy tutaj jest to, że w
$PATH
już (spróbujecho $PATH
to potwierdzić), dzięki czemu nie trzeba używać pełnej ścieżki, aby uruchomić skrypty lub pliki binarne, które są w/usr/local/bin
i mielichmod +x
uruchamiać na nich.źródło
Miałem to samo pytanie. Mój problem dotyczył karty SD. To działało dla mnie i jest znacznie prostsze niż inne odpowiedzi tutaj. Nauczyłem się tego z numeru Crouton nr 928 .
Zauważ, że musisz użyć punktu montowania, a nie urządzenia (/ dev / mmcblk1p1). To samo dotyczy USB (/ dev / sdb1) w twoim przypadku. Tylko punkt montowania jest inny:
Dowiesz się, że przyniosło to pożądany efekt, ponieważ „noexec” zniknie z opcji montowania podczas zapytania.
źródło