Tòa nhà execcủa nhân Linux không thành công EACCESnếu tệp không thể thực thi được
Trong khi bạn có thể làm sh myprog.sh, cố gắng chạy chương trình như ./myprog.shkhông thể làm việc, kể từ khi bạn làm điều đó:
Điều này có thể được xác minh với 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);
}
và myprog.sh:
#!/bin/sh
echo worked
Nếu myprog.shkhông thể thực thi được, mainthất bại với:
execve: Permission denied
13
13
Đã thử nghiệm trong Ubuntu 17.10 , gcc -std=c99.
POSIX 7 đề cập rằng tại:
Các hàm exec, ngoại trừ fexecve (), sẽ thất bại nếu:
[EACCES] Quyền tìm kiếm bị từ chối đối với một thư mục được liệt kê trong tiền tố đường dẫn của tệp hình ảnh quy trình mới hoặc tệp hình ảnh quy trình mới từ chối quyền thực thi.
Cơ sở hợp lý khác có thể được tìm thấy tại: /security/66550/unix-execute- allow-can-be- easy-bypassed-is-it-superfupt-or-why-the