Existe uma maneira de proteger um arquivo de qualquer maneira para que outros superusuários NÃO PODEM modificar, apagar ou sobrescrever?

0

Devido à palavra-chave hell não consigo encontrar a resposta para esta pergunta e espero que alguém me avise qual é a resposta.

Ao inserir um sudo command file , existe uma maneira de definir um parâmetro (s) que bloqueia o arquivo posteriormente para que ele não possa ser modificado, excluído ou substituído por qualquer outro superusuário ?

Mais especificamente: Eu quero configurar um anúncio e colocá-lo na pasta inicial da pasta /home/announcements/ de cada usuário.

This is a test to see if I can insert a file into each user's announcements folder.

It is also a test of whether I can do this and disallow other regular and superusers from modifying or deleting it without my own personal user privileges.

Então, essa situação é descrita acima?

Por exemplo adicionaria o seguinte depois de escrever e salvar a ajuda acima?

sudo chmod -rv 644 /home/*/announcements/announcement-1

~ ou se é executável ~

sudo chmod -rv 744 /home/*/announcements/announcement-1

Observação: eu tenho dislexia e às vezes traduzi-me de mentalese para a linguagem real escrita / falada pode ser um desafio para mim. Diga-me se você precisar de mim para esclarecer alguma coisa.

    
por Ev- 08.10.2018 / 18:16

3 respostas

3

O mais próximo que você pode conseguir sem um trabalho significativo envolvendo coisas como o SELinux é tornar o arquivo imutável via:

chattr +i /path/to/file

Se o sinalizador imutável estiver definido para um arquivo, ninguém poderá gravar, anexar, mover, excluir ou alterar de qualquer outra forma o arquivo no nível do sistema de arquivos ou acima, sem primeiro desmarcar o sinalizador imutável. Isso ainda tem dois problemas:

  • Não é possível impedir que alguém com acesso root desative o sinalizador imutável.
  • Não há como impedir que alguém com acesso ao dispositivo de armazenamento no qual o arquivo está armazenado, apenas modifique os dados do arquivo diretamente.

Uma vez que você participe do SELinux ou de outros sistemas MAC, você pode provavelmente fazer o que quiser, mas será preciso muito esforço para executá-lo.

Tudo o que disse, você não deve dar acesso root a pessoas que você não confia.

Além disso, você pode fazer isso no Windows, qualquer pessoa com acesso à conta Administrador (não uma conta listada como administrador, mas a conta 'Administrador' real) pode ignorar praticamente todas as verificações de permissão assim como o usuário root nos sistemas UNIX pode.

    
por 08.10.2018 / 21:35
2
  1. root tem acesso a tudo , então dependendo do que você chama de "superusuários" a resposta é "talvez" ou "não" .¹
  2. Para usuários comuns, você pode:

    chown root:root /home/*/announcements/announcement-1
    chmod a-wt /home/*/announcements/announcement-1
    chmod a+r /home/*/announcements/announcement-1
    

    Ou seja, linha a linha, respectivamente:
    uma. Altere o proprietário do seu anúncio para o root
    b. Remova a gravação e a parte pegajosa do anúncio
    c. Conceda a todos somente acesso de leitura.

Nota 1: se a sua definição de "superusuário"="tiver acesso ao sudo", a resposta é Não! (desculpe!); se outra coisa: Talvez, por favor, esclareça .

    
por 08.10.2018 / 19:15
1

Não, isso não é possível.

Prova:

  1. O mais óbvio: um superusuário pode fazer su ev ou criar e executar um programa que executa a chamada do sistema subjacente. Depois disso, eles podem emitir o comando “unlock”, pois eles podem fazer o que você puder fazer.
  2. Em qualquer caso, eles nem precisam fazer isso (e por isso é inútil tentar bloquear comandos específicos como su ev - também é inútil porque não funcionaria de qualquer maneira). Quase as verificações de permissão permitem que o usuário 0 faça o que qualquer outro usuário puder fazer. Existem algumas exceções (como acessar um sistema de arquivos FUSE), mas uma vez que um usuário é root, ele pode simplesmente executar o código como qualquer outro usuário (veja 1).

Observe que, por "superusuário", suponho que você quer dizer "superusuário", ou seja, um usuário que tenha privilégios administrativos na máquina. É possível enganar de várias maneiras:

  • Você pode manter os direitos de superusuário para si mesmo e permitir que outras pessoas acessem apenas alguns comandos específicos que não permitem a execução de código arbitrário. Por exemplo, um usuário que pode executar sudo reboot não é um superusuário. Um usuário que pode executar sudo sh , sudo tee ou sudo mount é um superusuário.
  • Algumas estruturas de segurança, como o SELinux, permitem configurar o acesso a uma conta com ID de usuário 0 (ou seja, raiz), mas com restrições que impedem que essa conta faça qualquer coisa que uma conta não-raiz não possa fazer. É realmente difícil de configurar corretamente e, na maioria das vezes, sem sentido na prática, já que não há sentido em dar acesso a alguém para o ID de usuário 0, se eles não obtiverem privilégios dele.
  • Você pode conceder a todos os usuários direitos de superusuário em uma máquina virtual ou em um contêiner, mas mantenha os direitos de superusuário no host para si mesmo.
por 08.10.2018 / 21:29