#php #sql #database #permissions
#php #sql #База данных #разрешения
Вопрос:
Я создаю веб-сайт, который, помимо прочего, содержит изображения баз данных. Для простоты предположим, что каждое изображение может иметь описание и путь к файлу, и это хранится в таблице, например
CREATE TABLE IF NOT EXISTS picture
(
ID INT NOT NULL AUTO_INCREMENT,
description VARCHAR(150),
file VARCHAR(150) NOT NULL,
PRIMARY KEY(ID)
) ENGINE=InnoDB;
Вместо того, чтобы хранить все эти изображения в одном месте и назначать произвольные пути к файлам, я хочу, чтобы пользователь мог загружать изображения через ftp в учетную запись unix и создавать свою собственную иерархию каталогов. Таким образом, они могут использовать ftp / sftp / scp для их копирования или ssh и использовать другие программы Linux, такие как imagemagik или zip. Или изменить разрешения для изображений (см. Ниже)
Теперь я понимаю, что это вызовет проблемы, если пользователь решит удалить изображения или переместить их, но я полагаю, что есть способы обойти это (база данных не гарантирует, что изображения будут там, напишите защищенные изображения, повторно внедрите mv
/ rm
…)
У меня очень мало опыта работы с базами данных. Я хотел знать, целесообразно ли это. В частности, полезно ли использовать разрешения файлов Linux в качестве разрешений базы данных. Так, например, пользователь Manderly
может создать группу MJ12
и добавить пользователей WSimons
, BPage
, и ANavarre
к ней, затем на веб-сайте эти пользователи будут иметь доступ к этим изображениям (не автоматически, я знаю, но по сценарию с помощью PHP), И они также могут использовать sftp / ftp / scp.
Ответ №1:
Получив ответы на другие вопросы от сообщества, теперь я могу ответить на свой собственный вопрос.
Очевидно, что это можно реализовать в PHP, используя /etc/passwd
, получая права доступа к файлам через int fileperms ( string $filename )
, и либо обновляя базу данных с их помощью, либо используя их в качестве проверки, прежде чем разрешать доступ к файлам. Однако это излишне. Проще просто использовать suPHP.
suPHP — это инструмент для выполнения PHP-скриптов с разрешениями их владельцев. Он состоит из модуля Apache (mod_suphp) и корневого двоичного файла setuid (suphp), который вызывается модулем Apache для изменения uid процесса, выполняющего интерпретатор PHP.
Что касается целесообразности, общий консенсус в SO, по-видимому, заключается в том, что такой сервер следует внедрять только в том случае, если он служит определенной цели. Это можно понимать как «обычно это не рекомендуется»