Можно ли заключать аргументы оболочки в символы *, отличные от *, кроме одинарных и двойных -кавычек?

Верхний ответ от dougBTV неверен. Я не могу ответить на его ответ, потому что у меня еще нет необходимых очков репутации, поэтому я объясню здесь:

Он использует зону по умолчанию "public". Он привязывает сети к этой зоне, а затем открывает порты в этой зоне. Но в конфигурации по умолчанию весь трафик проходит через зону по умолчанию, а не только исходные сети, к которым вы привязаны. Таким образом, его исходные команды --add -не имеют значения, а его команды --add -port теперь позволили всему миру получить доступ к этим портам.

Второй ответ Нормунда Калнберзиньша правильный. Вы хотите создать отдельную зону, привязать свою сеть/IP-адреса к этой зоне и открыть порты в этой зоне.

Кроме того, вы можете оставить все в зоне по умолчанию и использовать расширенные правила firewalld, чтобы разрешить доступ с определенных IP-адресов:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" accept'

Это разрешает весь трафик с 192.168.2.2 на все порты, и, поскольку я не указал зону, это будет применено к зоне по умолчанию "public" (используйте --получите -зону по умолчанию -чтобы проверить, какая у вас зона по умолчанию, и --получить -активные -зоны, чтобы увидеть, какие зоны используются в настоящее время ).

Чтобы разрешить доступ с этого IP только к определенному порту, я бы сделал:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" port port="1234" protocol="tcp" accept'

Лучше всего запускать эти команды без --постоянного (или --разрешения для краткости ), что влияет на работающий в данный момент брандмауэр. После проверки того, что ваше правило работает, запустите его снова с добавлением --perm, чтобы оно помнилось при последующих перезагрузках firewalld.

2
03.09.2020, 01:24
1 ответ

Вы не предоставили образец, поэтому я не уверен, подойдет ли он вам.

Использовать здесь документы:

echo "$(cat <<'EOF'
foo "x" bar 'x'
EOF
)"

Когда вы запустите это с помощью set -x, вы увидите, что bash избежит этого для вас:

+ echo 'foo "x" bar '\''x'\'''
foo "x" bar 'x'

Теперь с вашим образцом:

./show-results "$(cat <<'EOF'
SELECT * FROM `table` WHERE `column` LIKE "%\'%"
EOF
)"

Выдает правильный экранированный аргумент:

./show-results 'SELECT * FROM `table` WHERE `column` LIKE "%\'\''%"'

Первая обратная косая черта находится внутри '', поэтому она не действует как экранирование и приводит к \, вторая — снаружи ''и используется для экранирования одиночного '.

4
18.03.2021, 23:07

Теги

Похожие вопросы