У меня частный игровой сервер на безголовом ящике Linux. Поскольку я не идиот, указанный сервер работает как собственный непривилегированный пользователь с минимальными правами доступа, необходимыми для загрузки обновлений и изменения мировой базы данных.
Я также создал системный файл systemd для правильного запуска, остановки и перезапуска сервера при необходимости (например, для упомянутых обновлений).
Однако для того, чтобы на самом деле позвонить systemctl
или service <game> start/stop/restart
мне все еще нужно войти в систему как пользователь root или sudo
способный пользователь.
Есть ли способ сообщить systemd, что для <game>
службы непривилегированному пользователю gamesrv
разрешено запускать команды start / stop / restart?
Ответы:
Я могу придумать два способа сделать это:
Один из них - сделать сервис пользовательским, а не системным сервисом.
Вместо создания системного блока системный модуль будет помещен в домашний каталог пользователя службы по адресу
$HOME/.config/systemd/user/daemon-name.service
. Затем тот же пользователь может управлять сервисом с помощьюsystemctl --user <action> daemon-name.service
.Чтобы устройство пользователя запускать при загрузке , корень должен позволить задерживаться на счет, то есть
sudo loginctl enable-linger username
. Устройство также должно бытьWantedBy=default.target
.Другой способ - предоставить пользователю доступ к управлению системным блоком через PolicyKit. Для этого требуется systemd 226 или выше (и PolicyKit> = 0.106 для файлов JavaScript rules.d - проверьте с помощью
pkaction --version
).Вы должны создать новый файл конфигурации PolicyKit, например,
/etc/polkit-1/rules.d/57-manage-daemon-name.rules
который проверяет атрибуты, которые вы хотите разрешить. Для примера :Именованный пользователь может затем управлять именованной службой с использованием
systemctl
и без использованияsudo
.источник
loginctl
работал.sudo
сделано для этого. Отредактируйте ваш/etc/sudoers
файл,visudo
добавив aCmd_alias
для команд, которые непривилегированный пользователь сможет использовать:и добавьте строку, чтобы позволить непривилегированному пользователю использовать команды, определенные с псевдонимом, например так:
Прочитайте дополнительную документацию по этой теме для различных параметров команды sudo.
Вам может потребоваться установить
sudo
пакет, чтобы он былsudo
доступен в вашей системе.источник
systemd
делает файл модуля, это указывает, что его нужно запускать какgamesrv
.Вы можете ассоциировать
sudo
с предоставлением доступа, эквивалентногоroot
, но его также можно использовать, чтобы разрешить конкретному пользователю root-доступ для определенного, ограниченного набора команд.Как на это уже ответили при сбое сервера, в [ Предоставление доступа к набору команд пользователю без полномочий root без sudo полномочий доступа к набору команд для полномочий root без sudo).
Использование PolicyKit все еще редко. Использование системного «пользовательского модуля» должно работать нормально, но исторически ваша цель была достигнута много раз благодаря возможности
sudo
позволить пользователю запускать определенные команды от имени пользователя root.источник