Estou executando um servidor de jogo particular em uma caixa Linux sem cabeça. Por não ser um idiota, o servidor está sendo executado como seu próprio usuário sem privilégios, com os direitos mínimos de acesso necessários para baixar atualizações e modificar o banco de dados mundial.
Também criei um arquivo de unidade systemd para iniciar, parar e reiniciar corretamente o servidor quando necessário (para as atualizações mencionadas, por exemplo).
No entanto, para realmente ligar systemctl
ou service <game> start/stop/restart
ainda preciso fazer login como sudo
usuário root ou capaz.
Existe uma maneira de dizer ao systemd que, para o <game>
serviço, o usuário não privilegiado gamesrv
tem permissão para executar os comandos start / stop / restart?
Respostas:
Eu posso pensar em duas maneiras de fazer isso:
Uma é tornar o serviço um serviço ao usuário, e não um serviço do sistema.
Em vez de criar uma unidade de sistema, a unidade systemd será colocada no diretório inicial do usuário do serviço, em
$HOME/.config/systemd/user/daemon-name.service
. O mesmo usuário pode gerenciar o serviço comsystemctl --user <action> daemon-name.service
.Para permitir que a unidade do usuário inicie na inicialização , o root deve ativar a demora na conta, ou seja
sudo loginctl enable-linger username
. A unidade também deve serWantedBy=default.target
.A outra maneira é permitir que o usuário acesse a unidade do sistema via PolicyKit. Isso requer systemd 226 ou superior (e PolicyKit> = 0.106 para os arquivos rules.d do JavaScript - verifique com
pkaction --version
).Você criaria um novo arquivo de configuração do PolicyKit, por exemplo,
/etc/polkit-1/rules.d/57-manage-daemon-name.rules
que verifica os atributos que deseja permitir. Por exemplo :O usuário nomeado pode gerenciar o serviço nomeado com
systemctl
e sem o usosudo
.fonte
loginctl
funcionou.sudo
é feito para isso. Edite seu/etc/sudoers
arquivovisudo
para adicionar aCmd_alias
aos comandos que você deseja que o usuário não privilegiado possa usar:e adicione uma linha para permitir que o usuário não privilegiado use os comandos definidos com o alias como este:
Leia mais alguma documentação sobre o tópico para os vários parâmetros do comando sudo.
Pode ser necessário instalar o
sudo
pacote para tersudo
disponível no seu sistema.fonte
systemd
arquivo de unidade faz é especificar que ele precisa ser executado comogamesrv
.Você pode se associar
sudo
ao fornecimento de acesso equivalente aroot
, mas também pode ser usado para permitir um acesso raiz do usuário específico a um conjunto limitado e limitado de comandos.Como isso já foi respondido em Falha do servidor, em [ Fornecendo acesso a um conjunto de comandos para um usuário não raiz sem acesso ao sudo de um conjunto de comandos para um usuário não raiz sem sudo).
O uso do PolicyKit ainda é incomum. O uso de uma "unidade de usuário" systemd deve funcionar bem, mas historicamente seu objetivo foi atingido muitas vezes, com a capacidade de
sudo
permitir que um usuário execute comandos específicos como root.fonte