1

Я бы хотел, чтобы мой пользователь apache мог читать и писать файлы, а мои пользователи sftp могли загружать файлы, которые затем становятся доступны (rwX), как другим пользователям sftp, так и apache, и все остальные читают нормально. ,

psst: я знаю, что этот вопрос часто I know this question comes up a lot, and I've been reading answers and trying many many things for two days now and am now thoroughly confused . Кроме того, я знаю о рисках безопасности, связанных с предоставлением доступа для записи www-данных на мой сайт, но я не обсуждаю эту проблему.

Вот мои шаги:

usermod -aG www-data tim
mkdir -p /var/www/mysite/public_html

# now upload/untar the site, etc. not shown here #

chown -R www-data:www-data /var/www/mysite
chmod -R u+rwX,go+rwX,g+s,o-w /var/www/mysite

# now make the apache virtual host and so on .. not shown here #

Файлы внутри public_html устанавливаются так: группа имеет запись:

-rw-rwSr-- 1 www-data www-data favicon.ico

Теперь, войдите в систему как моя учетная запись "tim", используя sftp, я загружаю новый файл в папку public_html, затем просматриваю его разрешение:

-rw-r--r-- 1 tim      wwww-data COPYING.txt

Поэтому я потерял группу WRITE, хотя думал, что добавил g+s в родительскую папку, чтобы она наследовала группу.

По-видимому, это не означает, что он также наследует группу /mask /. Я где-то читал (и потерял ссылку), что SFTP не соблюдает umask; Похоже, что именно там разрешение теряется, но я не знаю, как это исправить.

edit нашел ссылку umask и попробовал ее - http://john.parnefjord.se/node/62 - может увидеть, что файл выполняет вход в систему apon, но после загрузки маска не установлена на g+w.

2 ответа2

0

Когда процесс создает файл в Unix, он контролирует, какие разрешения ему назначены. Процесс указывает набор разрешений, обычно 0666 или 0777, в системном вызове создания файла. Разрешения изменяются с помощью umask процесса для создания фактических разрешений для файла. Специальные флаги в родительском каталоге не являются частью этого процесса. Процесс также может изменить разрешения для существующего файла через другой системный вызов с именем chmod() .

SFTP - это действительно протокол удаленной файловой системы. Когда клиент создает файл на сервере, он может точно указать серверу, какие разрешения предоставить новому файлу. Клиент также может удаленно вызывать chmod() для изменения прав доступа к существующим файлам. SFTP-сервер OpenSSH не предоставляет администратору сервера никаких средств для ограничения этого, о чем я знаю.

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

#!/bin/sh
cd /var/www/mysite || exit 1
find . -type f ! -perm 0664 -exec chmod 0664 '{}' ';'
0

Я не проверял много, но я пытался 2-3 раза с разными групповыми разрешениями на локальном сервере.

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

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