Por que usuários sem privilégios não podem alterar a propriedade do arquivo?
15
Do chown (2):
Somente um processo privilegiado (Linux: um com o recurso CAP_CHOWN) pode alterar o proprietário de um arquivo. O proprietário de um arquivo pode alterar o grupo do arquivo para qualquer grupo do qual esse proprietário seja membro. Um processo privilegiado (Linux: com CAP_CHOWN) pode alterar o grupo arbitrariamente.
Qual o motivo dessa restrição? Por que um usuário não privilegiado não pode alterar a propriedade de um arquivo que possui (por exemplo, no / etc / shadow)?
$ touch blah
$ chown root:root blah
chown: changing ownership of `blah': Operation not permitted
Ao permitir que os usuários "entreguem" arquivos, você colide com vários recursos do sistema operacional. Tal como:
Taking up another user's disk quota.
Impersonating another user (or even root) via setuid.
Having insufficient privileges to undo a mistaken chown.
Making it appear that someone else had created a given file.
Setting up cron jobs to run on other user's accounts.
And many more...
É apenas uma escolha pessoal dos designers do linux para não permitir - todas as razões de pseudo-segurança, dadas , são ilusórias, pois existem sistemas unix que permitem isso.
Eu acho que essa funcionalidade se resumia a se o comportamento do seu unix seguia ou não o 'System-V' (AT&T) ou o unix de Berkeley (BSD) ...
Quanto aos outros problemas de segurança mencionados:
Representando outro usuário (ou mesmo root) via setuid.
Não questão: alterar 'proprietário' limpa todos os bits 'setXid' (U / G)
Tendo privilégios insuficientes para desfazer um chown errado
Não é realmente um 'risco de segurança', MAS, pode estar em sistemas que permitem mudar de usuário; você pode alterá-lo novamente se ele estiver em um diretório que você possui, por outro lado: 'tenha cuidado'!
Fazendo parecer que alguém criou um arquivo.
Ainda estaria em um diretório gravável por você. Ou seja, você não pode movê-lo para o local de origem, a menos que ele esteja aberto para gravação em seu grupo ou em todos (ou especificamente se houver ACLs).
Configurando tarefas cron para executar nas contas de outros usuários.
Novamente, não funcionaria - uma vez que as crondirs são de propriedade do usuário e não estão definidas para serem legíveis por outros usuários, muito menos graváveis.
se alguém puder alterar a propriedade, alguém poderá alterar as permissões para obter acesso a qualquer arquivo no sistema.
Não: somente se o usuário 'possuir' o diretório que contém esse arquivo. Ou seja, posso atribuir um arquivo chamado 'passwd' ao root, mas não consigo movê-lo para / etc / a menos que tenha permissão de gravação para / etc /.
cotas
Um ponto potencialmente válido - se você usar cotas, mas parece fácil detectar se você soma espaço em disco por home-dir; O único problema seria em diretórios graváveis por vários usuários. Nesse caso, talvez seja o proprietário desse 'dir'. Ele PODE ser o caso nesses sistemas que o apoio 'dando' arquivos, que você só pode fazer isso em diretórios que você 'próprio', mas tem sido um longo tempo desde que eu tenha sido realmente em um sistema que permite isso, então Não me lembro das restrições exatas.
Eu me lembro de ter havido alguma "troca" por permitir "doar arquivos" ... por exemplo - em sistemas que permitiam isso, algo mais não era permitido pelo linux, mas não consigo lembrar o que estava acontecendo mão...
Eu diria que a 'resposta' acima deve ser desmarcada como a resposta, pois NÃO é a resposta real. É mais uma decisão de design - simplesmente não sei quais foram as trocas.
Pode haver problemas de segurança não mencionados acima que seriam preocupações válidas, mas os acima não são válidos.
Na IMO, deve ser um 'valor' configurável pelo sistema em "/ proc", mas de um modo geral, acho que a maioria das pessoas não se importa muito.
Se houvesse uma forte necessidade, o 'chown' poderia ser aprimorado e modificado para permitir a segurança e, em seguida, configurar w / setuid 'root' para permitir a implementação dessa política.
As cotas sempre são baseadas na propriedade do arquivo , não no local . Caso contrário, alguém poderia guardar tudo /tmp.
user1686
+1, você parece certo :). Nos sistemas OpenSolaris (que é de fato um descendente do System V), é possível definir isso por meio de uma mountopção (portanto, essa configuração pode ser limitada a um único ponto de montagem, em vez de ser de todo o sistema, conforme sua sugestão de valor configurável pelo sistema): rstchown(o padrão ) para limitar as alterações do proprietário do arquivo no usuário raiz, norstchownpara permitir que usuários sem privilégios alterem o proprietário de seus próprios arquivos (eles não podem alterá-lo novamente).
precisa saber é o seguinte
6
Bem, se alguém puder alterar a propriedade, alguém poderá alterar as permissões para obter acesso a qualquer arquivo no sistema. Isso é ruim não apenas do ponto de vista de malware (não é necessário sudo), mas do ponto de vista de um administrador de sistema. Se algum usuário puder alterar algum arquivo, as permissões de arquivo serão inúteis.
Certo. Modifiquei a pergunta para ficar claro que estava me referindo a arquivos que o usuário possui e não a nenhum arquivo.
Alexandru
1
@Alexandru: pense em um usuário mal-intencionado mudando myTrojan.shpara pertencer ao root e ter um sinalizador SUID.
Benjamin Bannier
@honk: faz sentido agora.
Alexandru
5
Porque então o usuário pode evitar cotas do sistema de arquivos. Se eu tenho uma cota de 100 MB e você tem uma cota de 100 MB, posso fazer o upload de 100 MB, chmod a + r, mostrar a você e depois carregar outros 100 MB.
/tmp
.mount
opção (portanto, essa configuração pode ser limitada a um único ponto de montagem, em vez de ser de todo o sistema, conforme sua sugestão de valor configurável pelo sistema):rstchown
(o padrão ) para limitar as alterações do proprietário do arquivo no usuário raiz,norstchown
para permitir que usuários sem privilégios alterem o proprietário de seus próprios arquivos (eles não podem alterá-lo novamente).Bem, se alguém puder alterar a propriedade, alguém poderá alterar as permissões para obter acesso a qualquer arquivo no sistema. Isso é ruim não apenas do ponto de vista de malware (não é necessário sudo), mas do ponto de vista de um administrador de sistema. Se algum usuário puder alterar algum arquivo, as permissões de arquivo serão inúteis.
fonte
myTrojan.sh
para pertencer ao root e ter um sinalizador SUID.Porque então o usuário pode evitar cotas do sistema de arquivos. Se eu tenho uma cota de 100 MB e você tem uma cota de 100 MB, posso fazer o upload de 100 MB, chmod a + r, mostrar a você e depois carregar outros 100 MB.
fonte