Coda 2 и SCP загружают файлы с неверным разрешением
В настоящее время у меня есть базовый сервер Ubuntu, на котором работает веб-сайт. Веб-сайт предназначен для нескольких студентов, изучающих HTML/PHP, и каждый студент имеет свою учетную запись с символической ссылкой на общую папку на веб-сайте. Поскольку студенты работают на веб-сайте вместе, каждый пользователь должен иметь возможность изменять все файлы (например, index.html). Поэтому я создал группу Webdev, содержащую всех студентов с установленным по умолчанию значением umask 0002 в их.bashrc (это позволяет вновь создаваемым файлам иметь значение 774). Общая папка принадлежит группе Webdev с помощью chmod g+s, так что новые файлы / папки также принадлежат группе Webdev.
Проблема заключается в том, что учащиеся используют IDE (Coda 2), и когда они создают новый файл или папку с помощью IDE, файл имеет разрешения 644 на сервере (недоступно для записи в группе). Однако, когда я создаю новый файл через соединение с Cyberduck (клиент SFTP), права доступа к файлу равны 664 (как и должно быть). Так что я не понимаю, почему Coda была бы другой.
Однако после некоторых проб и ошибок я считаю, что Coda сначала создает файл на локальном диске, а затем загружает этот файл на сервер. На Mac по умолчанию вновь создан файл 644. Когда клиент загружает файл, который уже 644, он остается 644 на стороне сервера (в этой ситуации umask отчасти бесполезен). Я также попытался создать разрешения ACL для этой папки, но загруженный файл с моего Mac через SCP не получает разрешения ACL по умолчанию.
В Coda есть возможность изменить права доступа к файлу при передаче. Однако эта опция, кажется, применяет chmod ко всем загружаемым или сохраненным файлам. Когда один из студентов изменяет файл, созданный кем-то другим, когда он пытается загрузить файл или сохранить его, Coda также пытается выполнить chmod, но не удается, потому что этот пользователь не является владельцем файла.
Мое текущее решение - использовать bindfs... Я подключаю общую веб-папку, а bindfs устанавливает разрешения и групповую собственность вновь создаваемых файлов. Однако bindfs кажется немного медленным, и я уверен, что есть лучшее решение.
Даже если ученики отказались от Coda 2 и использовали Mac vim с scp, вновь созданные файлы на сервере вели бы себя так же (644), что по умолчанию на mac.
Другие опции...
1) Либо я учу студентов использовать (ssh/chmod) вместе со своей IDE для изменения собственных прав доступа к файлам при загрузке.
2) Я установил на всех компьютерах Маки umask по умолчанию 0002, который бы загружал файлы с нужными разрешениями.
3) Напишите скрипт кукурузы для исправления прав доступа к файлам каждые 5–15 минут... (Я думаю, что этот вариант является наихудшим, если студенты работают вместе).
Можно ли как-нибудь сделать так, чтобы все файлы, загружаемые через SCP, имели права доступа к файлам по умолчанию 664, даже если загруженный файл имеет более низкие разрешения? (После нескольких часов поиска я не думаю, что это возможно). Я полагаю, что кукурузный скрипт - мой лучший вариант для начинающих пользователей. Как веб-разработчики работают вместе на крупных сайтах?
примерно так: https://serverfault.com/questions/283492/how-to-specify-file-permission-when-putting-a-file-using-openssh-sftp-command
Также похоже: https://serverfault.com/questions/395418/managing-linux-directory-permissions-sftp
3 ответа
Coda на самом деле загружает локальные файлы. Если вы не используете хаки, такие как неподдерживаемый / устаревший http://sftpfilecontrol.sourceforge.net/, файлы будут иметь любые локальные разрешения. Поскольку OSX имеет umask 022, файлы, созданные в OSX, не доступны для записи в группе, поэтому 644. Coda с радостью загружает это. Как вы узнали, Coda может принудительно устанавливать определенные разрешения, но она недостаточно детализирована, чтобы указывать, что это следует делать только для новых файлов, поэтому при сохранении существующих файлов, которые не принадлежат пользователю (что является самый распространенный случай). Единственный способ, с помощью которого я получил это, - это изменение пользователей Umask на OSX. Создать файл /etc/launchd-user.conf
и положить туда:
umask 002
Затем перезагрузите компьютер. После этого Coda создает файлы размером 664 локально и загружает их. Теперь файлы доступны для групповой записи, и в настройках Coda нет необходимости устанавливать параметр "Права доступа при загрузке".
Смотрите также http://support.apple.com/kb/HT2202.
На панели настроек Coda, на вкладке "Правила", вы можете установить нужные разрешения для файлов, загружаемых через ftp/sftp. По умолчанию это 644; похоже, что просто отметка поля "Запись" в строке "Группа" может решить проблему. Конечно, каждый студент должен будет сделать это в своей собственной копии Coda.
Проблема не в правах доступа к файлу, а в группах, к которым принадлежат ваши ученики. На компьютере с веб-сервером, если вы сделаете первичную группу каждого учащегося такой же, как группа веб-сервера (в системах Linux обычно www-data или apache), и задаете разрешения для файла по умолчанию 660 на панели настроек Coda, все должно быть хорошо.,
# usermod -g apache studentUID
или же
# usermod -g www-data studentUID
в зависимости от того, какой тип Linux вы используете на веб-сервере.