Вопрос В sftp, как установить разрешение по умолчанию для всех файлов в папке?


Я хочу установить разрешение по умолчанию для всех файлов в папке, включая недавно загруженные, до определенного значения, например 644, вместо того, чтобы делать «chmod 644» все время.

Есть ли какая-нибудь команда, которая делает это возможным?


5
2017-09-05 23:51


происхождения




ответы:


Кроме того, вы можете установить umask для всех sftp-логинов в конфигурационном файле sshd (/ etc / ssh / sshd_config в моем Debian). Для этого добавьте -u 022 к подсистеме sftp:

Subsystem sftp /usr/lib/openssh/sftp-server -u 022

Из man sftp-server:

-u umask
     Sets an explicit umask(2) to be applied to newly-created files and directo‐
     ries, instead of the user's default mask.

4
2018-02-08 20:04





Я потратил немало времени на поиск более полного ответа на этот вопрос. Настройка другой umask для sftp хорошо и хорошо, но это не универсальный ответ, так как umask будет ограничивать только разрешения и не предоставлять дополнительные. Какие точные разрешения для файла, загруженного через sftp, зависят также от разрешений исходного исходного файла и от клиента, используемого для загрузки.

В качестве примера я установил umask на мой сервер (OpenSSH, на сервере Red Hat) sftp server до 0002, но если я загружу текстовый файл с разрешениями 0600 в исходной системе с использованием клиента OpenSSH sftp, он все равно будет иметь 0600 в месте назначения. В частности, это означает, что я не могу, насколько мне известно, гарантировать, что файлы, загруженные на этот sftp-сервер, имеют какие-либо групповые разрешения вообще, что по расширению означает, что я также не могу использовать списки управления доступом (ACL) для расширения разрешений для других пользователей или групп ,

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

  • Создайте задание cron, чтобы вручную установить нужные разрешения после факта. Достаточно простой, но асинхронный, хотя вы можете запускать его часто.
  • использование Inotify для мониторинга каталогов назначения, используемых сервером sftp, и установки необходимых разрешений для любых файлов, созданных в них. Это должно быть практически немедленным, но может иметь и другие ограничения, например, в случае большого количества файлов или каталогов.

Я натолкнулся сообщение в блоге на positon.org который прекрасно объясняет параметр inotify, с примерами и даже сценариями инициализации. Лучше всего читать там, но в случае, когда сайт когда-либо исчезает, ключевая команда:

inotifywait -mrq -e CREATE --format %w%f /tmp/mytest/ | while IFS= read -r FILE; do chmod g=u "$FILE"; done

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


4
2018-05-12 13:41



Это должен быть приемлемый ответ, поскольку это только одно решение после 10 часов, которое работает ... Спасибо человеку. На самом деле работает ... Вот, что работает для меня: stackoverflow.com/a/10221511/2309309  unix.stackexchange.com/a/12847/258413 - fdrv


Файлы разрешений создаются в зависимости от вашего umask, Чтобы получить 644 разрешения, установите для umask значение 022 (umask 022).

Чтобы сделать это изменение постоянным, поместите эту команду на удаленные серверы ~/.profile (в зависимости от вашей оболочки).


0
2017-09-06 00:05



Я искал umask и понял это. Но я до сих пор не знаю, где изменить / изменить это значение. Можете ли вы дать мне больше намеков? - user866435
На удаленных серверах ~ / .profile, скорее всего. Просто добавьте строку umask 022 на самом дне (в большинстве случаев). - Ingmar Hupp
извините, но я не могу найти файл .profile в папке. Я только что создал его? - user866435
@user: Да, просто Создайте один. (Однако обратите внимание, что если ~/.bash_profile существует, то ~/.profile будут проигнорированы.) - grawity


Файл .profile будет находиться в домашнем каталоге вашей учетной записи пользователя. Когда ssh находится в вашем домашнем каталоге, но вы также можете заставить оболочку изменить свой домашний каталог, набрав:

cd

Если вы используете Linux, а ваша пользовательская оболочка - bash, как и большинство людей, у вас, вероятно, не будет .profile, но у вас могут быть .bash_profile и .bashrc. Установите umask в любом из этих файлов, а не создайте .profile.


0
2017-09-06 06:50