execLinux çekirdeğinin syscall ile başarısız EACCESdosya çalıştırılabilir değilse
Yapabildiğiniz halde sh myprog.sh, programı çalıştıramayacağınız şekilde çalıştırmaya ./myprog.shçalışmak, bunu yaptığınızdan beri
Bu doğrulanabilir 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);
}
ve myprog.sh:
#!/bin/sh
echo worked
Eğer myprog.shçalıştırılabilir değil, mainbaşarısız:
execve: Permission denied
13
13
Ubuntu'da test edildi 17.10 gcc -std=c99,.
POSIX 7 şunlardan bahseder:
Fexecve () dışında exec işlevleri, aşağıdaki durumlarda başarısız olur:
[EACCES] Yeni işlem görüntü dosyasının yol ön ekinde listelenen bir dizin için arama izni reddedildi veya yeni işlem görüntü dosyası yürütme iznini reddetti.
Diğer gerekçeleri şu adreste bulabilirsiniz: /security/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats-the