Como posso testar se existe um arquivo em / root sem su para root?

3

Meu sistema operacional é o Ubuntu 14.04 LTS. Eu tenho um arquivo /root/1.txt , e entrei com 'yu', que não tem permissão de leitura neste arquivo.

Quando eu uso o código if [ -e /root/1.txt ] , ele retorna falso. Eu sei que posso usar su - root para alterar o usuário e obter o resultado correto.

Minha pergunta é: como posso fazer isso sem su - root ? Existe uma maneira de resolver esta situação com sudo ?

Eu resolvi essa situação com test

sudo test -e /root/1.txt &&echo "the file is exist" ||echo "the file isn't exist"

    
por user164825 18.04.2016 / 05:25

3 respostas

1

É aparente que o diretório / root em seu sistema não tem (pelo menos) 'execute' permisões para o usuário 'yu', seja através da associação ao grupo ou dos 'outros' bits. Assim, 'yu' não pode listar o conteúdo do diretório / root para determinar se o /root/1.txt existe ou não.

Para uma descrição mais detalhada das permissões de arquivos e diretórios (no Linux, como você mencionou o Ubuntu), veja: Executar vs Ler bit. Como funcionam as permissões de diretório no Linux?

Se você não estiver disposto a alterar as permissões em / root, precisará escalonar seus próprios privilégios (bem, test ) para ler o diretório. Como [ é um programa real ( /usr/bin/[ ), assim como um shell integrado, você pode usar sudo: sudo [ -e /root/1.txt ] && echo yes || echo no . (Contraste com [[ , que é apenas incorporado, não um programa externo).

Se você estiver disposto a alterar as permissões em / root, uma mudança mínima seria abrir as permissões 'other' para adicionar o bit 'execute' ( sudo chmod o+x /root , por exemplo). Isso impede a listagem geral do diretório, mas permite que você verifique arquivos específicos:

user@host:~$ ls -ld /root
drwx-----x 2 root root 4096 Apr  3 04:55 /root
user@host:~$ [ -e /root/1.txt ] && echo yes
yes
user@host:~$ ls /root
ls: cannot open directory /root: Permission denied

Uma variação em 'other + execute' seria 'group + execute' onde você adiciona permissões de execução ao grupo e muda o grupo de / root para um que 'yu' é membro de.

Longa história curta, esta afirmação:

When I use the code if [ -e /root/1.txt ] , it returns false. I know I can use su - root to change user and get the right result.

tem um uso enganoso da palavra "direita". As permissões do sistema de arquivos determinam como o test se comporta. Não importa se você sabe que o arquivo existe; importa se o programa tem permissões para ver o arquivo.

    
por 22.04.2016 / 03:32
6

Não .

/root/ não é legível por muito boas razões . Se você realmente precisa trabalhar com esse arquivo, coloque-o em outro lugar.

    
por 18.04.2016 / 06:52
0

Se você quiser fazer isso com sudo ao invés de su, você pode fazer isso:

sudo sh

Isso fará com que você se logue como root no terminal, então você pode fazer o que quiser. Mas eu não aconselho que você mexa com / root, porque deve haver uma razão pela qual não é avaliável por outros usuários. Você deve mover '1.txt' para outro lugar. Espero que isso ajude!

    
por 23.04.2016 / 03:58