Definindo nome de usuário e grupo padrão para arquivos no diretório

13

Usando este post útil, sou capaz de definir um grupo padrão e permissões de arquivo em uma pasta.

Estou tendo problemas para definir um proprietário padrão (teamlead uid 1234).

setfacl -d -m g::rwx /my/test/folder
setfacl -d -m o::rx /my/test/folder

getfacl /my/test/folder

# file: /my/test/folder
# owner: teamlead
# group: web_prod
# flags: -s-
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

Com isso:

[mary@boxen]# touch /my/test/folder/somefile
[mary@boxen]# ll /my/test/folder/somefile
-rw-rw-r--. 1 mary web_prod 0 Nov  6 08:58 somefile

Portanto, o grupo certo é atribuído, mas o novo arquivo possui a propriedade do usuário que está criando o arquivo. Eu gostaria que os arquivos recém-criados tivessem teamlead: web_prod owner / group.

Parece que também setfaclpode ser usado para definir um usuário padrão. Com a pasta existente acl config (acima):

[mary@boxen]# setfacl -d -m u:1234:rwx /my/test/folder

Agora, crie um arquivo como um usuário diferente. Estou esperando que ele tenha teamlead: propriedade web_prod.

[mary@boxen]# touch /my/test/folder/anotherfile
[mary@boxen]# ll /my/test/folder/anotherfile
-rw-rw-r--+ 1 mary web_prod 0 Nov  6 08:58 somefile

O novo arquivo ainda possui a propriedade do proprietário que está criando o arquivo, e não o uid 1234 (líder da equipe).

É o que eu busco até possível, ou é o modo como estou fazendo isso errado?

um codificador
fonte

Respostas:

18

Com o setfacl, você pode definir permissões padrão, mas não o proprietário / grupo padrão para os arquivos recém-criados.

Para que novos arquivos sejam de propriedade de um usuário específico, você precisa de um bit setuid que funcione como o bit setgid nos diretórios. Infelizmente isso não está implementado.

Com o setfacl, você pode fazer algo quase equivalente na maioria dos cenários: você pode definir uma ACL como default:user:teamlead:rwx. Dessa forma, o usuário nomeado pode gravar os novos arquivos, mesmo que alguém o possua.

Michael Suelmann
fonte
Por favor, atualize esta resposta com o comando para aplicar o 'default: user: teamlead: rwx' para o diretório '/ foo'
user319862
10

Sempre é criado um novo arquivo pertencente ao usuário em que o processo de criação do arquivo está sendo executado. (O ID do usuário efetivo, para ser mais preciso.) Isso não pode ser alterado, pois permitir que os usuários criem arquivos pertencentes a outros usuários seria uma brecha na segurança, semelhante a permitir que usuários não raiz entreguem um arquivo .

Tudo o que você está tentando fazer, não precisa fazer isso. As ACLs são suficientes para garantir que o que for necessário para ler o arquivo posteriormente tenha permissões suficientes. Deixe o arquivo de propriedade do usuário que o criou.

Gilles 'SO- parar de ser mau'
fonte
"As ACLs são suficientes para garantir que o que for necessário para ler o arquivo posteriormente tenha permissões suficientes". Falso. O novo grupo de arquivos será o grupo padrão do usuário. Se os usuários que colaboram tiverem grupos padrão diferentes, você não poderá acessar os arquivos um do outro. Você precisa do setgid para fazer com que o grupo da pasta pai "se atenha" a todos os filhos.
precisa saber é o seguinte
@bviktor Você pode obter o mesmo efeito com o ACL.
Gilles 'SO- stop be evil'
Como você especifica o proprietário e o grupo para novos arquivos com ACL?
precisa saber é o seguinte
@bviktor O proprietário é quem cria o arquivo, isso não muda. O grupo que possui o arquivo nas permissões tradicionais é irrelevante. A ACL em novos arquivos é a ACL padrão do diretório, da mesma maneira que o grupo proprietário em novos arquivos é o grupo proprietário do diretório com semântica BSD ( g+s).
Gilles 'SO- stop be evil'
@Gilles nope. O grupo de novos arquivos será o "grupo de login inicial" do usuário criador, não o grupo da pasta pai. O comportamento que você descreve (ou seja, o novo arquivo obtém o grupo do diretório pai) exige que o setgid seja definido no pai. E o grupo é muito relevante porque, quando os usuários colaboram, eles não podem acessar os arquivos uns dos outros se o grupo for diferente. A menos que seus arquivos sejam acessíveis ao mundo, o que não é exatamente uma ótima idéia.
precisa saber é o seguinte
1

Se você deseja que os novos arquivos sejam criados com o novo grupo, é necessário alterar o grupo principal.

Para isso, você pode usar usermod e o parâmetro -g

   -g, --gid GROUP
       The group name or number of the user's new initial login group. The group must exist.
       Any file from the user's home directory owned by the previous primary group of the user will be owned by this new group.
       The group ownership of files outside of the user's home directory must be fixed manually.

por exemplo

test2@kinakuta:/tmp$ id
uid=1002(test2) gid=1002(test2) grupos=1002(test2),1003(testgroup)
test2@kinakuta:/tmp$ touch test2
test2@kinakuta:/tmp$ ls -la test2
-rw-r--r-- 1 test2 test2 0 nov 23 22:26 test2
root@kinakuta:/tmp# usermod -g testgroup test2
root@kinakuta:/tmp# su test2
test2@kinakuta:/tmp$ touch test2_1
test2@kinakuta:/tmp$ ls -la test2_1 
-rw-r--r-- 1 test2 testgroup 0 nov 23 22:27 test2_1
sinkmanu
fonte
0

No Linux, você precisa ter o sgid no diretório pai para herdar o grupo de arquivos. (Embora você não precise do sgid on directory nos sistemas BSD.)

jirib
fonte
A questão é sobre atribuir propriedade a arquivos recém-criados. O grupo já está atribuído corretamente.
um codificador