Изменить права пользователя SFTP при передаче файлов на веб-сервер

847
JPinkstone

Я создал веб-сервер и имею двух пользователей, которые могут войти через SFTP для изменения, редактирования, просмотра и создания папок / новых файлов. Когда два пользователя создают новый файл, права доступа -rw-r - r--. Мне нужны разрешения, чтобы разрешить запись от другого пользователя, что они не могут прямо сейчас. Я попытался изменить umask, файл sshd-config, разрешения группы и т. Д., Но я все еще не могу понять, как это исправить. Любая помощь будет оценена. Спасибо!

Веб-сервер работает Raspbian на Raspberry Pi. Я установил Apache, PHP, MySQL и PHPmyAdmin. Я подключаюсь к пи через SFTP из filezilla на Mac.

0
«Я пытался изменить файл umask, sshd-config,…» - Что именно вы пробовали? Kamil Maciorowski 5 лет назад 0
Я изменил umask на 000 и добавил строку "ForceCommand sftp-Internal -u 2" в sshd-config JPinkstone 5 лет назад 0
Да, я уверен, что это SFTP, так как я подключаюсь через порт 22, и я использую filezilla на Mac. Спасибо JPinkstone 5 лет назад 0
Я использовал FileZilla на Ubuntu. Подтверждено, что он может создавать файлы. Но для меня это создает файлы относительно удаленного umask. Какая ОС на вашем сервере? Есть ли `sshd`? или что-то еще (например, `dropbear`)? На какой файловой системе вы создаете новые файлы? Как монтируется файловая система? Пожалуйста [отредактируйте] вопрос и добавьте туда эту информацию вместе с любой другой соответствующей информацией из ваших комментариев (например, факт, что вы используете FileZilla на Mac). Смысл в том, чтобы другие пользователи знали обо всем важном, не читая все комментарии и не собирая информацию, разбросанную там. Kamil Maciorowski 5 лет назад 0
@KamilMaciorowski Только что сделал, спасибо JPinkstone 5 лет назад 0

2 ответа на вопрос

2
Kamil Maciorowski

Я сделал некоторые исследования для вас.

Мой (локальный) клиент - Ubuntu, мой (удаленный) сервер - Raspbian. Я подключаюсь через SFTP с помощью sftpинтерактивной команды клиента . Я передал тестовый файл с локальными разрешениями -rwxrwxrwxот клиента к серверу, используя эту команду в sftp:

put testfile 

Удаленная копия унаследовала разрешения, за исключением того, что некоторые из них были замаскированы удаленным umask, что и было 0022, так что удаленные разрешения оказались -rwxr-xr-x. Это ожидается.

Затем я отредактировал пульт, ~/.profileчтобы (временно) установить umask как 0002. После повторного входа в систему новый umask работал в удаленной оболочке. Я перезапустил свой локальный sftpи протестировал снова, но новая удаленная копия не подчинялась новому umask.

Не удивительно В моем пульте .profileэто звучит так:

для установки umask для логинов ssh установите и настройте пакет libpam-umask

Оказалось, libpam-umaskна самом деле в libpam-modules. Он уже был установлен.

Я прочитал эту часть документации . Это дает пример:

Добавьте следующую строку, чтобы /etc/pam.d/loginустановить пользовательский umask при входе в систему:

session optional pam_umask.so umask=0022 

Я проверил удаленный /etc/pam.dкаталог и предположил, что мне нужно изменить sshdфайл там, а не login. Кроме того, я не хотел передавать umask глобально модулю. В документации сказано:

Модуль PAM пытается получить значение umask из следующих мест в следующем порядке:

  • umask= аргумент
  • umask= запись в поле пользователя GECOS
  • [...]

Я выбрал GECOS, запустил sudo vipwи добавил umask=0002к своей записи; сохранены. Результат был:

kamil:x:1001:1004:Kamil Maciorowski,,,,umask=0002:/home/kamil:/bin/bash 

Затем я добавил эту строку в конце /etc/pam.d/sshd:

session optional pam_umask.so 

После этого я удалил удаленную копию testfile, запустил локальный sftpзаново и передал testfileснова. Новая удаленная копия подчинялась выбранному мной маску.


редактировать

Я попробовал FileZilla на своей локальной Ubuntu. Он создает файлы на сервере по отношению к удаленному umask; он копирует локальные файлы с их локальными разрешениями также в отношении удаленного Umask.

С FileZilla можно изменить разрешения удаленного файла "вручную". Я понимаю, что это то, что вы хотите избежать.

(Редактирование заканчивается здесь)


Я думаю, что процедура для вас заключается в следующем:

  1. Возьмите приведенный выше пример и установите umask для двух рассматриваемых пользователей, чтобы удаленные файлы, которые они создают через SFTP, были доступны для записи по группам.
  2. Создайте специальную группу на сервере, добавьте в нее двух пользователей и сделайте их своей основной группой.

(Я не буду подробно объяснять пункт 2 здесь. Проведите исследование; задайте отдельный вопрос (ы) в случае возникновения проблем).

Таким образом, каждый новый файл, созданный через SFTP любым из двух пользователей, будет принадлежать специальной группе, и он будет доступен для записи этой группой. Помните, что копируемые файлы сохраняют свои разрешения настолько, насколько они могут (по крайней мере, в моих тестах).

Спасибо большое за Ваш ответ! Я очень ценю это. Итак, я попробовал все, что вы сказали, но, похоже, все еще дает пользователям разрешения по умолчанию. Мой пользователь 'webuser' я изменил на "webuser: x: 1001: 1001: ,,,, umask = 0000: / var / www / html /: / bin / bash" и добавил строку в конце файла sshd. Я создаю файл на filezilla на сервере raspberry pi, и разрешения для этого файла -rw-r - r--. У вас есть идеи, что я все еще делаю неправильно? Еще раз спасибо. JPinkstone 5 лет назад 0
В filezilla я могу создать папку или файл на веб-сервере. Он создает фактический файл в папке html для сервера apache. Я могу сделать файл test1.html на сервере. Мне удалось создать новые файлы через filezilla с другими веб-серверами. В очередной раз благодарим за помощь. JPinkstone 5 лет назад 0
0
harrymc

Я не думаю, что filezilla делает что-то еще, кроме создания файла с разрешениями по умолчанию, указанными на удаленном сервере.

Если вы можете перейти на использование SFTP-клиента и сервера OpenSSH, вы можете использовать putэтот -Pфлаг.

Это создает файл, который всегда получает обычные разрешения для удаленного сервера. Но после завершения загрузки клиент дополнительно просит сервер явно (пере) установить разрешения, которые будут такими же, как у локального файла, с помощью chmodзапроса, к которому umask не применяется.

Для получения дополнительной информации см. Этот ответ .