База данных SQL и разрешения (через PHP) - PullRequest
1 голос
/ 02 ноября 2011

Я создаю веб-сайт, который, помимо прочего, базы данных изображений. Для простоты скажем, что каждое изображение может иметь описание и путь к файлу, и это сохраняется в таблице, например,

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 Ответ

0 голосов
/ 10 ноября 2011

После получения ответов на другие вопросы от сообщества я теперь могу ответить на свой собственный вопрос.

Очевидно, что это можно реализовать в PHP, используя /etc/passwd, получая права доступа к файлам через int fileperms ( string $filename ), и либо обновляя базу данных таковыми, либо используя их в качестве проверки перед предоставлением доступа к файлам. Это, однако, излишне. Проще просто использовать suPHP .

suPHP - это инструмент для выполнения сценариев PHP с разрешениями их владельцы. Он состоит из модуля Apache (mod_suphp) и setuid корневой двоичный файл (suphp), вызываемый модулем Apache для изменения UID процесса, выполняющего интерпретатор PHP.

Что касается целесообразности, то общее мнение в SO, похоже, состоит в том, что такой сервер следует реализовывать только в том случае, если он служит цели. Это можно принять как означающее "это вообще не рекомендуется"

...