Настройка 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
, разрешение будет идти следующим образом:
- И с
0777
(см. справочную страницу umask), чтобы рассмотреть только разрешения "пользователь", "группа" и "другие" (то есть отменить первую часть маски).
000 000 010 010 -> 0022
AND
000 111 111 111 -> 0777
=
000 000 010 010 -> 0022
- Инвертировать три разрешения.
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
опция для всей файловой системы, если вы не хотите, чтобы какой-либо пользователь выполнял какие-либо файлы.