У меня есть архитектура с использованием сетевых пространств имен (NetNS). Я хотел бы позволить обычным пользователям выполнять некоторые операции в этих сетях.
Я мог бы написать сценарий netns-exec.sh
, вдохновленный этим постом , с использованием sudo
:
ip netns exec $1 su $USER -c "$2"
и добавьте в мой файл sudoer:
user ALL=(ALL) /path/to/netns-exec.sh
Но я нахожу это настолько уродливым, что у меня могут быть кошмары об этом. Есть ли лучшее решение, позволяющее обычным пользователям использовать пространства имен? Можно ли поместить пользователей в некоторые полезные группы? Я искал об этом, но ничего не нашел.
sudo
root
privileges
network-namespaces
Raspbeguy
источник
источник
Cmd_Alias CMD_NETNS = ip netns exec [regexp matching your namespace] su [regexp matching allowed used] -c [regexp matching allowed namespace command]
в своем файле sudoers, а затем создаете группу, в которую вы помещаете разрешенных пользователей, и связываете эту группу с псевдонимом этой команды.sudo
содержащее ,su
что раздражает меня, а не сам сценарий. Во всяком случае, я напишу сценарий, чтобы обернуть вещь. Это делает 2 пользовательских переключения, это действительно ужасно, не так ли?sudo
это определенная переменная$SUDO_USER
, которая безопаснее. Но это все еще безобразно.Ответы:
Решение 1
Просто добавьте группу «netns» и добавьте в нее всех желаемых пользователей. Затем передайте права владения root: netns и предоставьте группе возможность чтения / исполнения.
Другими словами:
Решение 2
Это решение проще, вы должны отредактировать файл sudoers, как показано в этом примере .
источник
ip netns
вернет ошибку, сообщающую, что ее может выполнить только root. Решение 2 - это то, что я изначально имел в виду, но, на мой взгляд, не удовлетворяло меня.chmod 0633
дало быwrite+execute
разрешения всем пользователям иnetns
группе. Я подозреваю , что вы хотите установить битый SGID на сценарии, но , как упоминалось @Angelo:setuid
иsetgid
игнорируетесь для сценариев оболочки, и по уважительной причине .Лично я не знаю, есть ли возможность разрешать обычным пользователям запускать команды в разных сетевых пространствах имен, но этот аннотированный сценарий оболочки может лучше удовлетворить ваши потребности:
Установите его где-нибудь
/usr/bin
и позвольте своим пользователям выполнить его.источник
Firejail может сделать работу
В качестве альтернативы Netns-Exec , Nsutils и Netns не требует рут
источник