Мне почти стыдно признать, что есть одна вещь, в которой я до сих пор не уверен, когда речь идет о разрешениях на файлы.
Допустим, у меня есть каталог с разрешением 750 (drwxr.x ...). Затем я создаю внутри него несколько файлов-потомков с довольно обычным разрешением 644 (.rw.r..r ..).
Могут ли файлы в этом каталоге быть прочитаны любым другим пользователем в системе (вне их владельца или группы) и почему? С одной стороны, эти файлы имеют бит, доступный для чтения всем, так что это должно указывать на то, что файл доступен для чтения всем. С другой стороны, восходящий каталог не является всемирно исполняемым (и не читаемым), поэтому, пока это предотвращает доступ к содержимому каталога, бит, доступный для чтения всем в файлах, не имеет значения. Это окончательно правда или есть какой-то способ обойти это?
Теперь я, кажется, регулярно вижу случаи, когда кто-то рекомендует chmod -R o-rwx или что-то в этом роде. В качестве примера можно привести каталоги Maildir Debian, созданные, как я полагаю, с помощью postfix - для всех файлов, а не только для каталога, было удалено чтение мира / группы. Действительно ли необходимо удалить этот бит чтения мира из файлов внутри, если у каталога нет доступа к миру? Я спрашиваю, когда пытаюсь спланировать, как настроить / var / www на сервере, чтобы он не был доступен для чтения другим локальным пользователям.
То, что вы спрашиваете, больше связано с тем, как виртуальная файловая система выполняет обход каталогов. Из-за того, что все в системе Linux является файлом, это создает особенность при работе с каталогами. Хотя у них есть поле для выполнения, пытаться выполнить каталог бессмысленно. Более того, в файловой системе ext2 / 3/4 используемая структура данных мало похожа на "настоящий" файл. Вместо этого разрешения имеют немного другое значение применительно к каталогам.
Понимая эти различия, мы можем видеть, что если права пользователя в конкретном каталоге --x
тогда мы можем определить, что пользователю разрешено попытка доступ к файлу, но без возможности просмотра самой записи каталога. Или, если говорить более кратко, как в coredump, «с --x вы не можете список каталог, но вы жестяная банка прочтите файлы внутри него если разрешения файла позволяют это. "
Зная все это, возьмем файл /home/user/public/file
Например. Как правило, не следует открывать свой домашний каталог глобально, однако они хотят предлагать файлы «общедоступно» глобально. Таким образом, вы должны установить разрешения следующим образом:
/home
- 755/home/user
- 711 (а возможно, 751)/home/user/public
- 755Нет, не могут. Все деревья тропинок к файл тоже должен быть доступен.
[можно создавать каталоги, содержимое которых вы не можете видеть, но все равно можете читать файлы; т.е. каталог скрытых файлов, но не с разрешениями 0750, как в вашем примере]
Однако безопаснее создавать все файлы и каталоги в зависимости от того, как вы хотите получить к ним доступ. Если вы переместите этот файл из существующего каталога в каталог, доступный для чтения всем, то вдруг ваш файл, который вы привыкли считать «защищенным», перестанет существовать. Если у вас есть права доступа к файлу, чтобы он также был o-rwx, тогда файл будет защищен сам и не будет полагаться на каталог для его защиты.
Да, файлы можно читать, потому что они доступны для чтения всем, но если каталог не доступен для чтения, при условии, что пользователь не входит в группу, владеющую каталогом, пользователю потребуется еще одна ссылка на файл. например.:
cd directory
ln file /tmp
Теперь пользователь может получить доступ к файлу, но должен будет сделать это с помощью / tmp / file.
Такое поведение легко проверить на себе.
$ mkdir foo
$ echo readable > foo/bar
$ ls -ld foo/
drwxr-xr-x 2 sciurus sciurus 4096 2011-03-22 1329 foo/
$ ls -l foo/
total 4
-rw-r--r-- 1 sciurus sciurus 9 2011-03-22 13:29 bar
$ cat foo/bar
readable
$ chmod a-r foo
$ ls -ld foo/
d-wx--x--x 2 sciurus sciurus 4096 2011-03-22 1329 foo/
$ ls -l foo/
ls cannot open directory foo/: Permission denied
$ cat foo/bar
readable
$ chmod a+r foo
$ chmod a-x foo
$ ls -ld foo/
drw-r--r-- 2 sciurus sciurus 4096 2011-03-22 1329 foo/
$ ls -l foo/
ls cannot access foo/bar: Permission denied
total 0
-????????? ? ? ? ? ? bar
$ cat foo/bar
cat foo/bar: Permission denied