![Группа www-data пишет после sftp?](https://rvso.com/image/1413926/%D0%93%D1%80%D1%83%D0%BF%D0%BF%D0%B0%20www-data%20%D0%BF%D0%B8%D1%88%D0%B5%D1%82%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20sftp%3F.png)
Я хотел бы, чтобы мой пользователь Apache мог читать и записывать файлы, мой пользователь(и) sftp мог(ли) загружать файлы, которые затем будут доступны (rwX) как другим пользователям sftp, так и apache, а все остальные могли бы читать.
псст: 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-data для записи на мой сайт, но это не та тема, которую я собираюсь здесь обсуждать.
Вот мои шаги:
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; похоже, именно там теряются разрешения, но я не знаю, как это исправить.
редактировать нашел ссылку на umask и попробовал -http://john.parnefjord.se/node/62- видно, что файл выполняется при входе в систему, но после загрузки маска не установлена на g+w.
решение1
Я особо не проверял, но попробовал 2-3 раза с разными групповыми разрешениями на локальном сервере.
Я получаю здесь то, что какие бы разрешения ни были даны файлу в локальной системе,точно такие же разрешенияполучил файл на удаленном сервере.
решение2
Когда процесс создает файл в unix, процесс контролирует, какие разрешения назначаются файлу. Процесс указывает набор разрешений, обычно 0666 или 0777, в системном вызове создания файла. Разрешения изменяются umask процесса для создания фактических разрешений для файла. Специальные флаги в родительском каталоге не являются частью этого процесса. Процесс также может изменить разрешения для существующего файла с помощью другого системного вызова с именем chmod()
.
SFTP на самом деле является протоколом удаленной файловой системы. Когда клиент создает файл на сервере, он может сообщить серверу, какие именно разрешения предоставить новому файлу. Клиент также может chmod()
удаленно вызвать его, чтобы изменить разрешения для существующих файлов. Насколько мне известно, сервер OpenSSH SFTP не предоставляет администратору сервера никаких средств для ограничения этого.
Что я, вероятно, сделал бы, так это написал бы скрипт оболочки, который просматривает папку и исправляет разрешения файлов. Вы можете запускать скрипт каждые cron
несколько минут. Что-то вроде следующего должно помочь вам начать:
#!/bin/sh
cd /var/www/mysite || exit 1
find . -type f ! -perm 0664 -exec chmod 0664 '{}' ';'