Tòa nhà exec
của nhân Linux không thành công EACCES
nế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.sh
khô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.sh
không thể thực thi được, main
thấ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