В обоих случаях происходит одно и то же :для непосредственного выполнения файла, должен быть установлен бит выполнения, а файловая система не может быть смонтирована noexec. Но это ничего не мешает читать эти файлы.
Когда скрипт bash запускается как ./hello_world
и файл не является исполняемым (либо нет бита разрешения на выполнение, либо нет exec в файловой системе ), строка #!
даже не проверил , потому что система даже не загружает файл. Сценарий никогда не "выполняется" в соответствующем смысле.
В случае с bash./hello_world
опция файловой системы noexec просто не так хороша, как хотелось бы. Запущенная команда bash
— это /bin/bash
, а /bin
не находится в файловой системе с noexec
. Так что заводится без проблем. Системе все равно, что bash (, или python, или perl, или что-то еще )является интерпретатором. Он просто запускает команду, которую вы дали (/bin/bash
), с аргументом, который оказывается файлом. В случае bash или другой оболочки этот файл содержит список команд для выполнения, но теперь мы «прошли» все, что будет проверять биты выполнения файла. Этот чек не несет ответственности за то, что произойдет позже.
Рассмотрим этот случай:
$ cat hello_world | /bin/bash
… или для тех, кому не нравится бессмысленное использование кошек:
$ /bin/bash < hello_world
Последовательность "shbang" #!
в начале файла — это всего лишь приятная магия, позволяющая эффективно делать то же самое, когда вы пытаетесь выполнить файл как команду. Вам может быть полезна эта статья LWN.net:Как запускаются программы .
Если вы хотите подключить отдельные внешние хосты к локальной сети через WireGuard, вам нужно сделать три ключевых вещи::
AllowedIPs
конфигурации WireGuard на каждом внешнем хозяин sysctl -w net.ipv4.ip_forward=1
)iptables
правил)Полный пример этого здесь:
https://www.procustodibus.com/blog/2020/11/wireguard-point-to-site-config/
В этом примере подсеть локальной сети — 192.168.200.0/24
, так что это значение AllowedIPs
установлено в конфигурации WireGuard внешнего хоста (Конечная точка A в примере):
AllowedIPs = 192.168.200.0/24
И в этом примере пересылка пакетов и маскировка выполняются путем добавления следующего в конфигурацию WireGuard на хосте WireGuard на стороне локальной сети -(Хост β в примере):
# IP forwarding
PreUp = sysctl -w net.ipv4.ip_forward=1
# IP masquerading
PreUp = iptables -t mangle -A PREROUTING -i wg0 -j MARK --set-mark 0x30
PreUp = iptables -t nat -A POSTROUTING ! -o wg0 -m mark --mark 0x30 -j MASQUERADE
Когда интерфейс WireGuard wg0
включен на узле WireGuard со стороны локальной сети -, внешний узел может подключаться к любому узлу в локальной сети через свой локальный адрес --, в примере внешний узел (Конечная точка A )может подключаться к хосту LAN (конечной точке B )через локальный адрес конечной точки B 192.168.200.22
.