Назад | Перейти на главную страницу

Сохранять право собственности на каталог независимо от того, кто добавляет / редактирует файлы в нем

У нас есть каталог разработки, которым пользуется наша команда. Каждый раз, когда пользователь добавляет файл, владелец переходит к этому пользователю. Есть ли способ гарантировать, что владелец файлов, добавленных в каталог, всегда остается неизменным?

Если вы получаете доступ к каталогу через SMB с помощью Samba, вы можете использовать force user параметр в smb.conf. В противном случае вы действительно не сможете заставить владелец. Однако, если проблема заключается просто в том, что пользователи не могут редактировать файлы друг друга в каталоге, вы можете исправить это, выполнив следующие действия:

  1. Заставьте всех использовать umask 002 (или 007). Проверьте /etc/profile и /etc/login.defs. Это гарантирует, что файлы доступны для групповой записи.
  2. Сделайте каталог (и все подкаталоги) владельцем определенного группа что каждый член команды является членом.
  3. Сделайте каталог (и все подкаталоги) группой setuid ("chmod g+s"). Это специальная функция в Unix, которая делает все новые файлы принадлежащими общей группе.

Нет, но вы можете сделать каталог setgid таким образом, чтобы владелец группы каталога имел групповое владение всеми файлами, созданными в нем.

Стандартное решение этой проблемы - совместное использование репозитория управления версиями между несколькими пользователями - состоит в том, чтобы каждый мог взаимодействовать с репозиторием через сервер, работающий как выделенный пользователь, а не через файловую систему. Как вы обнаружили, использование файловой системы проблематично.

Вы не указали, какую систему контроля версий вы используете, но с помощью Suversion или git вы должны настроить выделенного пользователя в своей системе, а затем предоставить вашим разработчикам доступ к репозиторию через ssh. В Subversion вы бы использовали svn+ssh URL-адреса; есть документация в svn справочник.

По умолчанию git использует ssh для доступа к «удаленным» репозиториям. Я заключил «удаленный» в кавычки, потому что в вашем случае вы будете запускать «сервер» в локальной системе.