Risposte:
Supponiamo che tu abbia il file myscriptcontenente quanto segue:
#!/bin/bash
echo "Hello, World!"
Se rendi questo file eseguibile e lo esegui ./myscript, il kernel vedrà che i primi due byte sono #!, il che significa che è un file di script. Il kernel utilizzerà quindi il resto della riga come interprete e passerà il file come primo argomento. Quindi, funziona:
/bin/bash myscript
e bash legge il file ed esegue i comandi in esso contenuti.
Pertanto, affinché bash (o qualunque sia l'interprete richiesto dallo script) per "eseguire" lo script, deve solo essere in grado di leggere il file.
Quindi, per gli script, il bit di esecuzione rende solo un po 'più conveniente eseguirlo. Finché bash è eseguibile, è sempre possibile eseguire bash con il file di script come argomento oppure eseguire bash in modo interattivo e copiare incollare lo script riga per riga nel terminale per eseguire i comandi.
Assicurati di non confondere "l'esecuzione dello script di shell" con "esegui uno script di shell usando sh".
Ciò non sarà influenzato dalle autorizzazioni dei file su file.sh:
sh file.sh
Stai eseguendo sh(che si risolve nel programma /bin/sh), che legge file.shed esegue il suo codice.
Le autorizzazioni per i file avranno effetto se si esegue davvero lo script stesso :
./file.sh
Si noti che le autorizzazioni per i file non sono supportate da filesystem non Linux, come FAT. Quindi, anche se lo esegui chmod -x file.sh, il file avrà ancora i permessi precedenti.
Il permesso di esecuzione è applicato dal filesystem. Ma i programmi possono "eseguire" anche il codice leggendo il contenuto del file, che ignora le autorizzazioni del filesystem su "esegui".
bash) per eseguire l'esecuzione - per bloccare che anche tu dovresti togliere il loro readpermesso.
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 basisMa come viene concessa l'autorizzazione a diversi utenti controllando l'autorizzazione eseguibile? E ho ottenuto il tuo secondo punto. Intendi togliere il permesso di lettura dello script in modo che non possano nemmeno elaborarlo tramite bash. Destra?
sudo chmod g+x myfile.shnel terminale per aggiungere le autorizzazioni di esecuzione per il gruppo del file. Vedi il tutorial sui permessi dei file . Per gestire le autorizzazioni per più utenti contemporaneamente, utilizzare i gruppi, vedere ad esempio Gestione dei gruppi .
Non pensarci in questo modo. Posso eseguire questo file? Pensalo nel modo in cui: Chi può eseguire questo file?
Se il computer è tuo e il file è tuo, sono sicuro che puoi eseguirlo. Potresti voler approfondire i comandi come chmod e chown e le autorizzazioni dei file.
Spero che aiuti.
La execsyscall del kernel Linux fallisce EACCESse il file non è eseguibile
Mentre puoi farlo sh myprog.sh(che legge solo i file e li interpreta), provando a eseguire il programma come ./myprog.shnon può funzionare, da quando lo fai:
execchiamata di sistema attivata./myprog.shexecchiamata di sistema del kernel Linux come spiegato in: /programming/2429511/why-do-people-write-the-usr-bin-env-python-shebang-on -la-prima-line-of-a-pyt / 40938801 # 40938801Questo può essere verificato con main.c:
#define _XOPEN_SOURCE 700
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
int main(void) {
char *argv[] = {"myprog", NULL};
char *envp[] = {NULL};
int ret;
ret = execve("myprog.sh", argv, envp);
perror("execve");
printf("%d\n", errno);
printf("%d\n", EACCES);
}
e myprog.sh:
#!/bin/sh
echo worked
Se myprog.shnon è eseguibile, mainnon riesce con:
execve: Permission denied
13
13
Testato in Ubuntu 17.10, gcc -std=c99.
POSIX 7 menziona che a:
Le funzioni exec, ad eccezione di fexecve (), falliranno se:
[EACCES] L'autorizzazione di ricerca viene negata per una directory elencata nel prefisso del percorso del nuovo file di immagine di processo, oppure il nuovo file di immagine di processo nega l'autorizzazione di esecuzione.
Ulteriori motivazioni sono disponibili all'indirizzo: /security/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats-the