Je peux sembler exécuter des scripts (.sh) avec et sans qu'ils soient définis comme exécutables. Alors, où cela est-il important?
Supposons que vous ayez le fichier myscript
contenant les éléments suivants:
#!/bin/bash
echo "Hello, World!"
Si vous rendez ce fichier exécutable et que vous l'exécutez avec ./myscript
, le noyau verra que les deux premiers octets le sont #!
, ce qui signifie que c'est un fichier de script. Le noyau utilisera alors le reste de la ligne comme interpréteur et passera le fichier comme premier argument. Donc, ça tourne:
/bin/bash myscript
et bash lit le fichier et exécute les commandes qu'il contient.
Ainsi, pour que bash (ou tout autre interpréteur requis par votre script) "exécute" le script, il doit seulement pouvoir lire le fichier.
Donc, pour les scripts, le bit d'exécution le rend un peu plus pratique à exécuter. Tant que bash est exécutable, vous pouvez toujours exécuter bash avec le fichier de script comme argument, ou exécuter bash de manière interactive et copier coller le script ligne par ligne dans votre terminal pour exécuter les commandes.
Assurez-vous que vous ne confondez pas "exécuter le script shell" avec "exécuter un script shell en utilisant sh".
Cela ne sera pas affecté par les autorisations de fichier sur
file.sh
:Vous exécutez
sh
(qui résout le programme/bin/sh
), qui litfile.sh
et exécute son code.Les autorisations sur les fichiers auront effet si vous exécutez vraiment le script lui - même :
Notez que les autorisations de fichiers ne sont pas prises en charge par les systèmes de fichiers non Linux, comme FAT. Ainsi, même si vous exécutez
chmod -x file.sh
, le fichier aura toujours ses anciennes autorisations.L'autorisation d'exécution est appliquée par le système de fichiers. Mais les programmes peuvent également "exécuter" le code en lisant le contenu du fichier, ce qui contourne les autorisations du système de fichiers sur "exécuter".
la source
bash
) pour effectuer l'exécution - pour bloquer que vous devrez également retirer leurread
autorisation.If you set the executable permission, the script can be run directly by users who have that permission - whether they have it on a group, world or owner basis
Mais comment l'autorisation est-elle accordée à différents utilisateurs en vérifiant l'autorisation exécutable? Et j'ai obtenu votre deuxième point. Vous voulez dire leur retirer l'autorisation de lecture du script afin qu'ils ne puissent même pas le traiter via bash. Droite?sudo chmod g+x myfile.sh
dans le terminal pour ajouter des autorisations d'exécution pour le groupe du fichier. Voir le didacticiel sur les autorisations de fichiers . Pour gérer les autorisations de plusieurs utilisateurs simultanément, vous utiliseriez des groupes, voir par exemple Gestion des groupes .Ne pensez pas à cela de cette façon. Puis-je exécuter ce fichier? Pensez-y de la manière suivante: qui peut exécuter ce fichier?
Si l'ordinateur est à vous et que le fichier est à vous, je suis sûr que vous pouvez l'exécuter. Vous voudrez peut-être approfondir les commandes comme chmod et chown et les autorisations de fichier.
J'espère que ça aide.
la source
L'
exec
appel système du noyau Linux échoueEACCES
si le fichier n'est pas exécutableBien que vous puissiez le faire
sh myprog.sh
(qui ne fait que lire les fichiers et les interprètes), essayer d'exécuter le programme./myprog.sh
ne peut pas fonctionner, car lorsque vous faites cela:exec
appel système./myprog.sh
exec
appel système du noyau Linux comme expliqué sur: /programming/2429511/why-do-people-write-the-usr-bin-env-python-shebang-on -la-première-ligne-d'un-pyt / 40938801 # 40938801Cela peut être vérifié avec
main.c
:et
myprog.sh
:Si
myprog.sh
n'est pas exécutable,main
échoue avec:Testé dans Ubuntu 17.10,
gcc -std=c99
.POSIX 7 mentionne que:
Des explications supplémentaires peuvent être trouvées sur: /security/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats-the
la source