यदि फ़ाइल निष्पादन योग्य नहीं है, तो 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
Ubuntu 17.10 में परीक्षण किया गया gcc -std=c99।
POSIX 7 में उल्लेख है कि:
Fexecve () को छोड़कर निष्पादन कार्य, विफल हो जाएगा यदि:
[EACCES] नई प्रक्रिया छवि फ़ाइल के पथ उपसर्ग में सूचीबद्ध निर्देशिका के लिए खोज अनुमति से इनकार किया जाता है, या नई प्रक्रिया छवि फ़ाइल निष्पादन अनुमति से इनकार करती है।
इसके अलावा औचित्य यहां पाया जा सकता है: /security/66550/unix-execute-permission-can-be-easily-bypassed-is-it-supercuous-or-whats-the