Если пользователь не может получить доступ /a/b
, он не может получить доступ к любому файлу в /a/b/c
. Права доступа не /a/b/c
имеют значения, поскольку обратный путь в каталогах останавливается на /a/b
.
Если все, что вам нужно, это запретить указание каталога в /a/b
списке, но у вас все в порядке с доступом к файлам, /a/b
если они угадывают имя файла, тогда вы можете сделать /a/b
исполняемый файл, но не читаемый. В каталоге разрешение на чтение контролирует только список содержимого каталога, а разрешение на выполнение контролирует доступ к записям этого каталога.
# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# echo 'hello' >/a/b/existingfile
# su bob -c 'ls -l /a/b'
ls: /a/b: Permission denied
# su bob -c 'cat /a/b/nosuchfile'
cat: /a/b/nosuchfile: No such file or directory
# su bob -c 'cat /a/b/existingfile'
hello
# su bob -c 'ls -l /a/b/c'
… contents of /a/b/c …
Если вы не хотите, чтобы другие пользователи могли получать доступ к файлам, /a/b
кроме /a/b/c
, вы можете открыть доступ /a/b/c
через другое представление, через bind mount .
# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# mkdir /c
# mount --bind /a/b/c /c
# su bob -c 'ls /a/b/c'
ls: /a/b/c: Permission denied
# su bob -c 'ls -l /c'
… contents of /a/b/c …
chmod +x /a/b