Я имею в виду следующееДокументация по спискам_контроля_доступа_Arch Linux
Говорится:
Предоставление разрешений на выполнение частных файлов на веб-сервере
Следующая методика описывает, как процессу, например веб-серверу, можно предоставить доступ к файлам, которые находятся в домашнем каталоге пользователя, не ставя под угрозу безопасность путем предоставления доступа всему миру.
Далее мы предполагаем, что веб-сервер работает как пользователь http и предоставляем ему доступ к домашнему каталогу geoffrey /home/geoffrey.
Первый шаг — предоставление разрешений на выполнение для пользователя http:
setfacl -m "u:http:--x" /home/geoffrey
Примечание: Для того чтобы процесс мог просмотреть содержимое каталога, необходимы разрешения на выполнение для каталога.
Итак, в приведенном выше примере они устанавливают разрешения на выполнение для пользователя http в каталоге /home/geoffrey. Насколько я понимаю, предоставление только бита выполнения для каталога НЕ позволит вам вывести список содержимого каталога, но позволит вам получить доступ к файлам (если вы знаете их имена + разрешения на указанные файлы в каталоге будут иметь правильные наборы разрешений). Так как же возможно, что с setfacl -m "u:http:--x" /home/geoffrey
пользователем http (или процессом, как они называют) можно будет вывести список содержимого каталога? Что я упускаю?
Заранее спасибо!
решение1
Вам необходимо -x
разрешение на каталог, чтобы иметь возможность доступа к нему и любым файлам в нем. Однако ваш доступ к файлам в каталоге зависит от разрешений файлов, а не самого каталога. Пока у вас есть права на выполнение родительского каталога (каталога), вам больше ничего не нужно для доступа к файлам, которые он содержит. Это проще всего продемонстрировать на примере:
$ sudo mkdir dir1 && echo "Hello world!" | sudo tee dir1/file1 && sudo chmod 700 dir1
Hello world!
$ ls -ld dir1/
drwx------ 2 root root 4096 Apr 12 16:09 dir1/
$ sudo ls -l dir1/
total 4
-rw-r--r-- 1 root root 13 Apr 12 16:09 file1
Имеет только root
доступ, поэтому если мы попытаемся вывести список содержимого каталога или выполнить cat для файла, это не удастся:
$ ls dir1/
ls: cannot open directory 'dir1/': Permission denied
$ cat dir1/file1
cat: dir1/file1: Permission denied
Обратите внимание, что это cat
не удается, хотя у меня есть доступ на чтение файла. Теперь, если я дам своему пользователю доступ на выполнение к каталогу и попробую снова, я смогу прочитать файл:
$ sudo chmod 711 dir1/
$ ls -l
total 4
drwx--x--x 2 root root 4096 Apr 12 16:09 dir1
$ cat dir1/file1
Hello world!
Я по-прежнему не могу вывести список содержимого каталога, так как для этого потребовался бы доступ на чтение к каталогу, но теперь я могу прочитать любой файл в каталоге, если знаю путь к нему.
Итак, основная идея здесь верна, просто последнее замечание сбивает с толку. Вам нужен доступ на чтение, чтобы вывести список содержимого, но доступ на выполнение достаточен, если вам нужно только предоставить пользователю http
доступ к определенным файлам, путь к которым известен.
Хотя эта заметка и плохо сформулирована, она не совсем неверна, просто неполна. Вам действительно нужны разрешения на выполнение, чтобыв полной меревывести список содержимого каталога. Без них вы можете видеть имена файлов, но не атрибуты:
$ ls -l
total 4
drwxr--r-- 2 root root 4096 Apr 12 16:09 dir1
$ ls -l dir1/
ls: cannot access 'dir1/file1': Permission denied
total 0
-????????? ? ? ? ? ? file1
решение2
Вы ничего не упускаете: хотя большая часть этого документа верна, примечание неверно.
Он может пересекать ваш домашний каталог, в другой каталог. Этот другой каталог может быть читаемым и пересекаемым, и, следовательно, его содержимое может быть перечислено.
Я думаю, что сделать ваш дом пригодным только для пересечения — это хорошая идея, но я также думаю, что вы правы, описание того, что он делает, неверно.
- Для просмотра имен файлов в каталоге вам необходимо разрешение на чтение.
- Вам необходимо перекрестное разрешение на доступ к
stat
файлу (чтобы узнать что-либо о файле или открыть его).
Вы отправили отчет об ошибке?