Який простий та безпечний спосіб обробляти дозволи файлів для Apache?


0

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

Моя ситуація полягає в тому, що у мене є веб-додаток, який живе /var/www/fooі потребує завантаження через SFTP. Я планую на тому, щоб git-ftp робити фактичні завантаження. Усі файли повинні читати Apache. Деякі папки та будь-які вкладені папки, створені програмою, повинні бути написані Apache. У мене є один обліковий запис користувача на розглянутому сервері, який наразі не належить до жодної спеціальної групи, але має повний sudoдоступ. З часом буде кілька завантажень, і після кожного завантаження мені потрібно запустити сценарій, який може створювати, змінювати або видаляти файли.

Який найменш інвазивний спосіб отримати файли на місці та не стикатися з жодними проблемами дозволів, ні під час завантаження, ні під час виконання?

У випадку, якщо це допомагає, я налаштовую програми Laravel на Debian, хоча модель, яку я шукаю, сподіваємось узагальнити за межами цієї рамки, мови, на якій вона працює, і цього розповсюдження.


Передача файлів через SSH.
Рамхаунд

Так, це неявно в "SFTP".
Майкл Кордінглі

Назва вводить в оману. Це не питання щодо завантаження (на що найкраща відповідь була б ssh). Я думаю, що мова може йти про дозволи на файли, хоча я не на 100% впевнений.
ctrl-alt-delor

@richard Оновлено. Це краще?
Майкл Кордінглі,

Підтримка Git натискає безпосередньо на SSH. просто додайте apache до групи SSH (група користувача ssh) та встановіть дозвіл root-root www як 755 із правом власності ssh_user:www-data. Якщо вам потрібен, щоб якийсь каталог був написаний апашем, то змініть дозволи на 775
Alex

Відповіді:


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

Інша важлива річ - встановити ваш сервер оболонки та sftp таким, що має umask 0002. Без встановлення зміни 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

У будь-якому випадку немає єдиного вірного способу, але, сподіваємось, вищесказане може бути корисною відправною точкою.


Підводячи підсумки, щоб перевірити моє розуміння: всі каталоги отримують 2775. Усі файли коду отримують 0664. Усі файли даних отримують 0644. Області, які повинні бути доступні користувачеві, що завантажує, встановлюються для кореневого користувача та групи www-pub, решта залишаються як- є з www-даними як для користувача, так і для групи. Apache може читати, але не записувати файли додатків, тому що це не власник, ані група, але встановлено читабельний біт для "other". SGID у каталогах зберігає будь-які нові файли, що належать тій самій групі, що і каталог. ACL переконайтеся, що нових файлів 664 замість 644. Це все правильно?
Майкл Кордінглі

Не могли б ви додати трохи більше інформації про те, що відбувається з ACL? Це та частина, якої я не дотримуюся повністю.
Майкл Кордінглі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.