Сценарии диспетчера на стороне пользователя Network Manager

Сначала следует добавить пользователя dhaka в группу «it».

#usermod -a -G it dhaka

#chown dhaka.it /home/dhaka

Затем необходимо установить липкую группу для каталога /home/dhaka, чтобы новые файлы/каталоги, созданные в /home/dhaka, имели ту же групповую принадлежность, что и для /home/dhaka.

#chmod g+s /home/dhaka

Затем вам нужно изменить файл.bashrc для домашнего каталога пользователя dhaka для разрешения файла/каталога по умолчанию, созданного пользователем dhaka.

echo "umask 002" >> /home/dhaka/.bashrc

Маска Umask используется для установки прав доступа к файлам/каталогам для любого нового файла, созданного этим пользователем. После завершения вы можете протестировать его с новой оболочкой.

2
17.11.2017, 14:24
1 ответ

Я хотел сделать то же самое, и вот что я сделал, чтобы это заработало:

Создать/etc/NetworkManager/dispatcher.d/99-user-scripts:

#!/bin/bash
#
#   Run NeworkManager dispatcher scripts from user home directories
#   for logged in users
#   See: https://developer.gnome.org/NetworkManager/stable/NetworkManager.html
#   See: https://unix.stackexchange.com/q/405242
#
for user in $(who | awk '{print $1}' | sort | uniq); do
  scripts_dir="/home/${user}/.config/NetworkManager/dispatcher.d"
  [ ! -d "$scripts_dir" ] && continue
  find $scripts_dir -type f -executable -user $user -perm -u+rwx ! -perm /go+w ! -perm /+s | \
    sort | \
    xargs -I{} sudo -u $user --set-home --preserve-env -- {} $1 $2
done

Установите правильные права доступа к файлу в соответствии с документацией NetworkManager:

$ chmod u+x,go-w,a-s /etc/NetworkManager/dispatcher.d/99-user-scripts

Затем создайте каталог пользовательских скриптов и создайте пользовательский скрипт:

$ mkdir -p ~/.config/NetworkManager/dispatcher.d
$ touch ~/.config/NetworkManager/dispatcher.d/50-my-script
$ chmod u+x,go-w,a-s ~/.config/NetworkManager/dispatcher.d/50-my-script

Вот образец~/.config/NetworkManager/dispatcher.d/50-my-script:

#!/bin/bash
prog="$(basename "${BASH_SOURCE[0]}")"
logger -t $prog -p user.notice "Running ${BASH_SOURCE[0]} $@"
printenv | logger -t $prog -p user.notice # verify environment variables are inherited

Вы можете убедиться, что пример сценария выполняется, проверив системный журнал после того, как произошло сетевое событие.

Ограничения

  • Не будет работать с /rootили не -стандартными путями к домашним каталогам пользователей (легко исправить)
  • Для простоты я решил не реализовывать функциональность до -up.d и до -down.d (возможное улучшение)
  • Я не уверен, что порядок выполнения точно такой же, как /etc/NetworkManager/dispatcher.dскриптов. В документах указано алфавитное, поэтому я использовал sortдля найденных файлов. Вероятно, не огромная проблема, но к вашему сведению.
  • Я использую синтаксис Bash 4+, а не общий код оболочки, потому что это то, с чем я знаком. Я предполагаю, что это может быть сделано для поддержки других оболочек.
  • Я НЕ претендую на безопасность этой реализации!
3
27.01.2020, 22:18

Теги

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