Попробуйте Virtualbox, а не бесплатно, и интернет подключен через ваш хост Ubuntu, поэтому нет беспорядка. Я нашел это, на самом деле, лучшей виртуальной машиной, вы даже получаете 3D-ускорение для графики.
Альтернативно вы можете посмотреть на двойная загрузка, тогда вы можете иметь окна и Ubuntu на одном компьютере, и оба запускаются на полной скорости
. Двойная загрузка - лучший способ пойти на мой взгляд, если вам понадобится совет по этому сообщению здесь и пусть я знаю.
Допустим, у вас есть файл myscript, содержащий следующее:
#!/bin/bash
echo "Hello, World!"
Если вы сделаете этот файл исполняемым и запустите его с помощью ./myscript, то ядро увидит, что первые два байта #!, что означает, что это файл сценария. Затем ядро будет использовать остальную часть строки в качестве интерпретатора и передать файл в качестве первого аргумента. Таким образом, он запускается:
/bin/bash myscript
, а bash читает файл и выполняет команды, которые он содержит.
Таким образом, для bash (или любого другого интерпретатора, который требуется вашему сценарию) для «выполнения», сценарий, он должен только читать файл.
Итак, для скриптов бит выполнения просто делает его более удобным для его выполнения. До тех пор, пока bash является исполняемым, вы всегда можете запустить bash с файлом сценария в качестве аргумента или запустить bash в интерактивном режиме и скопировать в строку сценарий по строке в ваш терминал, чтобы выполнить команды.
Допустим, у вас есть файл myscript, содержащий следующее:
#!/bin/bash
echo "Hello, World!"
Если вы сделаете этот файл исполняемым и запустите его с помощью ./myscript, то ядро увидит, что первые два байта #!, что означает, что это файл сценария. Затем ядро будет использовать остальную часть строки в качестве интерпретатора и передать файл в качестве первого аргумента. Таким образом, он запускается:
/bin/bash myscript
, а bash читает файл и выполняет команды, которые он содержит.
Таким образом, для bash (или любого другого интерпретатора, который требуется вашему сценарию) для «выполнения», сценарий, он должен только читать файл.
Итак, для скриптов бит выполнения просто делает его более удобным для его выполнения. До тех пор, пока bash является исполняемым, вы всегда можете запустить bash с файлом сценария в качестве аргумента или запустить bash в интерактивном режиме и скопировать в строку сценарий по строке в ваш терминал, чтобы выполнить команды.
Допустим, у вас есть файл myscript, содержащий следующее:
#!/bin/bash
echo "Hello, World!"
Если вы сделаете этот файл исполняемым и запустите его с помощью ./myscript, то ядро увидит, что первые два байта #!, что означает, что это файл сценария. Затем ядро будет использовать остальную часть строки в качестве интерпретатора и передать файл в качестве первого аргумента. Таким образом, он запускается:
/bin/bash myscript
, а bash читает файл и выполняет команды, которые он содержит.
Таким образом, для bash (или любого другого интерпретатора, который требуется вашему сценарию) для «выполнения», сценарий, он должен только читать файл.
Итак, для скриптов бит выполнения просто делает его более удобным для его выполнения. До тех пор, пока bash является исполняемым, вы всегда можете запустить bash с файлом сценария в качестве аргумента или запустить bash в интерактивном режиме и скопировать в строку сценарий по строке в ваш терминал, чтобы выполнить команды.
Допустим, у вас есть файл myscript, содержащий следующее:
#!/bin/bash
echo "Hello, World!"
Если вы сделаете этот файл исполняемым и запустите его с помощью ./myscript, то ядро увидит, что первые два байта #!, что означает, что это файл сценария. Затем ядро будет использовать остальную часть строки в качестве интерпретатора и передать файл в качестве первого аргумента. Таким образом, он запускается:
/bin/bash myscript
, а bash читает файл и выполняет команды, которые он содержит.
Таким образом, для bash (или любого другого интерпретатора, который требуется вашему сценарию) для «выполнения», сценарий, он должен только читать файл.
Итак, для скриптов бит выполнения просто делает его более удобным для его выполнения. До тех пор, пока bash является исполняемым, вы всегда можете запустить bash с файлом сценария в качестве аргумента или запустить bash в интерактивном режиме и скопировать в строку сценарий по строке в ваш терминал, чтобы выполнить команды.
Допустим, у вас есть файл myscript, содержащий следующее:
#!/bin/bash
echo "Hello, World!"
Если вы сделаете этот файл исполняемым и запустите его с помощью ./myscript, то ядро увидит, что первые два байта #!, что означает, что это файл сценария. Затем ядро будет использовать остальную часть строки в качестве интерпретатора и передать файл в качестве первого аргумента. Таким образом, он запускается:
/bin/bash myscript
, а bash читает файл и выполняет команды, которые он содержит.
Таким образом, для bash (или любого другого интерпретатора, который требуется вашему сценарию) для «выполнения», сценарий, он должен только читать файл.
Итак, для скриптов бит выполнения просто делает его более удобным для его выполнения. До тех пор, пока bash является исполняемым, вы всегда можете запустить bash с файлом сценария в качестве аргумента или запустить bash в интерактивном режиме и скопировать в строку сценарий по строке в ваш терминал, чтобы выполнить команды.
Допустим, у вас есть файл myscript, содержащий следующее:
#!/bin/bash
echo "Hello, World!"
Если вы сделаете этот файл исполняемым и запустите его с помощью ./myscript, то ядро увидит, что первые два байта #!, что означает, что это файл сценария. Затем ядро будет использовать остальную часть строки в качестве интерпретатора и передать файл в качестве первого аргумента. Таким образом, он запускается:
/bin/bash myscript
, а bash читает файл и выполняет команды, которые он содержит.
Таким образом, для bash (или любого другого интерпретатора, который требуется вашему сценарию) для «выполнения», сценарий, он должен только читать файл.
Итак, для скриптов бит выполнения просто делает его более удобным для его выполнения. До тех пор, пока bash является исполняемым, вы всегда можете запустить bash с файлом сценария в качестве аргумента или запустить bash в интерактивном режиме и скопировать в строку сценарий по строке в ваш терминал, чтобы выполнить команды.
Допустим, у вас есть файл myscript, содержащий следующее:
#!/bin/bash
echo "Hello, World!"
Если вы сделаете этот файл исполняемым и запустите его с помощью ./myscript, то ядро увидит, что первые два байта #!, что означает, что это файл сценария. Затем ядро будет использовать остальную часть строки в качестве интерпретатора и передать файл в качестве первого аргумента. Таким образом, он запускается:
/bin/bash myscript
, а bash читает файл и выполняет команды, которые он содержит.
Таким образом, для bash (или любого другого интерпретатора, который требуется вашему сценарию) для «выполнения», сценарий, он должен только читать файл.
Итак, для скриптов бит выполнения просто делает его более удобным для его выполнения. До тех пор, пока bash является исполняемым, вы всегда можете запустить bash с файлом сценария в качестве аргумента или запустить bash в интерактивном режиме и скопировать в строку сценарий по строке в ваш терминал, чтобы выполнить команды.
Допустим, у вас есть файл myscript, содержащий следующее:
#!/bin/bash
echo "Hello, World!"
Если вы сделаете этот файл исполняемым и запустите его с помощью ./myscript, то ядро увидит, что первые два байта #!, что означает, что это файл сценария. Затем ядро будет использовать остальную часть строки в качестве интерпретатора и передать файл в качестве первого аргумента. Таким образом, он запускается:
/bin/bash myscript
, а bash читает файл и выполняет команды, которые он содержит.
Таким образом, для bash (или любого другого интерпретатора, который требуется вашему сценарию) для «выполнения», сценарий, он должен только читать файл.
Итак, для скриптов бит выполнения просто делает его более удобным для его выполнения. До тех пор, пока bash является исполняемым, вы всегда можете запустить bash с файлом сценария в качестве аргумента или запустить bash в интерактивном режиме и скопировать в строку сценарий по строке в ваш терминал, чтобы выполнить команды.
Допустим, у вас есть файл myscript
, содержащий следующее:
#! / bin / bash echo "Hello, World!"
Если вы делаете этот файл исполняемым и запускаете его с помощью ./ myscript
, то ядро увидит, что первые два байта - #!
, что означает, что это файл сценария. Затем ядро будет использовать остальную часть строки в качестве интерпретатора и передать файл в качестве первого аргумента. Таким образом, он запускается:
/ bin / bash myscript
, а bash читает файл и выполняет команды, которые он содержит.
Таким образом, для bash (или любого другого интерпретатора, который требуется вашему скрипту) для «выполнения» сценария, он должен только читать файл.
Итак, для скриптов бит выполнения просто немного более удобно выполнять его. Пока bash является исполняемым, вы всегда можете запустить bash с файлом сценария в качестве аргумента или запустить bash в интерактивном режиме и скопировать в строку сценарий по строке в ваш терминал, чтобы выполнить команды.
Допустим, у вас есть файл myscript
, содержащий следующее:
#! / bin / bash echo "Hello, World!"
Если вы делаете этот файл исполняемым и запускаете его с помощью ./ myscript
, то ядро увидит, что первые два байта - #!
, что означает, что это файл сценария. Затем ядро будет использовать остальную часть строки в качестве интерпретатора и передать файл в качестве первого аргумента. Таким образом, он запускается:
/ bin / bash myscript
, а bash читает файл и выполняет команды, которые он содержит.
Таким образом, для bash (или любого другого интерпретатора, который требуется вашему скрипту) для «выполнения» сценария, он должен только читать файл.
Итак, для скриптов бит выполнения просто немного более удобно выполнять его. Пока bash является исполняемым, вы всегда можете запустить bash с файлом сценария в качестве аргумента или запустить bash в интерактивном режиме и скопировать в строку сценарий по строке в ваш терминал, чтобы выполнить команды.
Убедитесь, что вы не сбиваете с толку «выполнение сценария оболочки» с помощью «запуска скрипта оболочки с помощью sh».
На file.sh не будут влиять права доступа к файлам:
[ f1]Вы выполняете sh (который разрешает программу /bin/sh), которая читает file.sh и выполняет его код.
Разрешения для файлов будут иметь эффект, если вы действительно выполняете скрипт self:
./file.sh
Обратите внимание, что разрешения файлов не поддерживаются файловыми системами, отличными от Linux, например FAT. Таким образом, даже если вы запустите chmod -x file.sh, у файла все еще будут свои прежние разрешения.
Выполнение разрешения выполняется файловой системой. Но программы также могут «выполнять» код, читая содержимое файла, которое обходит разрешения файловой системы «execute».
Не думай об этом так. Могу ли я выполнить этот файл? Подумайте об этом так: Кто может выполнить этот файл?
Если компьютер принадлежит вам, и файл принадлежит вам, я уверен, что вы можете его выполнить. Возможно, вам захочется взглянуть дальше на команды, такие как chmod и chown, и права доступа к файлам.
Надеюсь, что это поможет.
Сценарий exec ядра Linux не работает с EACCES, если файл не является исполняемым
Пока вы можете делать sh myprog.sh, попытка запустить программу как ./myprog.sh не может работать, так как когда вы это делаете:
Bash использует системный вызов exec на ./myprog.sh, shebangs интерпретируются непосредственно системным вызовом exec ядра Linux, как описано в: https://stackoverflow.com / questions / 2429511 / why-do-people-write-the-usr-bin-env-python-shebang-on-the-first-line-of-a-pyt / 40938801 # 40938801 ядро Linux отказывается выполнять файлы без исполняемое разрешениеЭто можно проверить с помощью 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 упоминает, что при:
Функции exec, за исключением fexecve (), не будет выполнено, если: [EACCES] Разрешение поиска отклонено для каталога, указанного в префиксе пути нового файла образа процесса, или новый файл образа процесса отклоняет разрешение на выполнение.Дальнейшее обоснование можно найти по адресу: https://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypass-is-it-superfluous-or- Что-кнопки
Сценарий exec ядра Linux не работает с EACCES, если файл не является исполняемым
Пока вы можете делать sh myprog.sh, попытка запустить программу как ./myprog.sh не может работать, так как когда вы это делаете:
Bash использует системный вызов exec на ./myprog.sh, shebangs интерпретируются непосредственно системным вызовом exec ядра Linux, как описано в: https://stackoverflow.com / questions / 2429511 / why-do-people-write-the-usr-bin-env-python-shebang-on-the-first-line-of-a-pyt / 40938801 # 40938801 ядро Linux отказывается выполнять файлы без исполняемое разрешениеЭто можно проверить с помощью 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 упоминает, что при:
Функции exec, за исключением fexecve (), не будет выполнено, если: [EACCES] Разрешение поиска отклонено для каталога, указанного в префиксе пути нового файла образа процесса, или новый файл образа процесса отклоняет разрешение на выполнение.Дальнейшее обоснование можно найти по адресу: https://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypass-is-it-superfluous-or- Что-кнопки
Убедитесь, что вы не сбиваете с толку «выполнение сценария оболочки» с помощью «запуска скрипта оболочки с помощью sh».
На file.sh не будут влиять права доступа к файлам:
sh file.sh
Вы выполняете sh (который разрешает программу /bin/sh), которая читает file.sh и выполняет его код.
Разрешения для файлов будут иметь эффект, если вы действительно выполняете скрипт self:
./file.sh
Обратите внимание, что разрешения файлов не поддерживаются файловыми системами, отличными от Linux, например FAT. Таким образом, даже если вы запустите chmod -x file.sh, у файла все еще будут свои прежние разрешения.
Выполнение разрешения выполняется файловой системой. Но программы также могут «выполнять» код, читая содержимое файла, которое обходит разрешения файловой системы «execute».
Не думай об этом так. Могу ли я выполнить этот файл? Подумайте об этом так: Кто может выполнить этот файл?
Если компьютер принадлежит вам, и файл принадлежит вам, я уверен, что вы можете его выполнить. Возможно, вам захочется взглянуть дальше на команды, такие как chmod и chown, и права доступа к файлам.
Надеюсь, что это поможет.
Сценарий exec ядра Linux не работает с EACCES, если файл не является исполняемым
Пока вы можете делать sh myprog.sh, попытка запустить программу как ./myprog.sh не может работать, так как когда вы это делаете:
Bash использует системный вызов exec на ./myprog.sh, shebangs интерпретируются непосредственно системным вызовом exec ядра Linux, как описано в: https://stackoverflow.com / questions / 2429511 / why-do-people-write-the-usr-bin-env-python-shebang-on-the-first-line-of-a-pyt / 40938801 # 40938801 ядро Linux отказывается выполнять файлы без исполняемое разрешениеЭто можно проверить с помощью 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 упоминает, что при:
Функции exec, за исключением fexecve (), не будет выполнено, если: [EACCES] Разрешение поиска отклонено для каталога, указанного в префиксе пути нового файла образа процесса, или новый файл образа процесса отклоняет разрешение на выполнение.Дальнейшее обоснование можно найти по адресу: https://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypass-is-it-superfluous-or- Что-кнопки
Убедитесь, что вы не сбиваете с толку «выполнение сценария оболочки» с помощью «запуска скрипта оболочки с помощью sh».
На file.sh не будут влиять права доступа к файлам:
sh file.sh
Вы выполняете sh (который разрешает программу /bin/sh), которая читает file.sh и выполняет его код.
Разрешения для файлов будут иметь эффект, если вы действительно выполняете скрипт self:
./file.sh
Обратите внимание, что разрешения файлов не поддерживаются файловыми системами, отличными от Linux, например FAT. Таким образом, даже если вы запустите chmod -x file.sh, у файла все еще будут свои прежние разрешения.
Выполнение разрешения выполняется файловой системой. Но программы также могут «выполнять» код, читая содержимое файла, которое обходит разрешения файловой системы «execute».
Не думай об этом так. Могу ли я выполнить этот файл? Подумайте об этом так: Кто может выполнить этот файл?
Если компьютер принадлежит вам, и файл принадлежит вам, я уверен, что вы можете его выполнить. Возможно, вам захочется взглянуть дальше на команды, такие как chmod и chown, и права доступа к файлам.
Надеюсь, что это поможет.
Сценарий exec ядра Linux не работает с EACCES, если файл не является исполняемым
Пока вы можете делать sh myprog.sh, попытка запустить программу как ./myprog.sh не может работать, так как когда вы это делаете:
Bash использует системный вызов exec на ./myprog.sh, shebangs интерпретируются непосредственно системным вызовом exec ядра Linux, как описано в: https://stackoverflow.com / questions / 2429511 / why-do-people-write-the-usr-bin-env-python-shebang-on-the-first-line-of-a-pyt / 40938801 # 40938801 ядро Linux отказывается выполнять файлы без исполняемое разрешениеЭто можно проверить с помощью 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 упоминает, что при:
Функции exec, за исключением fexecve (), не будет выполнено, если: [EACCES] Разрешение поиска отклонено для каталога, указанного в префиксе пути нового файла образа процесса, или новый файл образа процесса отклоняет разрешение на выполнение.Дальнейшее обоснование можно найти по адресу: https://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypass-is-it-superfluous-or- Что-кнопки
Убедитесь, что вы не сбиваете с толку «выполнение сценария оболочки» с помощью «запуска скрипта оболочки с помощью sh».
На file.sh не будут влиять права доступа к файлам:
sh file.sh
Вы выполняете sh (который разрешает программу /bin/sh), которая читает file.sh и выполняет его код.
Разрешения для файлов будут иметь эффект, если вы действительно выполняете скрипт self:
./file.sh
Обратите внимание, что разрешения файлов не поддерживаются файловыми системами, отличными от Linux, например FAT. Таким образом, даже если вы запустите chmod -x file.sh, у файла все еще будут свои прежние разрешения.
Выполнение разрешения выполняется файловой системой. Но программы также могут «выполнять» код, читая содержимое файла, которое обходит разрешения файловой системы «execute».
Не думай об этом так. Могу ли я выполнить этот файл? Подумайте об этом так: Кто может выполнить этот файл?
Если компьютер принадлежит вам, и файл принадлежит вам, я уверен, что вы можете его выполнить. Возможно, вам захочется взглянуть дальше на команды, такие как chmod и chown, и права доступа к файлам.
Надеюсь, что это поможет.
Сценарий exec ядра Linux не работает с EACCES, если файл не является исполняемым
Пока вы можете делать sh myprog.sh, попытка запустить программу как ./myprog.sh не может работать, так как когда вы это делаете:
Bash использует системный вызов exec на ./myprog.sh, shebangs интерпретируются непосредственно системным вызовом exec ядра Linux, как описано в: https://stackoverflow.com / questions / 2429511 / why-do-people-write-the-usr-bin-env-python-shebang-on-the-first-line-of-a-pyt / 40938801 # 40938801 ядро Linux отказывается выполнять файлы без исполняемое разрешениеЭто можно проверить с помощью 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 упоминает, что при:
Функции exec, за исключением fexecve (), не будет выполнено, если: [EACCES] Разрешение поиска отклонено для каталога, указанного в префиксе пути нового файла образа процесса, или новый файл образа процесса отклоняет разрешение на выполнение.Дальнейшее обоснование можно найти по адресу: https://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypass-is-it-superfluous-or- Что-кнопки
Убедитесь, что вы не сбиваете с толку «выполнение сценария оболочки» с помощью «запуска скрипта оболочки с помощью sh».
На file.sh не будут влиять права доступа к файлам:
sh file.sh
Вы выполняете sh (который разрешает программу /bin/sh), которая читает file.sh и выполняет его код.
Разрешения для файлов будут иметь эффект, если вы действительно выполняете скрипт self:
./file.sh
Обратите внимание, что разрешения файлов не поддерживаются файловыми системами, отличными от Linux, например FAT. Таким образом, даже если вы запустите chmod -x file.sh, у файла все еще будут свои прежние разрешения.
Выполнение разрешения выполняется файловой системой. Но программы также могут «выполнять» код, читая содержимое файла, которое обходит разрешения файловой системы «execute».
Не думай об этом так. Могу ли я выполнить этот файл? Подумайте об этом так: Кто может выполнить этот файл?
Если компьютер принадлежит вам, и файл принадлежит вам, я уверен, что вы можете его выполнить. Возможно, вам захочется взглянуть дальше на команды, такие как chmod и chown, и права доступа к файлам.
Надеюсь, что это поможет.
Сценарий exec ядра Linux не работает с EACCES, если файл не является исполняемым
Пока вы можете делать sh myprog.sh, попытка запустить программу как ./myprog.sh не может работать, так как когда вы это делаете:
Bash использует системный вызов exec на ./myprog.sh, shebangs интерпретируются непосредственно системным вызовом exec ядра Linux, как описано в: https://stackoverflow.com / questions / 2429511 / why-do-people-write-the-usr-bin-env-python-shebang-on-the-first-line-of-a-pyt / 40938801 # 40938801 ядро Linux отказывается выполнять файлы без исполняемое разрешениеЭто можно проверить с помощью 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 упоминает, что при:
Функции exec, за исключением fexecve (), не будет выполнено, если: [EACCES] Разрешение поиска отклонено для каталога, указанного в префиксе пути нового файла образа процесса, или новый файл образа процесса отклоняет разрешение на выполнение.Дальнейшее обоснование можно найти по адресу: https://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypass-is-it-superfluous-or- Что-кнопки
Убедитесь, что вы не сбиваете с толку «выполнение сценария оболочки» с помощью «запуска скрипта оболочки с помощью sh».
На file.sh не будут влиять права доступа к файлам:
sh file.sh
Вы выполняете sh (который разрешает программу /bin/sh), которая читает file.sh и выполняет его код.
Разрешения для файлов будут иметь эффект, если вы действительно выполняете скрипт self:
./file.sh
Обратите внимание, что разрешения файлов не поддерживаются файловыми системами, отличными от Linux, например FAT. Таким образом, даже если вы запустите chmod -x file.sh, у файла все еще будут свои прежние разрешения.
Выполнение разрешения выполняется файловой системой. Но программы также могут «выполнять» код, читая содержимое файла, которое обходит разрешения файловой системы «execute».
Не думай об этом так. Могу ли я выполнить этот файл? Подумайте об этом так: Кто может выполнить этот файл?
Если компьютер принадлежит вам, и файл принадлежит вам, я уверен, что вы можете его выполнить. Возможно, вам захочется взглянуть дальше на команды, такие как chmod и chown, и права доступа к файлам.
Надеюсь, что это поможет.
Сценарий exec ядра Linux не работает с EACCES, если файл не является исполняемым
Пока вы можете делать sh myprog.sh, попытка запустить программу как ./myprog.sh не может работать, так как когда вы это делаете:
Bash использует системный вызов exec на ./myprog.sh, shebangs интерпретируются непосредственно системным вызовом exec ядра Linux, как описано в: https://stackoverflow.com / questions / 2429511 / why-do-people-write-the-usr-bin-env-python-shebang-on-the-first-line-of-a-pyt / 40938801 # 40938801 ядро Linux отказывается выполнять файлы без исполняемое разрешениеЭто можно проверить с помощью 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 упоминает, что при:
Функции exec, за исключением fexecve (), не будет выполнено, если: [EACCES] Разрешение поиска отклонено для каталога, указанного в префиксе пути нового файла образа процесса, или новый файл образа процесса отклоняет разрешение на выполнение.Дальнейшее обоснование можно найти по адресу: https://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypass-is-it-superfluous-or- Что-кнопки
Убедитесь, что вы не сбиваете с толку «выполнение сценария оболочки» с помощью «запуска скрипта оболочки с помощью sh».
На file.sh не будут влиять права доступа к файлам:
sh file.sh
Вы выполняете sh (который разрешает программу /bin/sh), которая читает file.sh и выполняет его код.
Разрешения для файлов будут иметь эффект, если вы действительно выполняете скрипт self:
./file.sh
Обратите внимание, что разрешения файлов не поддерживаются файловыми системами, отличными от Linux, например FAT. Таким образом, даже если вы запустите chmod -x file.sh, у файла все еще будут свои прежние разрешения.
Выполнение разрешения выполняется файловой системой. Но программы также могут «выполнять» код, читая содержимое файла, которое обходит разрешения файловой системы «execute».