J'ai un foo.sh
fichier dans mon répertoire actuel. Si j'essaye de courir ./foo.sh
, j'obtiens:
-bash: ./foo.sh: /bin/sh: bad interpreter: Permission denied
Mais si je cours, /bin/sh ./foo.sh
ça fonctionne bien.
Comment puis-je résoudre ce problème afin que je puisse simplement exécuter ./foo.sh
et qu'il l'exécute automatiquement avec / bin / sh?
Edit: D'accord, c'est Chrome OS et ce dossier particulier est monté avec noexec
. Apparemment, cela déjoue la capacité de simplement courir ./foo.sh
; mais pourquoi? Pourquoi puis-je toujours courir sh foo.sh
pour atteindre exactement la même chose? Quelle sécurité noexec
donne alors?
noexec
fonctionne sa magie.Réponses:
L'
noexec
indicateur s'appliquera de manière appropriée aux scripts, car ce serait le comportement "attendu".Cependant, le réglage
noexec
arrête uniquement les personnes qui ne savent pas suffisamment ce qu'elles font. Lorsque vous exécutez, vous exécutezsh foo.sh
réellement àsh
partir de son emplacement par défaut (probablement/bin
) qui ne se trouve pas sur un système de fichiers monté avecnoexec
.Vous pouvez même vous déplacer
noexec
pour les fichiers binaires normaux en appelantld
directement.Cela exécutera bash, qu'il soit ou non sur un système de fichiers monté avec
noexec
.la source
ld.so
(intelligent)/lib/ld-2.10.1.so $HOME/sh
et retourné une autre erreur lors du chargement des bibliothèques partagées:/home/chronos/user/sh: failed to map segment from shared object: Operation not permitted
. Je ne sais pas si ce que vous avez dit était faux ou si quelque chose d'autre interfère. Par exemple, / est monté en lecture seule.ld
etld.so
.ld
est un éditeur de liens utilisé pour lier le code objet pour former un binaire lors de la compilation, tandis queld.so
l'éditeur de liens d'exécution exécute une action similaire lors de l'exécution d'un programme. L'éditeur de liens auquel il est fait référence ici est l'éditeur de liens au moment de l'exécution.Vous pouvez également obtenir cette erreur (ou un message très, très similaire) si vous essayez d'exécuter un fichier avec des fins de ligne MS-DOS de 2 octets (retour chariot).
Vim est si intelligent ces jours-ci qu'il ne vous montre pas nécessairement que le chariot retourne sous la forme «^ M». Ainsi, vous pouvez vous laisser berner si vous ne vérifiez pas ce que Vim pense du "format de fichier" et que vous vous appuyez uniquement sur l'apparence à l'écran.
Dans ce cas, le "#! / Bin / sh ^ M" amène le noyau à rechercher "/ bin / sh ^ M", ce qu'il ne peut pas. Mauvais interprète, en effet.
la source
Si vous avez la possibilité d'exécuter le script ou le programme à partir d'une clé USB (ou d'un autre support amovible), vous pouvez essayer de le démonter et de le remonter manuellement:
Branchez la clé USB
Trouver un périphérique de clé USB avec
$ mount
Prenez-en note; supposons que c'est
/dev/sdb1
Démontez la clé USB:
Enfin, remontez la clé USB:
Avec mountpoint, le nom de montage de la clé USB
la source
Pour des raisons de sécurité du système sur ChromeOS / ChromiumOS, certains dossiers sont marqués
noexec
et vous devez soit remonter avec la commande ci-dessous, soit utiliser un chemin alternatif qui n'a pas éténoexec
défini, comme le deuxième exemple.Ces commandes supposent que vous êtes au moins en mode développeur et que vous avez accès à
shell
withchronos@localhost / $
et pas seulementcrosh>
et que vous connaissez le mot de passe sudo.La méthode la plus durable qui devrait survivre à une mise à niveau, car Google réserve la plupart des
/usr/local
développeurs:L'avantage supplémentaire de mettre les choses ici est qu'elles se trouvent
$PATH
déjà dans (essayezecho $PATH
de le confirmer), vous n'avez donc pas besoin d'utiliser le chemin complet pour exécuter des scripts ou des binaires qui sont dedans/usr/local/bin
et qui ont étéchmod +x
exécutés dessus.la source
J'avais la même question. Mon problème était avec la carte SD. Cela a fonctionné pour moi, et c'est beaucoup plus simple que les autres réponses ici. Je l'ai appris du numéro 928 de Crouton .
Notez que vous devez utiliser le point de montage, pas le périphérique (/ dev / mmcblk1p1). Même chose pour USB (/ dev / sdb1) dans votre cas. Seul le point de montage est différent:
Vous saurez que cela a eu l'effet souhaité car "noexec" disparaîtra des options de montage lorsque vous interrogerez.
la source