execsyscall ของลินุกซ์ล้มเหลวด้วยEACCESถ้าไฟล์ไม่ปฏิบัติการ
ในขณะที่คุณสามารถทำได้sh myprog.shพยายามเรียกใช้โปรแกรมในขณะที่./myprog.shไม่สามารถทำงานได้เนื่องจากเมื่อคุณทำเช่นนั้น:
สิ่งนี้สามารถตรวจสอบได้ด้วย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);
}
และmyprog.sh:
#!/bin/sh
echo worked
หากmyprog.shไม่สามารถเรียกใช้งานได้mainล้มเหลวด้วย:
execve: Permission denied
13
13
การทดสอบใน Ubuntu gcc -std=c9917.10,
POSIX 7 กล่าวถึงที่:
ฟังก์ชั่น exec ยกเว้น fexecve () จะล้มเหลวหาก:
[EACCES] สิทธิ์การค้นหาถูกปฏิเสธสำหรับไดเรกทอรีที่ระบุไว้ในคำนำหน้าพา ธ ของไฟล์อิมเมจกระบวนการใหม่หรือไฟล์อิมเมจกระบวนการใหม่ปฏิเสธการอนุญาตให้ใช้งาน
เหตุผลเพิ่มเติมสามารถดูได้ที่: https://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats-the