Подтвердить что ты не робот

Сохранение разрешений для файлов samba при редактировании файла

Основы кода, с которыми я работаю, выгружаются из репозиториев Git на мою машину Linux. Поскольку наш производственный код написан для развертывания в Linux, я делаю все тестирование на своей машине Linux, но хотел бы использовать Windows для повседневного использования, включая редактирование/создание кода.

Для этой цели я создал общий ресурс Samba в папке (моей домашней папке), где я проверяю код, например:

[wgrover]
    path = /home/wgrover
    available = yes
    valid users = wgrover
    read only = no
    browsable = yes
    public = yes
    writable = yes

Однако, когда я редактирую файл из samba share \\linux-box\wgrover в Windows, , разрешение файла в Linux продолжает меняться до 755, хотя это было 644 перед редактированием.

Это отображается в моем git diff следующим образом:

diff --git a/debian/maggie.nginx.conf b/debian/maggie.nginx.conf
old mode 100644
new mode 100755
index 7cda506..7eab574

Можно установить create mask в smb.conf, но это также не "сохранит" исходные разрешения файлов. Я могу игнорировать изменения режима файла в Git, установив fileMode = false в .gitconfig, но также игнорирует проблему.

Есть ли способ сохранить права доступа к файлам при их изменении из linux?

4b9b3361

Ответ 1

Наконец-то выяснилось, почему разрешение менялось. Путаница возникла из настройки map archive = yes, которая является значением по умолчанию в Samba. После установки map archive = no, владелец запускает бит, который начал вести себя так, как я ожидал, что он будет вести себя.

Нашел ответ, прочитав здесь документацию: http://www.samba.org/samba/docs/using_samba/ch08.html в Разрешениях и атрибутах файлов в MS-DOS и Unix. В нем четко упоминается этот побочный эффект:

Следовательно, нет никакой пользы ни для одного из трех исполняемых битов Unix, которые присутствуют в файле на диске Samba. Однако файлы DOS имеют свои собственные атрибуты, которые необходимо сохранить, когда они хранятся в среде Unix: архив, система и скрытые биты. Samba может сохранять эти биты, повторно используя исполняемые биты разрешения файла на стороне Unix - если это дано указание сделать это. Однако сопоставление этих битов имеет неприятный побочный эффект: если пользователь Windows хранит файл в общей папке Samba, и вы просматриваете его в Unix с помощью команды ls -al, некоторые исполняемые биты не будут означать, что вы ожидайте их.

Однако он также упоминает следующее:

Мы должны предупредить вас, что значение по умолчанию для параметра map archive равно yes, а остальные два параметра имеют значение по умолчанию no. Это связано с тем, что многие программы работают неправильно, если бит архива не сохранен правильно для файлов DOS и Windows. Однако системные и скрытые атрибуты не являются критическими для работы программы и оставляются на усмотрение администратора.

Вы также можете узнать больше о бите архива здесь: http://en.wikipedia.org/wiki/Archive_bit