
Я пытаюсь выяснить, почему проявляется определенное поведение при изменении прав доступа к файлу, сохраняемому из редактора Windows на смонтированном с помощью SAMBA разделе Unix.
Ситуация:
У нас есть файл в Unix с правами доступа 777:
-rwxrwxrwx 1 testuser users 4859 Jan 23 15:09 fbparser.pl*
Каталог, в котором находится файл, монтируется с ПК под управлением Windows 7 через Samba.
Открываем файл для редактирования в редакторах «Notepad++» или «Sublime».
При изменении и сохранении файла на стороне Unix права доступа меняются на:
-rw-rwxrwx 1 testuser users 4859 Jan 23 15:09 fbparser.pl*
Теперь я подозреваю, что это может быть связано НЕ с монтированием Samba, потому что та же проблемаНЕпроисходит при открытии и сохранении файла в обычном Блокноте Windows!
Поэтому я изначально думал, что это потому, что упомянутые выше редакторы программирования могут быть настроены на то, чтобы - вместо того, чтобы просто сохранить файл - переименовывать исходный файл в $orig_filename.bak
и затем сохранять новый контент как НОВЫЙ файл с исходным именем файла. Это основано на моем собственном предыдущем опыте решения той же проблемы с использованием редактора UltraEdit.
Однако если это является причиной изменений в завивке, я не могу объяснить два ДРУГИХ симптома, которые я наблюдал:
Во-первых, изначально не создается никакого файла резервной копии.
Во-вторых, при создании НОВЫХ файлов (с использованием
touch
) в том же каталоге в Unix Shell, разрешения для нового файла НЕТ-rw-rwxrwx
вообще.В-третьих, если это имеет значение, номер инода для файла остается прежним после редактирования.
В чем еще может быть проблема и какие шаги я могу предпринять для ее изучения?
Моя собственная проблема с UltraEdit исчезла, когда я сказал UE НЕ создавать резервную копию файла путем переименования; однако в Notepad++ такой возможности нет.
решение1
Я нашел этот вопрос, пытаясь решить очень похожую проблему. Решение в моем случае заключалось в добавлении map archive = no
в глобальный раздел smb.conf.
Основная проблема заключается в способе, которым Samba сопоставляет разрешения из Dos в Linux.
Похоже, что когда notepad++ сохраняет файл, он устанавливает/сбрасывает атрибут "архив" dos-файла. По умолчанию Samba использует его для управления атрибутом выполнения для разрешений пользователя на файл.
Итак, если вы установите параметр Samba:
map archive = no
Атрибут не сопоставляется, и разрешения пользователя на выполнение сохраняются в том виде, в котором они были установлены ранее.
решение2
У меня была такая же ситуация. Мне помогло изменение параметра create mask в файле smb.conf.
create mask = 0600 -> create mask = 0700