Из-за чего может быть ошибка 'execve(script) error 13 (Permission denied)'?
strace:
26284 execve("/bin/suid/bash", ["/bin/suid/bash"], 0x7ffc11b4b2b8 /* 76 vars */) = 0
26284 brk(NULL) = 0x5ff5ee161000
26284 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7d8540323000
26284 access(0x7d85403151a0, R_OK) = -1 ENOENT (No such file or directory)
26284 openat(AT_FDCWD, 0x7d8540313fc3, O_RDONLY|O_CLOEXEC) = 3
26284 newfstatat(3, 0x7d8540314ba1, 0x7ffc7a798000, AT_EMPTY_PATH) = 0
26284 mmap(NULL, 34119, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7d85402db000
26284 close(3) = 0
26284 openat(AT_FDCWD, 0x7d85403230a0, O_RDONLY|O_CLOEXEC) = 3
26284 read(3, 0x7ffc7a7981b8, 832) = 832
26284 pread64(3, 0x7ffc7a797de0, 784, 64) = 784
26284 newfstatat(3, 0x7d8540314ba1, 0x7ffc7a798060, AT_EMPTY_PATH) = 0
26284 pread64(3, 0x7ffc7a797c80, 784, 64) = 784
26284 mmap(NULL, 1998224, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7d85400f3000
26284 mmap(0x7d8540119000, 1421312, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x26000) = 0x7d8540119000
26284 mmap(0x7d8540274000, 344064, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x181000) = 0x7d8540274000
26284 mmap(0x7d85402c8000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1d4000) = 0x7d85402c8000
26284 mmap(0x7d85402ce000, 52624, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7d85402ce000
26284 close(3) = 0
26284 mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7d8540320000
26284 arch_prctl(ARCH_SET_FS, 0x7d8540320740) = 0
26284 set_tid_address(0x7d8540320a10) = 26284
26284 set_robust_list(0x7d8540320a20, 24) = 0
26284 rseq(0x7d8540321060, 0x20, 0, 0x53053053) = 0
26284 mprotect(0x7d85402c8000, 16384, PROT_READ) = 0
26284 mprotect(0x5ff5cfe1c000, 4096, PROT_READ) = 0
26284 mprotect(0x7d854031c000, 8192, PROT_READ) = 0
26284 prlimit64(0, RLIMIT_STACK, NULL, 0x7ffc7a798bb0) = 0
26284 munmap(0x7d85402db000, 34119) = 0
26284 setuid(0) = -1 EPERM (Operation not permitted)
26284 execve(0x5ff5cfe1b004, 0x7ffc7a798f98, 0x7ffc7a798fa8) = -1 EACCES (Permission denied)
26284 write(2, 0x7ffc7a7967d0, 44) = 44
26284 exit_group(-1) = ?
26284 +++ exited with 255 +++
На этой программе suid-bit. Дальше она должна запускать script.
Исходник:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
char* script = "/bin/suid/bash_";
extern char **environ;
int main(int argc, char **argv) {
argv[0] = script;
setuid(0);
execve(script, argv, environ);
fprintf(stderr, "execve(script) error %d (%s)\n", errno, strerror(errno));
return -1;
}