exec
লিনাক্স কার্নেলের প্রাপ্ত syscall সঙ্গে ব্যর্থ 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
উবুন্টু 17.10, এ পরীক্ষিত gcc -std=c99
।
পজিক্স 7 উল্লেখ করেছে যে:
Fexecve () বাদে এক্সিকিউটিভ ফাংশনগুলি ব্যর্থ হবে যদি:
[EACCES] নতুন প্রক্রিয়া চিত্রের ফাইলের উপসর্গের তালিকাভুক্ত ডিরেক্টরিটির জন্য অনুসন্ধানের অনুমতি অস্বীকার করা হয়েছে, বা নতুন প্রক্রিয়া চিত্র ফাইলটি কার্যকর করার অনুমতি অস্বীকার করে।
আরও যুক্তি এখানে পাওয়া যাবে: /security/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats-the