Dar permissão de leitura ao usuário não root para o arquivo de propriedade raiz?

2

Como posso permitir a leitura de arquivos específicos de propriedade da raiz por um processo executado pelo usuário não root?

Estou executando o node.js no Linux / Ubuntu. Eu não quero executar meu processo com autorização de raiz, mas deve ter acesso somente leitura de alguns arquivos de propriedade da raiz.

Atualmente, não consigo ler esses arquivos (arquivos de chave de certificado), a menos que eu inicie o processo por meio de sudo node ... . Além desses arquivos, o processo é bem comportado, capaz de ser executado com êxito quando iniciado sob seu próprio ID de usuário do aplicativo.

Espero poder fazer algo como configurar um link simbólico para os arquivos que definem permissões para permitir a autorização de leitura do ID do usuário do aplicativo para eles. Como os arquivos de certificado são mantidos e atualizados automaticamente por um processo separado, prefiro não tocá-los ou copiá-los.

... Mas qualquer outro tipo de solução na categoria "não executar como root" também é bem-vindo.

    
por GaryL 29.03.2018 / 01:13

2 respostas

3

Você pode adicionar um novo grupo que seja nodeJS group, adicionar usuário ao grupo do que o grupo de mudança para o arquivo e, ao final, alterar a permissão para o grupo ler o arquivo.

groupadd nodeJS
usermod userName -g nodeJS
link -s rootOwnedFile linkToRootOwnedFile
chgrp nodeJS linkToRootOwnedFile
chmod g+r linkToRootOwneFile
    
por 29.03.2018 / 01:36
4

Isso pode ser feito com Listas de controle de acesso . Dessa forma, mesmo que os arquivos sejam alterados, novos ou permissões nos arquivos alterados, você ainda poderá acessá-los com o usuário do Node.js. Basta fazer o seguinte no diretório pai dos certificados:

setfacl -Rm u:nodeJSUser:rX,d:u:nodeJSUser:rX /path/to/certificates

Substitua nodeJSUser pelo usuário real. A primeira parte da opção -m definirá as ACLs atuais e tudo após a vírgula definirá o padrão para novos arquivos. -R torna recursivo.

Observe que, se os certificados forem armazenados em um diretório de propriedade da raiz sem acesso de execução (por exemplo, chmod 700 ), isso não funcionará. Por exemplo, se os certs estiverem armazenados em /root/certs , como /root é chmod 700 , nenhum outro usuário poderá acessar qualquer item dentro desse diretório, mesmo se tiver permissão no próprio arquivo. Para isso, você pode vincular a montagem deste diretório para outro diretório e acessá-lo de lá.

mkdir /certs
mount --bind /certs /root/certs
setfacl -Rm u:nodeJSUser:rX,d:u:nodeJSUser:rX /certs
    
por 29.03.2018 / 04:28