Я могу запустить скрипты (.sh) с и без их установки в качестве исполняемого. Так где именно это имеет значение?
Допустим, у вас есть файл, myscript
содержащий следующее:
#!/bin/bash
echo "Hello, World!"
Если вы сделаете этот файл исполняемым и запустите его с помощью ./myscript
, то ядро увидит, что первые два байта - #!
это файл сценария. Затем ядро будет использовать оставшуюся часть строки в качестве интерпретатора и передаст файл в качестве первого аргумента. Итак, он работает:
/bin/bash myscript
и bash читает файл и выполняет содержащиеся в нем команды.
Таким образом, для того, чтобы bash (или любой другой интерпретатор, которого требует ваш скрипт) «выполнял» скрипт, ему нужно только иметь возможность прочитать файл.
Таким образом, для сценариев бит выполнения просто делает его более удобным для выполнения. Пока bash является исполняемым, вы всегда можете запустить bash с файлом сценария в качестве аргумента, или запустить bash в интерактивном режиме и скопировать и вставить строку за строкой в ваш терминал, чтобы выполнить команды.
Убедитесь, что вы не путаете «выполнение сценария оболочки» с «запустите сценарий оболочки с помощью sh».
Это не будет зависеть от прав доступа к файлам
file.sh
:Вы выполняете
sh
(который разрешает программу/bin/sh
), который читаетfile.sh
и выполняет свой код.Права доступа к файлам будут действовать, если вы действительно выполните сам скрипт :
Обратите внимание, что права доступа к файлам не поддерживаются файловыми системами, отличными от Linux, такими как FAT. Таким образом, даже если вы запустите
chmod -x file.sh
файл, у него останутся прежние права доступа.Разрешение на выполнение обеспечивается файловой системой. Но программы также могут «выполнять» код, считывая содержимое файла, что обходит права файловой системы на «выполнить».
источник
bash
) для выполнения - чтобы заблокировать, что вам также придется отозвать ихread
разрешение.If you set the executable permission, the script can be run directly by users who have that permission - whether they have it on a group, world or owner basis
Но как разрешение предоставляется разным пользователям путем проверки исполняемого разрешения? И я получил ваше второе замечание. Вы имеете в виду удаление их разрешения на чтение сценария, чтобы они не могли даже обработать его через bash. Правильно?sudo chmod g+x myfile.sh
в терминале, чтобы добавить разрешения на выполнение для группы файла. См. Учебник по разрешениям для файлов . Чтобы управлять разрешениями для нескольких пользователей одновременно, вы должны использовать группы, см., Например, Управление группами .Не думай об этом так. Могу ли я выполнить этот файл? Подумайте об этом так: кто может выполнить этот файл?
Если компьютер принадлежит вам, а файл - ваш, я уверен, что вы сможете выполнить его. Возможно, вы захотите изучить такие команды, как chmod и chown , а также права доступа к файлам.
Надеюсь, это поможет.
источник
exec
Системный вызов в Linux ядра не удается с ,EACCES
если файл не является исполняемымХотя вы можете сделать
sh myprog.sh
(который только читает файлы и интерпретирует это), пытаясь запустить программу как./myprog.sh
не может работать, так как, когда вы делаете это:exec
системный вызов./myprog.sh
exec
системным вызовом ядра Linux, как описано по адресу: /programming/2429511/why-do-people-write-the-usr-bin-env-python-shebang-on -The-первой линии в своем -Пыть / 40938801 # 40938801Это можно проверить с помощью
main.c
:и
myprog.sh
:Если
myprog.sh
это не исполняемый файл, происходитmain
сбой с:Проверено в Ubuntu 17.10
gcc -std=c99
.POSIX 7 упоминает, что в:
Дополнительную информацию можно найти по адресу: /security/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats-the
источник