Permissões ausentes ao executar pelo ExecStart

3

Eu configurei o shadowsocks-libev e o corri com o seguinte serviço systemctl:

[Unit]
Description=Shadowsocks-Libev Manager Service
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=nobody
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
ExecStart=/usr/bin/ss-manager -c /etc/shadowsocks/%i.json

[Install]
WantedBy=multi-user.target

Recentemente, observei que o arquivo de configuração do meu shadowsocks ( /etc/shadowsocks/manager.json ) tinha permissões de leitura globais, então alterei para 600 e certifiquei-me de que o proprietário fosse nobody . Por algum motivo, isso faz com que o processo não consiga ler o arquivo de configuração ao iniciar.

systemctl start [email protected]

ss-manager[1357]: 2018-01-05 11:41:00 ERROR: Invalid config path.

Este é o mesmo erro que vejo quando revogo todos os privilégios de leitura desse arquivo.

No entanto, funciona bem se eu começar o shadowsocks usando exatamente o mesmo comando na linha de comando:

sudo -u nobody /usr/bin/ss-manager -c /etc/shadowsocks/manager.json

Da mesma forma, não tenho dificuldade em ler o arquivo como nobody usando cat ou less .

Ao verificar o processo iniciado por systemctl in ps , ele mostra que está sendo executado como nobody e, quando o processo gera arquivos, o proprietário está definido como nobody . Por que não pode acessar este arquivo? Por que existe uma diferença entre executá-lo através do systemctl e executá-lo a partir do terminal?

Meu problema parece semelhante a esta questão , mas eu não tenho nenhuma aspas no meu ExecStart para que a solução não seja aplicável no meu caso.

    
por Altay_H 05.01.2018 / 18:16

1 resposta

1

Consegui corrigir o problema, que resultou de algo único para o usuário nobody . Ainda não tenho certeza do que torna esse usuário único.

Quando executado como nobody , vejo a seguinte saída no journald:

Started Shadowsocks-Libev Manager Service.
ERROR: Invalid config path.
Main process exited, code=exited, status=255/n/a
Failed with result 'exit-code'.

Isso é indicativo de não poder acessar o arquivo de configuração, apesar de ter as permissões necessárias.

Quando executado como um usuário diferente que criei recentemente (sem nenhum diretório inicial), vejo a seguinte saída no journald:

Started Shadowsocks-Libev Manager Service.
ERROR: mkdir: No such file or directory
ERROR: unable to create working directory
Main process exited, code=exited, status=255/n/a
Failed with result 'exit-code'.

Isso ocorre porque ele tenta gravar no diretório inicial do usuário que não existe.

Eu criei um novo usuário chamado shadowsocks com seu próprio diretório inicial:

# useradd -m -s /usr/bin/nologin shadowsocks

Em execução como este usuário, não encontro problemas.

    
por 23.01.2018 / 05:34