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