Como ter múltiplos usuários acessando chmod () o mesmo arquivo?

3

Eu tenho um sistema onde vários usuários estão executando um aplicativo que chmod o mesmo arquivo. Eu tentei usar setacl para adicionar usuários como proprietários do arquivo para fazer isso, mas não funciona. O aplicativo comete erros porque a chamada do sistema chmod falha.

Veja o exemplo:

[jacob@macbook-debian ~/Projects/test] getfacl bin/testfile
# file: bin/testfile
# owner: root
# group: root
user::rwx
user:jacob:rwx
user:jason:rwx
group::r-x
group:www-data:rwx
mask::rwx
other::r-x


[jacob@macbook-debian ~/Projects/test] chmod 0755 bin/testfile
chmod: changing permissions of 'bin/testfile': Operation not permitted
    
por Jacob Brown 14.07.2018 / 02:02

1 resposta

5

Com ACLs do Linux ao adicionar usuários, você não os adiciona como proprietários do arquivo. É apenas o privilégio de abrir / modificar e gravar no arquivo.
Ao invocar chown ou chmod , o ID do usuário efetivo será, por exemplo, jacob e esse será comparado com o valor em owner . Se isso não corresponder, seu comando falhará.

De man 2 chmod .

The effective UID of the calling process must match the owner of the file, or the process must be privileged (Linux: it must have the CAP_FOWNER capability).

Uma alternativa seria definir o recurso conforme descrito no processo de chamada / binary chmod . Mas isso abriria um grande problema de segurança, pois todos poderiam usar esse comando para alterar as permissões. Aqui é um tópico sobre acesso mais refinado a recursos para usuários, mas não parece muito simples.

Dependendo das restrições do seu caso de uso, convém adicionar regras sudo para os usuários usarem chmod ou você avaliar por que os usuários precisam executar chmod nos arquivos que não possuem . Talvez usar umask durante a criação do arquivo seja suficiente.

Se os usuários pertencerem a um grupo que tenha permissões de gravação no diretório, você também poderá copiar o arquivo em questão, remover o original e mover a cópia para o nome original. Isso resultaria em que o usuário possuirá o arquivo copiado e poderá fazer chmod .

[user@localhost testdir]$ ll
total 12K
drwxrwxr-x  2 root user 4.0K Jul 14 11:49 .
drwxr-xr-x  3 user user 4.0K Jul 14 11:47 ..
-rw-rw----+ 1 root user    5 Jul 14 11:41 testfile
[user@localhost testdir]$ getfacl testfile 
# file: testfile
# owner: root
# group: user
user::rw-
user:user:rw-
group::rw-
group:user:rw-
mask::rw-
other::---

[user@localhost testdir]$ chmod 777 testfile
chmod: changing permissions of 'testfile': Operation not permitted
[user@localhost testdir]$ cp -a testfile testfile.copy
[user@localhost testdir]$ getfacl *
# file: testfile
# owner: root
# group: user
user::rw-
user:user:rw-
group::rw-
group:user:rw-
mask::rw-
other::---

# file: testfile.copy
# owner: user
# group: user
user::rw-
user:user:rw-
group::rw-
group:user:rw-
mask::rw-
other::---

[user@localhost testdir]$ mv testfile.copy testfile
[user@localhost testdir]$ ll
total 12K
drwxrwxr-x  2 root user 4.0K Jul 14 11:50 .
drwxr-xr-x  3 user user 4.0K Jul 14 11:47 ..
-rw-rw----+ 1 user user    5 Jul 14 11:41 testfile

[user@localhost testdir]$ chmod 777 testfile
[user@localhost testdir]$ ll
total 12K
drwxrwxr-x  2 root user 4.0K Jul 14 11:50 .
drwxr-xr-x  3 user user 4.0K Jul 14 11:47 ..
-rwxrwxrwx+ 1 user user    5 Jul 14 11:41 testfile
    
por 14.07.2018 / 11:54