Quand j’essaie de courir ./script.sh
j’ai eu Permission denied
mais quand j’ai couru, bash script.sh
tout va bien.
Qu'ai-je fait de mal?
bash
shell-script
permissions
mount
Piotr Stapp
la source
la source
getfacl script.sh
?Réponses:
Autorisations POSIX incorrectes
Cela signifie que vous n'avez pas le bit d'autorisation d'exécution défini pour
script.sh
. Lors de l'exécutionbash script.sh
, vous devez uniquement disposer d'une autorisation de lecture pourscript.sh
. Voir Quelle est la différence entre exécuter «bash script.sh» et «./script.sh»? pour plus d'informations.Vous pouvez le vérifier en exécutant
ls -l script.sh
.Vous n'aurez peut-être même pas besoin de démarrer un nouveau processus Bash. Dans de nombreux cas, vous pouvez simplement exécuter
source script.sh
ou. script.sh
exécuter les commandes de script dans votre shell interactif actuel. Vous voudrez probablement démarrer un nouveau processus Bash si le script modifie le répertoire en cours ou modifie l'environnement du processus en cours.Listes de contrôle d'accès
Si les bits d'autorisation POSIX sont correctement définis, la liste de contrôle d'accès (ACL) peut avoir été configurée pour vous empêcher, vous ou votre groupe, d'exécuter le fichier. Par exemple, les autorisations POSIX indiqueraient que le script de shell de test est exécutable.
Cependant, si vous tentez d'exécuter le fichier, vous obtenez:
La
getfacl
commande montre la raison pour laquelle:Dans ce cas, mon groupe principal est celui pour
domain users
lequel les autorisations d'exécution ont été révoquées en limitant la liste de contrôle d'accès avecsudo setfacl -m 'g:domain\040users:rw-' t.sh
. Cette restriction peut être levée par l’une des commandes suivantes:Voir:
Système de fichiers monté avec l'option noexec
Enfin, dans ce cas spécifique, la raison pour laquelle vous ne pouvez pas exécuter le script est que le système de fichiers sur lequel réside le script a été monté avec l'
noexec
option. Cette option annule les autorisations POSIX pour empêcher tout fichier sur ce système de fichiers d'être exécuté.Cela peut être vérifié en exécutant la
mount
liste de tous les systèmes de fichiers montés; les options de montage sont listées entre parenthèses dans l'entrée correspondant au système de fichiers, par exempleVous pouvez déplacer le script vers un autre système de fichiers monté ou remonter le système de fichiers en permettant son exécution:
Remarque: je l’utilise
/tmp
comme exemple ici car il existe de bonnes raisons de sécurité pour garder/tmp
monté avec lenoexec,nodev,nosuid
jeu d’options.la source
Essayer
chmod 755 script.sh
cela rendra le fichier exécutable. Alors essaye,
./script.sh
J'espère que cela fonctionnera.
la source
Sur mon win7 avec admin en cours d'exécution cmd; J'ai des fichiers .sh associés à cygwin64 / bin / bash, mais ils ont été bloqués par cmd. Aucune des suggestions ci-dessus n'a aidé (chmod, setfacl, mount).
La solution ci-dessous a bien fonctionné, c’est un logiciel de gestion de fichier acl-fixateur lorsque les dossiers / fichiers deviennent inaccessibles à l’administrateur sur win7, ce qui est souvent le cas):
la source