Я бы немного изменил ваш список критериев защиты сценария.Учитывая эту или аналогичную запись в / etc / sudoers
:
www-data ALL = (ALL) NOPASSWD: / usr / local / sbin / mycommand
мы может указывать, что сценарий:
ПУТЬ
перед использование любых внешних команд logger
]) Кроме того, во многих случаях нет реальной необходимости запускать сценарий от имени пользователя root - он может запускать setgid или даже setuid для какой-либо другой учетной записи. В общем случае рассмотрите эти варианты, чтобы избежать предоставления скрипту полного корневого доступа.
Для сред SELinux можно создать политику, которая предотвращает выполнение сценарием каких-либо неожиданных действий. Такие возможности, как CAP_NET_ADMIN, более детализированы, чем общие привилегии root, и их также стоит рассмотреть.
В указанном вами конкретном случае, когда вы хотите проверить один IPv4-адрес и передать его iptables
, вы можете обойтись без проверки IP-адреса. адрес как последовательность неспецифических октетов. В данном случае 444.555.666.999 можно считать правдоподобным, зная, что сам iptables
отклонит все, что не является настоящим IP-адресом. В одном крайнем случае вы можете решить, что сопоставление RE / ^ [0-9.] + $ /
достаточно, чтобы передать значение в iptables
. С другой стороны, есть много ответов на StackExchange и в других местах , которые касаются проблемы проверки IP-адреса. Некоторые лучше, чем другие.
Особые случаи, которые следует учитывать, - это адреса RFC1918, адреса многоадресной рассылки и ваш собственный диапазон внешних IP-адресов. Да, и зарезервированный блок, ранее известный как Class E. Нужна ли вам поддержка IPv6?
Что произойдет, если ваш скрипт будет вызывать сотни раз в минуту? Вам нужно подготовиться к такому повороту событий? Будет ли ваша цепочка iptables
переполнена? Если вы думаете, что вам понадобятся сотни правил в вашей цепочке, [более эффективно будет использовать расширение ipset
до iptables
, а не линейный список. Вот хороший учебник . Что касается защиты, он позволяет создавать наборы из тысяч (если не десятков тысяч ) похожих правил, которые могут выполняться без значительного замедления трафика, проходящего через ваши наборы правил.
Внезапно ваше очевидно прямое требование становится довольно сложным.
Как описано в ssh-keygen man :
user@host является комментарием по умолчанию, добавленным ssh-keygen
:
Для Ключи RSA1, в ключевом файле также есть поле комментария, которое только для удобства пользователя, чтобы помочь идентифицировать ключ. Комментарий может сказать, для чего нужен ключ или что-то еще полезное. Комментарий инициализируется как ''user@host'' при создании ключа, но может быть изменено с помощью опции -c.
Вы можете использовать опции -C / -c для установки другого комментария.
-C comment Предоставляет новый комментарий.
-c' Запрашивает изменение комментария в файлах закрытого и открытого ключей. Эта операция поддерживается только для ключей RSA1. Программа будет запрашивать файл, содержащий закрытые ключи, парольную фразу, если ключ имеет один, и для нового комментария.
напр. использование флага -C ""
следующим образом установит пустой комментарий в открытом ключе
ssh-keygen -C ""