A especificação POSIX para o chown
utilitário menciona em sua seção racional a chown user:group
sintaxe (anteriormente chown user.group
) (ênfase minha):
O método 4.3 BSD de especificar o proprietário e o grupo foi incluído neste volume do POSIX.1-2008 porque:
- Há casos em que a condição final desejada não pôde ser alcançada usando os utilitários chgrp e chown (que apenas alteraram o ID do usuário). (Se o proprietário atual não for membro do grupo desejado e o proprietário desejado não for membro do grupo atual, a função chown () poderá falhar, a menos que o proprietário e o grupo sejam alterados ao mesmo tempo.)
Eu pensei que a user:group
sintaxe era uma coisa de conveniência. Agora, o que precede implica que há coisas que você pode fazer com as chown user:group
quais você não podechgrp group; chown user
Agora esse texto não faz sentido para mim. No 4.3BSD, apenas o root pode alterar um arquivo para o proprietário, portanto, em qualquer caso, não há restrição no que ele pode fazer.
O SysV e alguns outros sistemas permitem (ou costumavam permitir) o proprietário de um arquivo alterar o usuário e o grupo de um arquivo para qualquer coisa, mas mesmo nesse sistema, o texto acima não faz sentido para mim. OK, se alguém faz um chown someone-else the-file
, não pode fazer chgrp something-else the-file
depois porque não é mais o proprietário do arquivo, mas não há nada que o impeça de fazer o chgrp
primeiro (permanecer o proprietário do arquivo) e chown
depois, e não é isso que o o texto acima está exatamente dizendo.
Não entendo o que o proprietário e o proprietário desejado não são membros do grupo atual .
Então, quais são as condições pelas quais a função chown () pode falhar, a menos que o proprietário e o grupo sejam alterados ao mesmo tempo e em que sistema?
chown me:my-group file
se o arquivo estiver em um local onde eu tenha acesso de leitura / gravação (sem aderência). Eu não poderia chgrp primeiro como não proprietário. Não pude mostrar primeiro, pois isso resultaria em um arquivo que não pude criar: possuindo um arquivo com o grupo do qual não sou membro.Respostas:
O subsistema Microsoft Interix Unix (agora aposentado) para seu kernel NT lidava um pouco diferente com as permissões de usuário e grupo do que outros:
Aqui estão alguns trechos manuais mais específicos:
Enquanto eu leio, isso significa que se sua conta de usuário pertence a um grupo do Windows com privilégios suficientes para modificar as permissões de um arquivo pertencente a esse grupo, é possível efetivamente
chgrp
esse arquivo fora do controle da sua conta de usuário. Isso equivale a um controle menor do que você pode ter com parâmetroschown
explícitosuser:group
. Nesse contexto, sem a possibilidade de declararuser:
e:group
você nunca poderá obter os mesmos resultados do contrário.Aqui está um link para uma visão detalhada de como o Interix interage com as ACLs do Windows, com foco em como esse conhecimento pode se aplicar aos sistemas de arquivos Samba em outras variantes do Unix.
Aqui está um link para um documento Solaris agora obsoleto que descreve o ajuste
rstchown
que ...Aparentemente, se o parâmetro estiver definido como um valor de
0
...Essa opção não invalida a conformidade POSIX do Solaris . Só que é uma opção qualifica-a como conforme :
A
chown()
função do sistema - que é a chamada do sistema documentada feita pelos utilitários shellchown
echgrp
- é especificada para falhar por vários motivos. Entre eles:O comportamento de conceder direitos de modificação de permissões a usuários não-root nunca foi exclusivo do Solaris. Há uma cobertura muito excelente - se um pouco datada - de permissões de arquivo Unix nesta postagem do fórum em que o autor declara:
Outro post bom - e mais recente - da lista de discussão cita isso e continua:
E como você aponta em 2003 :
... que dependia de um
setprivgroup
parâmetro de configuração .Em qualquer caso em que um usuário não raiz possa manipular as permissões de arquivo, é concebível, como mencionado na lógica citada em sua pergunta, que um usuário possa
chown
um arquivo que ele possui para que ele seja de propriedade de outro usuário. Se a propriedade do grupo de arquivos e oschown
grupos de usuários não estiverem alinhados, o usuário não poderá mais modificar esse arquivo.Nesse cenário
chown
,chgrp
falharia, pois o usuário não teria mais permissões para alterar as permissões desse arquivo, enquantochown user:group
- desde que o grupo esteja entre os próprios - teria êxito.Existem provavelmente muitas outras situações de nicho que possam resultar da mesma forma, que podem incluir diretório pegajoso e / ou setgid pedaços, sistema de arquivos e / ou listas de controle de acesso específicos de implementação. Este tópico é interessante, por exemplo. As inúmeras permutações estão muito além do meu próprio alcance débil - e é por isso que essa resposta é modificada. Se você está lendo isso, acredita que vale a pena melhorar e acredita que sabe - por favor .
Também há extensa documentação sobre os vários efeitos possíveis de permissões de arquivo, passagem em árvore e links simbólicos que podem afetar uma falha semelhante com relação aos aplicativos
-R
ecursivoschown
aqui:Nos cabeçalhos da seção POSIX XRAT , Terceiro e Quarto Domínios :
E a partir da
chgrp
página POSIX propriamente dita, há uma que aponta para uma possível-R
ação ecursiva incompleta , ou pelo menos para o que costumava ser:fonte
chgrp
chown
... não pode se comportar como você espera ...Suposição 1: as regras para determinar se são
chown
bem-sucedidos verificam o usuário-alvo e as partes do grupo de forma independente, ou seja, elas são da formauser_condition(target_uid, other_environment_parameters) && group_condition(target_gid, other_environment_parameters)
.Suposição 2:
chown(file, -1, -1)
bem - sucedida.Suposição 3: as regras para determinar se os
chown
sucessos não dependem de qual grupo o arquivo pertence atualmente.Corolário: se
chown(file, uid, gid)
fosse bem-sucedido, o fariachown(file, -1, gid) && chown(file, uid, -1)
.Eu não sei de uma variante do Unix que viole qualquer uma dessas suposições, elas parecem bastante seguras.
Essa frase tem a aparência de algo que alguém no comitê disse quando estava cansado depois de horas debatendo quantas opções cabiam na cabeça de uma
ps
ligação - ou que a secretária maltratou - e que ninguém pegou durante a revisão. Afinal, existem outros bons motivos para permitir que o usuário e o grupo sejam alterados automaticamente, incluindo o motivo de desempenho também citado na lógica do POSIX, bem como a atomicidade (ah, se houvesse apenas uma chamada para alterar a propriedade e as permissões )Um caso em que a suposição 3 pode estar errada está em um sistema em que um processo pode ter a capacidade de alterar os proprietários do arquivo, mas apenas se eles tiverem permissão de gravação no arquivo. Embora um pouco realista, não conheço nenhum sistema em que esse seja o caso. Em seguida,
chgrp
para um grupo de um processo que a execução nem como raiz nem como o usuário que possui o arquivo pode torná-lo fora do limite para um posteriorchown
.Para uma chamada recursiva, há casos extremos em que uma passagem inteira
chgrp
seguida por uma passagem inteirachown
pode falhar quando uma única passagem for bem-sucedida. Este não é um argumento muito convincente, pois envolve diretórios que o proprietário não tem permissão para percorrer, e um aplicativo que desejava proteger contra todos esses casos precisaria mexer nas permissões de qualquer maneira. No entanto, ele atende tecnicamente à condição dessa lógica. Suponha que o processo em execução tenha usuário efetivoalice
, grupo efetivostaff
e a capacidade de alterar os proprietários de arquivos arbitrariamente (não apenas para denunciá-los; várias variantes do unix possuem esse recurso, embora raramente seja concedido a processos não raiz).fonte
chgrp
ouchown
pode ter efeitos colaterais que afetam a capacidade de executar o outro. Por exemplo,chown
remove a capacidade dechgrp
, isso é um fato.chgrp
limpa o setuid / setgid bit, pode limpar alguma forma de ACL ou outra forma de contexto de segurança ...chown
seguido porchgrp
pode falhar, mas a pergunta é sobrechgrp
seguida porchown
. Hmmm, contexto de segurança ... talvez em um sistema com controle de acesso obrigatório,chgrp
possa manchar um arquivo e torná-lo não mais chownable? Isso parece absurdo.dir
, para que isso funcionasse,chown
seria necessário primeiro processar a profundidade dos arquivos e não conheço nenhuma implementação que faça isso. Portanto, é um caso quase válido em que chgrp + chown falharia onde chmod u: g não poderia, mas isso não corresponde ao texto da justificativa.chown
teorias recursivas de primeira linha parecem conflitar.