Permissões de arquivo: por que não consigo listar um diretório? [duplicado]

5

Eu posso listar diretórios em um shell raiz,

root@ThinkPad:~# ll /media/
total 36
drwxr--r--  6 root root  4096 2011-05-12 16:41 ./
drwxr-xr-x 22 root root  4096 2011-05-12 13:14 ../
drwxr-xr-x  5 root root  4096 2011-05-12 15:56 hd/
drwxr--r--  2 root root 16384 2011-05-12 14:20 lost+found/
drwxr-xr-x  5 root root  4096 2011-05-12 16:34 main/
drwxr--r--  4 root root  4096 2011-05-12 16:41 .Trash-0/

mas não da minha conta de usuário:

alex@ThinkPad:~$ ll /media/
ls: cannot access /media/..: Permission denied
ls: cannot access /media/hd: Permission denied
ls: cannot access /media/lost+found: Permission denied
ls: cannot access /media/.Trash-0: Permission denied
ls: cannot access /media/.: Permission denied
ls: cannot access /media/main: Permission denied
total 0
d????????? ? ? ? ?                ? ./
d????????? ? ? ? ?                ? ../
d????????? ? ? ? ?                ? hd/
d????????? ? ? ? ?                ? lost+found/
d????????? ? ? ? ?                ? main/
d????????? ? ? ? ?                ? .Trash-0/

Não entendo por que não consigo ver arquivos ( /media tem permissão + r).

    
por RusAlex 13.05.2011 / 08:20

2 respostas

22

Para poder "inserir" um diretório, que é um pré-requisito para listar seu conteúdo, você também precisa da permissão + x.

Observe também que esse é um requisito desde o início (raiz) da estrutura de diretórios. Para poder entrar em um diretório / foo / bar / baz, um usuário precisa ter a permissão + x em todos os diretórios intermediários.

    
por andol 13.05.2011 / 08:26
0

Eu uso meu script pathlld . pathlld é:

#!/bin/bash
# Show the permissions on all the directories leading from / to
# the parameter.
# Usage: $0 <file_or_dir> <...>
#
#   $Header: /home/walt/bin/RCS/pathlld,v 1.4 2010/02/21 20:34:16 walt Exp $
#
#
function pathlld ()
{
    if [ "$1" = "/" ] ; then
    /bin/ls -ld /
    else
    parent="${1%/*}"
    pathlld "${parent:-/}"
    /bin/ls -ld "$1"
    fi
}
force=0
if [ "$1" = "-f" ] ; then
    force=1
    shift
fi
# Make sure we got at least one filename or directory name
file_or_dir="$1"
file_or_dir="${file_or_dir:?'missing.'}"

while [ $# -ne 0 ] ; do
    if [ $force -eq 1 -o -e "$1" ] ; then
    case "$1" in
        /* ) target="$1" ;;
        *  ) target="$PWD/$1" ;;
    esac
    pathlld "$target"
    [ -L "$target" ] && /bin/ls -ldL "$target"
    else
    echo "Nonexistent file or directory: $1"
    fi
    shift
done

Ele não detecta sistemas de arquivos montados como somente leitura, use mount para isso.

    
por waltinator 02.11.2011 / 01:29