systemd estão ignorando bits pegajosos (sgid) em diretórios

1

Eu tenho um usuário vopi em que um serviço systemd é iniciado (modo de usuário). O serviço é um script python que deve gravar um arquivo em um diretório compartilhado no caminho /usr/local/myfolder

O grupo definido como myfolder é bot e defino um bit para tornar todos os arquivos criados dentro do grupo bot .

Atualmente, as permissões da myfolder são semelhantes a

drwxrwsr-x root bot ... myfolder

O usuário vopi está incluso no grupo bot

Quando inicio o script como python main.py , ele cria um arquivo com myfolder e tem permissões -rw-rw-r-- vopi bot ... . No entanto, quando eu chamo systemctl --user start myservice , ele tenta criar um arquivo com permissões -rw-r--r-- vopi vopi e falha (percebi isso configurando temporariamente um grupo vopi to myfolder

Por que meu script em execução na unidade do systemd está ignorando o bit de fixação definido no diretório e por que as permissões não são -rw-rw-r-- ?

Eu tentei definir a opção Group= na configuração da unidade, mas não funcionou. O serviço falhou com erro: 216 Group

    
por tr1me 24.06.2018 / 11:57

1 resposta

1

I set a sticky bit to make all files created inside being owned by group bot.

Isso sugere que adicionar um bit adesivo faz com que a propriedade e as permissões do arquivo sejam herdadas da pasta pai. Esse não é o objetivo dos bits pegajosos. O sticky stick é um sinalizador de eliminação restrito .

O man chmod no Linux descreve sua função atual e histórico:

The restricted deletion flag or sticky bit is a single bit, whose interpretation depends on the file type. For directories, it prevents unprivileged users from removing or renaming a file in the directory unless they own the file or the directory; this is called the restricted deletion flag for the directory, and is commonly found on world-writable directories like /tmp.

For regular files on some older systems, the bit saves the program's text image on the swap device so it will load more quickly when run; this is called the sticky bit.

Seu erro 216 Group vem do fato de que a configuração systemd.unit não Você tem essa [Unit] Seção Opção como Group= . É uma opção systemd.exec ( Configuração do ambiente de execução ) que pertence às seções [Service] (, [Socket] , [Mount] ou [Swap] ):

User=, Group=

Set the UNIX user or group that the processes are executed as, respectively. Takes a single user or group name, or a numeric ID as argument.

For system services (services run by the system service manager, i.e. managed by PID 1) and for user services of the root user (services managed by root's instance of systemd --user), the default is root, but User= may be used to specify a different user.

For user services of any other user, switching user identity is not permitted, hence the only valid setting is the same user the user's service manager is running as. If no group is set, the default group of the user is used. This setting does not affect commands whose command line is prefixed with "+".

    
por 24.06.2018 / 13:04