Настройка umask для монтирования sshfs

Если я смонтировать сервер sshfs без umask, я получу -rw-rw-r-- на новые созданные файлы. Если я пытаюсь открыть файл php на сервере в моем браузере, я получаю эту ошибку:

Incorrect file/directory permissions: Above 755.
In order files to be processed by the webserver, their permissions have to be equal or below 755. 

Итак, я попробовал с umask=0022: новые созданные файлы имеют -rwxr-xr-x, Эти разрешения в порядке, так как ошибка выше не появляется больше. Однако я не могу понять, почему новые файлы устанавливаются как исполняемые файлы...

Не могли бы вы объяснить? Большое спасибо...

4 ответа

От sshfs руководство:

   -o umask=M
          set file permissions (octal)

Обратите внимание, что руководство упоминает название опции umask, Так что это не те значения, которые вы использовали бы в chmod, где 7 средства rwx (двоичный 111). Вместо, umask это маска, как следует из названия.

За fuse эта маска используется как инверсия желаемого разрешения.

Затем из http://wiki.gilug.org/index.php/How_to_mount_SFTP_accesses мы получаем следующее:

[umask я] шаблонная маска. Используется как обратный chmod, потому что используется для затенения разрешений, которые будут установлены при создании файлов и каталогов. Чем выше восьмеричное значение, тем больше ограничение (на двоичном уровне бит 1 затеняет атрибут, а бит 0 - это позволяет).

0 allows rwX
1 allows rw-
2 allows r-X
3 allows r--
4 allows -wX
5 allows -w-
6 allows --X
7 allows ---

Итак, если вы поставите 0022, разрешение будет идти следующим образом:

  1. И с 0777 (см. справочную страницу umask), чтобы рассмотреть только разрешения "пользователь", "группа" и "другие" (то есть отменить первую часть маски).

000 000 010 010 -> 0022

AND

000 111 111 111 -> 0777

=

000 000 010 010 -> 0022

  1. Инвертировать три разрешения.

000 010 010 -> 022

становится

111 101 101 -> 755

Если вы не хотите, чтобы файлы были исполняемыми, но хотите, чтобы они были доступны для чтения и записи (chmod 666), вы должны установить umask чтобы:

110 110 110 = 666 <- chmod value
001 001 001 = 111 <- umask value

В umaskПараметр sshfs касается только того, как удаленные файлы выглядят для вас в вашей локальной системе, это пролило свет на проблему для меня: serverfault.com/q/228396, желаемая umask 0002 для удаленно созданных файлов и папок была достигнута с помощью:

Строки, добавленные к /etc/pam.d/sshd в удаленной системе:

# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session    optional     pam_umask.so umask=0002

Ура, эта проблема для меня давняя.

В драйверах фьюзов опция не работает интуитивно.

  • Он не маскирует существующие разрешения. Вместо этого он устанавливает разрешения для своей инверсии.
  • Это применимо только при чтении. Для новых файлов и папок устанавливаются разрешения в соответствии с sshdконфиг на удаленном хосте.

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

Некоторые водители предлагают отдельные fmask/ dmaskварианты, чтобы не делать все исполняемым, но sshfsне является одним из них. Если вы не хотите, чтобы файлы были исполняемыми, noexecбудет работать (но не будет отражено в разрешениях). Если одни файлы должны быть исполняемыми, а другие нет, то это невозможно.

Некоторые файловые системы позволяют устанавливать маски отдельно для каталогов и файлов с dmask а также umask, что позволит вам отключить исполняемый бит для файлов. Я не уверен, если sshfs предлагает это, другие просили об этом -> https://superuser.com/questions/1020582/fuse-file-system-fmask-and-dmask.

Вы можете установить noexec опция для всей файловой системы, если вы не хотите, чтобы какой-либо пользователь выполнял какие-либо файлы.

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