База данных SQL и разрешения (через PHP)

#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, по-видимому, заключается в том, что такой сервер следует внедрять только в том случае, если он служит определенной цели. Это можно понимать как «обычно это не рекомендуется»