
Я только что переехал на новый сервер и столкнулся со странными проблемами с правами доступа.
Каждый загруженный мной файл имеет разрешение 600, принадлежит учетной записи пользователя и также находится в той же группе. С этим разрешением сервер не может вносить изменения в эти файлы.
Папка, в которую я загружаю данные (через обычный sftp), имеет права доступа 755.
Почему все новые файлы, которые я сюда загружаю, получают это разрешение 600? И как мне изменить его, чтобы добавленные файлы получали разрешения, позволяющие веб-серверу изменять их?
Примечание: Я установил vsftpd, в котором есть настройка для определения umask по умолчанию. Вход через этофтпработает как и ожидалось. Однако это не решает проблему при входе черезsftp.
решение1
Мое основное решение этой проблемы — создать скрипт, который находится между SSH и SFTP и изменяет umask при входе пользователя в систему:
> vim /opt/sftp-server.sh
#!/bin/bash
umask 022
/usr/libexec/openssh/sftp-server
Затем отредактируйте файл конфигурации ssh_d (/etc/ssh/sshd_config) и отредактируйте строку sftp SubSystem так, чтобы она указывала на ваш скрипт:
Subsystem sftp /opt/sftp-server.sh
Убедитесь, что вы правильно установили разрешения для нового скрипта:
> chmod 755 /opt/sftp-server.sh
Теперь файлы, загружаемые через SFTP, должны иметь права 755!
http://blog.mrmason.net/2009/05/27/changing-default-file-permissions-for-sftp/
решение2
sftp-сервер — это подсистема sftp, обычно используемая с openssh.
При более внимательном рассмотрении команды:
$ /usr/lib/openssh/sftp-server -h
usage: sftp-server [-ehR] [-f log_facility] [-l log_level] [-u umask]
Поэтому мы можем установить umask по умолчанию для соединений, передав ключ -u при инициализации. В /etc/ssh/sshd_config
том месте, где определена подсистема sftp, найдите строку.
Subsystem sftp /usr/lib/openssh/sftp-server
и измените его так, чтобы он выглядел так:
Subsystem sftp /usr/lib/openssh/sftp-server -u 0022
Чтобы разрешить созданным файлам иметь umask по умолчанию 644, а файлам 755
Помните, что этот параметр является глобальным и повлияет на все файлы, передаваемые по SFTP, поэтому перед его реализацией примите меры безопасности.