Разрешение SFTP, отклоненное на файлах, принадлежит www-данным

Мне настраивали довольно стандартный сервер рабочий Apache и PHP. Приложение, которое я запускаю, создает файлы, и они принадлежат пользователю Apache www-data. Файлы, которые я загружаю через SFTP, принадлежат моему собственному пользователю charlesr. Все файлы являются частью www-data группа. Моя проблема состоит в том, что я не могу изменить или перезаписать любой из файлов через SFTP, которые принадлежат www-data, даже при том, что charlesr часть www-data группа. Я могу изменить файлы без проблем через сессию SSH.

Таким образом, я не уверен, что сделать. Как я даю свои полномочия сессии SFTP изменить www-data находящиеся в собственности файлы?

Некоторое время фона, это записки, которые я написал для меня когда регулировка сервер:

Now set up permissions on `/var/www` where your files are served from by
default:

$ sudo adduser $USER www-data
$ sudo chgrp -R www-data /var/www
$ sudo chmod -R g+rw /var/www
$ sudo chmod -R g+s /var/www

Now log out and log in again to make the changes take hold.

The previous set of commands does the following:

1. adds the current user ($USER) to the `www-data` group;
2. changes `/var/www` to belong to the `www-data` group;
3. adds read/write permissions to the group that `/var/www` belongs to;
4. sets the SGID bit on `/var/www`; this final point bears some explaining.

И затем я продолжаю объяснять мне, что установка SGID укусила средства (т.е. все файлы, созданные в /var/www станьте частью www-data сгруппируйтесь автоматически).


ОБНОВЛЕНИЕ

Кажется, что проблема была вызвана самим приложением или, более конкретно, установка (Kohana) среды разработки приложения определенные файлы, которые это пишет в 0644 (rw-r - r-); т.е. не перезаписываемая группа. Это, вместе с тем, что файлы также принадлежат www-data предназначенный, что я не мог отредактировать файлы через SFTP, когда вошел в систему как charlesr. Я не уверен, почему я мог отредактировать файлы через SSH. Мое предположение - то, что я, должно быть, использовал sudo.

Вот стратегия полномочий, которую я теперь использую благодаря неустанной справке Marty Fried, который указал на дефекты в моей предыдущей стратегии и также помог мне мариновать в мире полномочий Linux пока я наконец grokked она. Спасибо Marty!

Обзор

  • Файлы и каталоги в /var/www должен принадлежать root:webmasters
  • Весь devs должен быть членами webmasters группа
  • Все каталоги в /var/www должен быть установлен на: 2775 или u=rwx,g=rwxs,o=rx (rwxrwx-r-x)
  • Все файлы в /var/www должен быть установлен на: 0664 или ug=rw,o=r (rw-rw-r-)

Следующее должно принадлежать www-data:webmasters (т.е. это каталоги, которые Apache должен смочь записать в):

  • приложение/кэш
  • приложение/журналы
  • загрузить
  • client_helpers/upload

ПРАКТИЧЕСКОЕ РУКОВОДСТВО

Настраивать полномочия на /var/www где Ваши файлы подаются от по умолчанию:

  1. sudo addgroup webmasters
  2. sudo adduser $USER webmasters
  3. sudo chown -R root:webmasters /var/www
  4. sudo find /var/www -type f -exec chmod 664 {} \;
  5. sudo find /var/www -type d -exec chmod 775 {} \;
  6. sudo find /var/www -type d -exec chmod g+s {} \;
  7. sudo chown -R www-data:webmasters application/cache/ [и т.д....]

Теперь выйдите из системы и войдите в систему снова для внесения изменений, утверждаются.

Предыдущий набор команд делает следующее:

  1. Создайте новую названную группу webmasters; все пользователи, которым нужен доступ для записи к файлам приложения, будут добавлены к этой группе.
  2. добавляет текущий пользователь ($USER) к webmasters группа.
  3. изменяет владельца /var/www кому: root и группа к webmasters группа.
  4. добавляют 664 полномочий (-rw-rw-r-) во все файлы в /var/www.
  5. добавляют 775 полномочий (drwxrwxr-x) ко всем каталогам в /var/www.
  6. наборы SGID обдумали /var/www и все каталоги там; этот конечный пункт переносит некоторое объяснение. Обратите внимание также, что можно также поместить 2 впереди chmod восьмеричного (например, 2644), чтобы сделать то же самое.
  7. устанавливает владельца на www-data (Пользователь Apache) и группа предоставленного каталога к webmaster. Это гарантирует, что каталог перезаписываем Apache и любым в webmasters группа. Сделайте то же для всех других каталогов, которые должны быть перезаписываемы.
23
задан 13 April 2017 в 15:24

2 ответа

Я заметил, что вы не использовали chown.

Чтобы правильно установить владельца файлов / папок, вы можете установить весь каталог следующим образом: chown -R www-data:www-data

Это устанавливает владельца для группы www-data и пользователя www-data

Кроме того, вы можете сделать это как временное решение:

chmod 777 /var/data/<filename> или chmod 777 /var/data/<foldername>

отредактируйте файл (ы) по мере необходимости, затем

chmod 644 /var/data/<filename> или chmod 755 /var/data/<foldername>

Будьте осторожны при использовании ключа «-R», так как он также меняет права доступа для всех вложенных файлов и папок.

664 - это стандартные разрешения для файлов Apache, а 755 - стандартные разрешения для папок.

Надеюсь, это поможет:)

Звезда

0
ответ дан 13 April 2017 в 15:24

Ubuntu.com имеет довольно хорошие серверные руководства, такие как руководство по Apache . Где вы получили свои процедуры, которые вы так тщательно записали? Мне никогда не приходилось сталкиваться с такими сложностями для любого из серверов, которые я настроил, хотя я открыт для вероятности того, что я не все сделал правильно, а также я фактически не устанавливал серверы для все, что является публичным или очень большим, так что могут быть дыры в безопасности, о которых я не знаю.

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

Возможно, я что-то упускаю, но ваша проблема должна быть довольно простой. Пользователь, вошедший в систему с использованием sftp, должен быть членом группы www-data, а файлы, которые вы пытаетесь изменить, должны иметь права на запись для группы www-data. Для меня не имеет смысла изменять файлы, используя ssh, но не используя sftp; Вы уверены, что входите в одну и ту же учетную запись для обоих? В sftp вы можете ввести такие команды, как !groups, чтобы вывести список своих групп, или !whoami, чтобы проверить, какое имя пользователя вы используете. Результаты должны совпадать с тем, что вы видите, используя ssh (с теми же командами минус восклицательный знак).

Вы также должны иметь возможность использовать chmod, chown, chgrp из sftp, если у вас есть разрешение на это.

Кстати, я думаю, что в вашем списке есть хотя бы одна довольно плохая команда:

sudo chmod -R g+rw /var/www

Это дает миру право на запись для каждого файла и папки в / var / www , Это звучит как плохая идея. Как правило, только root имеет разрешение на запись в эти каталоги, если только конкретным не требуется больше разрешений, обычно только отдельным каталогам.

Примечание: это была ошибка с моей стороны. Спасибо DonalLafferty за указание на то, что он указывает «g», а не «a», поэтому он меняет только разрешения группы. Мои уставшие старые глаза (или плохой шрифт), должно быть, прочитали его как «а».

Правки для пояснения

Обычно файлы, созданные Apache, доступны только для чтения как для группы www-data, так и для всех других пользователей, так же, как файлы, принадлежащие пользователю root. в / var / www. Таким образом, не должно быть никаких причин делать кого-либо членом www-data. Проблема в том, что каждый может получить доступ к записи, а это другой случай. Это следует сделать, сделав определенные каталоги доступными на вашем сайте, и это можно сделать просто с помощью chmod, либо с sudo, поскольку он, вероятно, принадлежит root, либо путем создания владельца самостоятельно, а не с использованием sudo.

Если у вас есть больше разработчиков, которым нужен доступ ко всему сайту, то есть когда вы хотите создать группу пользователей +, например, «веб-мастеров», сделайте ее владельцем сайта, дайте разрешения на запись этой группе и сделайте все разработчики члены этой группы. Таким образом, список каталогов сайта будет выглядеть примерно так:

drwxrwxr-x  ##  webmasters     webmasters   #### ####-##-## ##:##  mysite.com

Больше правок

С тех пор я понял, что вам не нужно создавать пользователь "вебмастер", просто группа. Тогда файлы могут принадлежать root: веб-мастерам, то есть root является владельцем, а web-мастерами является группа.

В ответе на вопросы ниже файлы, которые пишет Apache, будут принадлежать www-data и группировать www-data. Эти файлы обычно не являются чем-то, что вы пишете, так что не члены www-данных могут иметь доступ только для чтения - я думаю, что это зависит от прав доступа к каталогу. Если вам нужно больше, чем случайный доступ для записи, тогда добавление себя в группу может быть полезным. Обычно вы делаете специальные каталоги, доступные для записи, для контента, сохраненного Apache. Также учтите, что на большинстве совместно используемых веб-хостингов, работающих под управлением Apache без доступа к оболочке, даже не будет способа создания групп.

Но Apache может читать файлы, даже принадлежащие пользователю root. Почти все файлы имеют доступ для чтения, но не для записи. Так что, если вы не хотите изменить это, Apache не обязательно должен быть в группе веб-мастеров.

Это все основные настройки Linux, а не Apache. Apache заботится только о доступе изнутри веб-сервера, и это устанавливается конфигурационными файлами. По этой причине ссылка на документацию по Ubuntu, которую я включил в свой пост, должна рассматриваться как лучший источник, чем общедоступная вики.

Кстати, в O'Reilly Apache Cookbook говорится: «Для каталогов документов, таких как htdocs, cgi-bin и значки, необходимо будет установить разрешения таким образом, чтобы это было наиболее целесообразно для модели разработки вашего конкретного приложения. веб-сайт, но ни при каких обстоятельствах ни один из этих каталогов или файлов, содержащихся в них, не должен быть доступен для записи пользователю веб-сервера ".

Наконец, использование ACL - это хороший способ установить права доступа к файлам, если вам нужно больше контроля. Это может даже быть хороший способ установить их все время, и это то, что я должен исследовать.

0
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

Похожие вопросы: