O root / superusuário pode ler meus arquivos protegidos contra leitura?

35

Na hospedagem unix compartilhada, se eu tiver um arquivo sensitive-data.txt e emitir:

chmod 600 sensitive-data.txt

O usuário root ainda pode ler meu arquivo? Especificamente, estou me perguntando se é seguro armazenar minha senha no arquivo mercurial hgrc.

ATUALIZAR

Decidiu usar a extensão do chaveiro mecânico, pois era super fácil de configurar:

pip install mercurial_keyring

e adicione ao hgrc:

[extensions]
mercurial_keyring =

No entanto, ainda estou interessado na resposta a esta pergunta.

Do utilizador
fonte

Respostas:

62

Sim, o root pode:

$ echo Hello you\! > file
$ chmod 600 file
$ ls -l file
-rw------- 1 terdon terdon 11 Feb 27 02:14 file
$ sudo -i
# cat file
Hello you!

De qualquer forma, mesmo que o root não possa ler seus arquivos como root, eles sempre poderão efetuar login como você sem uma senha:

$ whoami
terdon
$ sudo -i
[sudo] password for terdon: 
# whoami 
root
# su - terdon
$ whoami
terdon

Portanto, você rootpode mudar para qualquer outro nome de usuário usando su(ou sudo -iu username) e poderá fazer tudo como se fosse você.

terdon
fonte
23

Sempre assuma que root(e qualquer outro usuário / processo com CAP_DAC_OVERRIDEe CAP_DAC_READ_SEARCH) possa fazer tudo, a menos que um LSM (SELinux, AppArmor ou similar) o impeça de fazer isso.

Isso significa também que você deve assumir que todas as suas teclas podem ser lidas. As senhas não são realmente seguras. Se você deseja um nível sério de segurança, deve usar um sistema completamente controlado por você (e nem usado por mais ninguém).

Hauke ​​Laging
fonte
Este é realmente o meu problema com os recursos, conforme eles estão implementados atualmente. Como eles não especificam destinos, você precisa ter uma imposição de tipos que substitua os recursos (como o SELinux) apenas para impedir que isso aconteça. Dar a um usuário CAP_DAC_OVERRIDEdá a ele, de uma só vez, todo o privilégio necessário para substituir qualquer outro mecanismo de segurança no sistema. CAP_DAC_OVERRIDEé basicamente CAP_DO_WHATEVER_YOU_WANT.
Bratchley
10

Sim root tem todos os privilégios para fazer qualquer coisa

Aqui você pode ver que eu criei um teste de nome de diretório e toquei em um arquivo lonston.txt e listei os arquivos

root@system99:/tmp# mkdir test && touch lonston.txt && ls -l
total 4
-rw-r--r-- 1 root root    0 Feb 27 16:35 lonston.txt
drwxr-xr-x 2 root root 4096 Feb 27 16:35 test

Em seguida, alterei a permissão do arquivo e do diretório para permissão nula usando 000 e listada para ver a permissão

root@system99:/tmp# chmod 000 lonston.txt && chmod 000 test && ls -l
total 4
---------- 1 root root    0 Feb 27 16:35 lonston.txt
d--------- 2 root root 4096 Feb 27 16:35 test

Então, mesmo eu posso escrever para o arquivo e ler o arquivo usando cat

root@system99:/tmp# echo "Yes root have all Privileges than other user's, let we see the permission of user's too" > lonston.txt 

root@system99:/tmp# cat lonston.txt 
Yes root have all Privilages than other user's, let we see the permission of user's too

Mesmo eu posso entrar no diretório que tem d --------- (nulo) 000 permissão, mesmo root não tem permissão de leitura ou gravação.

root@system99:/tmp# cd test/
root@system99:/tmp/test# pwd
/tmp/test

Mesmo eu posso criar os arquivos e pastas após a alteração da permissão de qualquer foram

root@system99:/tmp/test# touch /tmp/test/lonston/testdir/babin.txt

root@system99:/tmp/test# ls -l /tmp/test/lonston/testdir/
total 0
-rw-r--r-- 1 root root 0 Feb 27 16:39 babin.txt

Agora aqui podemos ver a permissão com 400

root@system99:/tmp/test# chmod 400 babin.txt

Lista para ver a permissão do arquivo

root@system99:/tmp/test# ls -l
total 8
-r-------- 1 root root   34 Feb 27 16:42 babin.txt
drwxr-xr-x 3 root root 4096 Feb 27 16:38 lonston

Usando o vim im, adicionei 1 linha ao arquivo babin.txt

root@system99:/tmp/test# vim babin.txt

Mas enquanto estiver no modo vim, ele nos notará W10: Aviso: Alterando um arquivo somente leitura Mas ainda pode ser gravado

Agora podemos obter o arquivo para saída

root@system99:/tmp/test# cat babin.txt 
hi this is the write persmission 
this is added while the file have 400 permission

Então eu tenho logout do usuário root para o usuário normal e listei o arquivo tendo permisson nulo, o que também está no root

root@system99:/tmp# exit
exit

Navegue para o diretório / tmp

sysadmin@system99:~$ cd /tmp/
sysadmin@system99:/tmp$ ls -l
total 8
---------- 1 root root   88 Feb 27 16:36 lonston.txt
d--------- 2 root root 4096 Feb 27 16:35 test

Mas enquanto lê o arquivo do usuário normal, não podemos

sysadmin@system99:/tmp$ cat lonston.txt 
cat: lonston.txt: Permission denied

sysadmin@system99:/tmp$ cd test/
cat: test/: Permission denied

É isso, espero que você tenha o poder do usuário root

Se você estiver em Usuário Normal, se precisar obter privilégios de root, precisamos usar o sudo, ele solicitará a senha do sudo

exemplo:

sysadmin@system99:/tmp$ sudo cat lonston.txt 
[sudo] password for sysadmin: 
Yes root have all Privilages than other user's, let we see the permission of user's too

O usuário do Sudo tem colaboração com o grupo de usuários raiz, então qual sudo tem o privilégio de root.

Para saber mais sobre o sudo

# man sudoers

Aqui podemos ver que eles definiram como o usuário normal pode ter direitos de Sudo Apenas menos linhas que eu mencionei aqui.

sysadmin@system99:/tmp$ sudo cat /etc/sudoers

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Totalmente podemos ler ou editar ou excluir os arquivos mesmo root Não tem permissão de leitura.

Babin Lonston
fonte
2
Por que essa resposta tem tão poucos votos positivos? Abrange quase todos os casos que podem ocorrer com exemplos.
Foo Bar
8

No Unix tradicional, o root é todo-poderoso. Em particular, o root pode ler qualquer arquivo e até bisbilhotar o que seus programas estão fazendo internamente. Se os dados forem realmente confidenciais, mantenha apenas cópias criptografadas (considere, por exemplo, o GNU Privacy Guard para isso, mas leia a documentação cuidadosamente antes) e nunca descriptografe-o em uma máquina que não esteja sob seu controle total.

(A paranóia é maravilhosa, nunca há o suficiente ;-)

Sério, pense cuidadosamente nos custos que o vazamento dos dados pode causar e, portanto, quanto você estará preparado para pagar pela segurança. A segurança perfeita é impossível; para obter um pouco mais de segurança, o custo começa a aumentar rapidamente. Mas tome cuidado para não cair na armadilha de uma medida cara que realmente não aumenta a segurança ...

vonbrand
fonte
3

Também deve ser assumido que qualquer pessoa que possa ter a oportunidade de estar na mesma sala que o hardware pode ler ou escrever o que quiser. Se eles forem muito pacientes, poderão entender os dados criptografados. Eles não precisam de métodos de canal lateral se puderem substituir o software de criptografia.

user130144
fonte
2

Sim, a raiz pode ler o arquivo protegido mesmo quando o proprietário não pode (enquanto o proprietário obviamente pode remover a proteção e depois ler o conteúdo):

echo "123" > abc.txt
chmod 000 abc.txt
cat abc.txt

cat: abc.txt: permissão negada

su
cat abc.txt

123

No entanto, na configuração normal, a raiz não pode acessar arquivos protegidos nos sistemas de arquivos remotos, como o NFS ("squash raiz").

h22
fonte
+1 por mencionar a squash raiz do NFS. No entanto, desde que o root possa processar o usuário que possui o diretório montado no NFS, o squash raiz ainda não o protege.
Jenny D
2

Para impedir que o root ou qualquer um possa ler seus arquivos, é necessário criptografá-los. A Criptografia de arquivo é uma opção muito conveniente, se você quiser evitar lidar com manipulações complexas do sistema de arquivos.

Opções de criptografia:

  1. Criptografar arquivos comuns e impedir que todos, exceto você, possam visualizá-los
  2. Criptografe scripts de shell e torne as versões criptografadas executáveis, mas também impeça que todos possam modificá-los ou visualizá-los

Se você escolher a opção 1, veja como criptografar seus arquivos:

cat (your-file) | openssl aes-128-cbc -a -salt -k "(specify-a-password)" > (your-file).enc

Para descriptografar o arquivo acima, execute um comando como este:

cat (your-file).enc | openssl aes-128-cbc -a -d -salt -k "(specify-the-password)" > (your-file).dec

- Você pode colocar o texto acima em um script para que não apareça no seu histórico. Ou, você pode simplesmente remover o parâmetro " -k ", que solicitará ao openssl a solicitação de uma senha.

Se você escolher a opção 2, basta copiar e colar seu script no seguinte site:

http://www.kinglazy.com/shell-script-encryption-kinglazy-shieldx.htm

Após o envio do seu script para esse site, um arquivo zip será criado instantaneamente para você. Copie o link para o arquivo zip, vá para a sua caixa UNIX e execute estas etapas:

  1. wget link para o arquivo zip
  2. descompacte o arquivo zip recém-baixado
  3. cd / tmp / KingLazySHIELD
  4. ./install.sh / var / tmp / KINGLAZY / SHIELDX- (seu-script-name) / home / (seu-username) -force

Depois de concluir as etapas anteriores, você pode simplesmente executar o script criptografado de onde quer que esteja especificado para instalá-lo na etapa 4 ... ou seja, / home / (seu nome de usuário) / (seu script criptografado). sh

CalmingT
fonte