У меня есть сеть сайтов, где все сайты используют одну и ту же папку «изображения». Я создал / home / _images / entity и связал его со всеми веб-сайтами, и он отлично работает с Apache, когда я открываю / images / на любом из сайтов, я получаю список изображений и могу их просматривать.
Проблема в suPHP, который изменяет идентификатор процесса PHP-скрипта на идентификатор владельца файла, поэтому, когда я загружаю site1.com, все скрипты выполняются как user1 (и файлы / папки, созданные с помощью этих сценариев, принадлежат пользователю user1: user1). Когда я загружаю site2.com, все скрипты выполняются как user2 (а файлы / папки, созданные с помощью этих скриптов, принадлежат пользователю user2: user2). Все эти пользователи НЕ принадлежат к одной и той же группе, и я бы не хотел менять это, так как это сервер cPanel / WHM, поэтому я боюсь, что что-то испорчу, если я изменю (основную?) Группу всех пользователей.
Поэтому мне нужно настроить его таким образом, чтобы все вновь созданные папки и файлы в / home / _images / entity (принадлежащие пользователю root) имели права на чтение / запись для всех.
Вот команда, которую я использовал:
setfacl -Rdm o::rwx /home/_images/entities
Чтобы проверить это:
root@server1 [~]# getfacl /home/_images/entities/
getfacl: Removing leading '/' from absolute path names
# file: home/_images/entities/
# owner: root
# group: root
user::rwx
group::rwx
other::rwx
default:user::rwx
default:group::rwx
default:other::rwx
Это выглядит нормально, но когда я пытаюсь загрузить изображение через site1.com, оно выглядит так:
root@server1 [/home/_images/entities]# ls -l
total 24
drwxrwxrwx+ 5 root root 4096 Jan 14 06:25 ./
drwxrwxrwx 5 root root 4096 Jan 12 13:08 ../
drwxrwxr-x+ 3 user1 user1 4096 Jan 14 06:25 1/
А в папке «1» находится изображение (и папка с большими пальцами):
root@server1 [/home/_images/entities/1]# ls -l
total 236
drwxrwxr-x+ 3 user1 user1 4096 Jan 14 06:25 ./
drwxrwxrwx+ 5 root root 4096 Jan 14 06:25 ../
-rw-rw-rw- 1 user1 user1 225569 Jan 14 06:25 689048f221ab7c556f4d482a9d92b2d6.jpg
drwxrwxr-x+ 2 user1 user1 4096 Jan 14 06:25 thumbs/
Мои вопросы:
1) Почему вновь созданные папки не имеют прав на «запись» для всех остальных [не для пользователя и / или группы]? Если я загружаю первое изображение с site1.com, то я не могу загружать другие изображения с любого другого сайта, в то время как все сайты могут их отображать.
2) Что означает «+» в конце списка разрешений? (drwxrwxr-x +)
3) Почему вновь созданные файлы имеют только разрешения «rw» для пользователя, группы И всех остальных и не имеют разрешений на выполнение? На самом деле мне не нужно устанавливать здесь флаг выполнения, но из моей команды вы можете видеть, что я установил "o :: rwx", поэтому он должен быть там (или нет?)
На самом деле настоящая проблема №1 - другие пользователи не могут писать в эту папку, поэтому пользователи не могут загружать изображения с других сайтов, а другие сайты не могут создавать (отсутствующие) эскизы.
Приложения, в данном случае suPHP, могут переопределять значения по умолчанию и явно устанавливать требуемые разрешения. Если suPHP требует, чтобы разрешения для «других» были чем-то отличным от того, что вы хотите, обходным путем является добавление ACL для другой группы, скажем, пользователей, которая содержит user1 и всех других пользователей, которых вы хотите:
setfacl -Rdm g:users:rwx /home/_images/entities
Тогда suPHP скорее всего оставит это разрешение в покое. Обратите внимание, что это также лучше с точки зрения безопасности, поскольку вы предоставляете разрешение на запись только группе пользователей, а не всему миру.
В +
означает, что ACL присутствует, поэтому действуют другие разрешения помимо указанного набора ugo. Вам нужно будет запустить getfacl, чтобы увидеть их.
Я думаю, что это тот же ответ, что и №1: потому что suPHP явно переопределяет разрешение на выполнение. Должно применяться то же решение, что и для №1.