5

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

Есть ли команда, делающая это возможным?

4 ответа4

4

В качестве альтернативы, вы можете установить 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

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

Например, я установил umask на своем сервере (OpenSSH, на сервере Red Hat) sftp на 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 или, по крайней мере, в оболочке, без привлечения отдельных утилит.

0

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

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

0

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

cd

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

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