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

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

2 ответа2

2

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

Мой (локальный) клиент - 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 любым из двух пользователей, будет принадлежать специальной группе, и он будет доступен для записи этой группой. Помните, что копируемые файлы сохраняют свои разрешения настолько, насколько они могут (по крайней мере, в моих тестах).

0

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

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

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

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

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