Я возился с назначением разных пользователей и групп файлам в /var/www , но каждый способ, который я пробовал до сих пор, оказывается слишком сложным и подверженным ошибкам. Я ищу простой и повторяемый шаблон, который минимально отличается от настроек файловой системы по умолчанию (разрешения, липкие биты, ACL и т.д.) Как только я получу это, я планирую реплицировать его на несколько серверов с течением времени.

Моя ситуация такова, что у меня есть веб-приложение, которое находится в /var/www/foo и должно быть загружено через SFTP. Я планирую, чтобы git-ftp делал реальные загрузки. Все файлы должны быть доступны для чтения Apache. Некоторые папки и любые подпапки, созданные приложением, должны быть доступны для записи Apache. У меня есть одна учетная запись пользователя на рассматриваемом сервере, которая на данный момент не относится к каким-либо специальным группам, но имеет полный доступ sudo . Со временем будет несколько загрузок, и после каждой загрузки мне нужно будет запустить скрипт, который может создавать, изменять или удалять файлы.

Каков наименее инвазивный способ получить файлы на месте и не столкнуться с какими-либо проблемами с разрешениями, ни во время загрузки, ни во время выполнения?

На случай, если это поможет, я настраиваю приложения Laravel на Debian, хотя, надо надеяться, шаблон, который я ищу, должен распространяться за пределы этой среды, языка, на котором он работает, и этого распределения.

1 ответ1

1

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

Мы предполагаем, что вы беспокоитесь о безопасности, поэтому вы не будете использовать корневую учетную запись для загрузки. Обновите корневой каталог вашего веб-сервера, если это необходимо.

Создайте группу наподобие www-pub , добавьте учетную запись, которую вы используете для публикации кода в этой группе.

  • /var/www/www.example.org/data
  • /var/www/www.example.org/www

Имея это в виду, я обычно устанавливаю такие разрешения. Эти команды написаны так, чтобы их можно было безопасно повторять.

# perms for the code/html folder
find /var/www/www.example.org/www -type d ! -perm 2775 -print0 | xargs --null --no-run-if-empty chmod 2775
find /var/www/www.example.org/www -type f ! -perm 0664 -print0 | xargs --null --no-run-if-empty chmod 0664
find /var/www/www.example.org/www \( ! -user root -o ! -group www-pub \) -print0 | \
xargs --verbose --null --no-run-if-empty chown root:www-www-pub

# perms for the data folder
find /var/www/www.example.org/data -type d ! -perm 2755 -print0 | xargs --null --no-run-if-empty chmod 2755
find /var/www/www.example.org/data -type f ! -perm 0644 -print0 | xargs --null --no-run-if-empty chmod 0644
find /var/www/www.example.org/data \( ! -user www-data -o ! -group www-data \) -print0 | \
xargs --verbose --null --no-run-if-empty chown www-data:www-data

Еще одна важная вещь - настроить umask 0002 для сервера оболочки и sftp. Без настройки изменения значения umask по сравнению с обычным значением по умолчанию для записанных файлов 0022 будет доступна только для чтения группа. Но это нужно, чтобы не маскировать бит записи группы.

Если вы не хотите возиться с масками, а ACL включены для вашей файловой системы, вы можете вместо этого использовать ACL, что в некотором смысле упрощает ситуацию, так как среды umask не учитываются для записей не по умолчанию, когда вы используя ACL.

# set on empty directory before uploading files
# the parent directory has full read-write-execute for www-pub
# newly create files will be read-write for www-pub
setfacl --recursive --modify group:www-pub:rwx,default:group:www-pub:rw- /var/www/www.example.org/www

setfacl --recursive --modify group:www-data:rwx,default:group:www-data:rw- /var/www/www.example.org/data

В любом случае, нет единственно верного пути, но, надеюсь, вышесказанное может быть полезной отправной точкой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .