The execsyscall dari kernel Linux gagal dengan EACCESjika file tersebut tidak executable
Meskipun Anda dapat melakukannya sh myprog.sh, mencoba menjalankan program karena ./myprog.shtidak dapat bekerja, karena ketika Anda melakukannya:
Ini dapat diverifikasi dengan 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);
}
dan myprog.sh:
#!/bin/sh
echo worked
Jika myprog.shtidak dapat dieksekusi, maingagal dengan:
execve: Permission denied
13
13
Diuji di Ubuntu 17.10 gcc -std=c99,.
POSIX 7 menyebutkan bahwa pada:
Fungsi exec, kecuali untuk fexecve (), akan gagal jika:
[EACCES] Izin pencarian ditolak untuk direktori yang tercantum dalam awalan path file gambar proses baru, atau file gambar proses baru menolak izin eksekusi.
Dasar pemikiran lebih lanjut dapat ditemukan di: /security/66550/unix-execute-permission-can-be-easy-bypassed-is-it-superfluous-atau-whats-the