O acesso privilegiado a arquivos e diretórios é realmente determinado pelos recursos, não apenas por ser root
ou não. Na prática, root
geralmente possui todos os recursos possíveis, mas há situações em que todos / muitos deles podem ser descartados ou alguns dados a outros usuários (seus processos).
Em resumo, você já descreveu como as verificações de controle de acesso funcionam para um processo privilegiado. Veja como os diferentes recursos realmente o afetam:
A principal capacidade aqui éCAP_DAC_OVERRIDE
um processo que pode "ignorar a leitura, gravação e execução de verificações de permissão". Isso inclui ler e gravar em qualquer arquivo, além de ler, escrever e acessar diretórios.
Na verdade, ele não se aplica à execução de arquivos que não estão marcados como executáveis. O comentário emgeneric_permission
( fs/namei.c
), antes do acesso procurar arquivos, diz que
Os DACs de leitura / gravação são sempre substituíveis. Os DACs executáveis são substituíveis quando há pelo menos um conjunto de bits exec.
E o código verifica se há pelo menos um x
bit definido se você estiver tentando executar o arquivo. Suspeito que seja apenas um recurso de conveniência, para impedir a execução acidental de arquivos de dados aleatórios e a obtenção de erros ou resultados ímpares.
De qualquer forma, se você puder substituir as permissões, poderá fazer uma cópia executável e executá-la. (Embora possa fazer a diferença na teoria para arquivos setuid de um processo era capaz de substituir permissões de arquivo ( CAP_DAC_OVERRIDE
), mas não tem outras capacidades relacionadas ( CAP_FSETID
/ CAP_FOWNER
/ CAP_SETUID
). Mas ter CAP_DAC_OVERRIDE
permite editar /etc/shadow
e coisas assim, então é aproximadamente igual apenas tendo acesso root completo de qualquer maneira.)
Há também o CAP_DAC_READ_SEARCH
recurso que permite ler qualquer arquivo e acessar qualquer diretório, mas não para executar ou gravar neles; e CAP_FOWNER
isso permite que um processo faça coisas que normalmente são reservadas apenas ao proprietário do arquivo, como alterar os bits de permissão e o grupo de arquivos.
A substituição do bit pegajoso nos diretórios é mencionada apenas em baixo CAP_FOWNER
, portanto parece que CAP_DAC_OVERRIDE
não seria suficiente ignorar isso. (Isso daria a você permissão de gravação, mas geralmente em diretórios fixos você a possui de qualquer maneira e a +t
limita.)
(Eu acho que dispositivos especiais contam como "arquivos" aqui. Pelo menos generic_permission()
só tem uma verificação de tipo para diretórios, mas não verifiquei fora disso.)
Obviamente, ainda existem situações em que nem os recursos o ajudarão a modificar arquivos:
- alguns arquivos
/proc
e /sys
, como eles não são arquivos reais
- SELinux e outros módulos de segurança que podem limitar a raiz
chattr
imutável +i
e anexa apenas +a
sinalizadores no ext2 / ext3 / ext4, os quais param o root e impedem também a renomeação de arquivos etc.
- sistemas de arquivos de rede, nos quais o servidor pode fazer seu próprio controle de acesso, por exemplo,
root_squash
nos mapas NFS raiz de ninguém
- FUSE, que eu suponho que poderia fazer qualquer coisa
- montagens somente leitura
- dispositivos somente leitura
capabilities(7)
página de manual - considere arquivar um relatório de erro!root
tenharw-
permissões em (quase) qualquer arquivo e, para obter ax
permissão, ox
bit deve ser definido nas permissões de usuário / grupo / outros no arquivo. Mas e os diretórios, eleroot
temrwx
permissões em qualquer diretório (mesmo que um diretório não tenha permissões (----------
))?CAP_DAC_OVERRIDE
permite substituir todas as permissões de diretório, para que você leia, escreva e acesse diretórios (ou seja, liste o conteúdo, crie e desvincule arquivos). O comentário que citei sobre exec bit está no contexto de arquivos (apenas).É exatamente como você notou nas permissões padrão:
Leitura e gravação:
por padrão, o usuário root pode acessar qualquer arquivo no sistema. Você pode remover esse acesso alterando atributos como explicado aqui: chattr . Isso é então vinculado aos recursos.
Executar: o
usuário raiz não tem permissão de execução, a menos que pelo menos um dos bits de execução esteja definido.
fonte
O
myFile.txt
é obtido porchmod 000 myFile.txt
.---------
significa que não há permissão para usuário, grupo e outros.O usuário root possui um recurso irrestrito para modificar este arquivo. A leitura / gravação é concedida. Para executar este arquivo, o usuário root precisa torná-lo executável de qualquer maneira. (chmod 100, 010 ou 001)
fonte
O modo de execução é tratado um pouco diferente dos outros modos.
Permissões de leitura e gravação são usadas para impor políticas de segurança. O
root
usuário geralmente é imune a restrições de segurança (existem algumas exceções, como arquivos imutáveis, e recursos modernos como recursos tornaram isso mais refinado), e é por isso que outro nome para essa conta é "superusuário".Permissão de execução é mais um modo de aviso, distinguir se o arquivo é destinado para ser executável ou é apenas dados. Por esse motivo, até o usuário root obedece - não faz sentido executar um arquivo de dados. Se nenhuma das permissões de execução estiver definida, o root não poderá executar o arquivo; se algum deles estiver definido, ele pode. Obviamente, como o root também tem permissão para alterar as permissões de qualquer arquivo, a conta pode tornar um arquivo executável se desejar (a menos que o sistema de arquivos seja somente leitura).
BTW, scripts são um caso interessante nisso. Scripts são arquivos de dados para o intérprete relevante. Se o script tiver uma
#!
linha, você poderá executá-lo como um programa - o intérprete nomeado no shebang é executado com o nome do arquivo do script como argumento. Mas isso só será feito quando a permissão de execução estiver definida. Por outro lado, você pode executar o intérprete diretamente, por exemplo/bin/bash scriptname
. Os intérpretes só se importam se conseguem ler o arquivo, não verificam as permissões de execução.fonte
Deixe-me explicar você teoricamente.
Se um arquivo ou diretório tiver alguma permissão como X para executar, mas nada mais e alguém como o usuário Steve tiver o arquivo, o root também poderá executá-lo.
Lembre-se sempre, no Linux root pode fazer qualquer coisa, não há restrições no root.
fonte