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

Почему пользователи могут удалять файлы в общей папке Samba, если у них явно нет на это разрешения?

Я пытаюсь обдумать права доступа к файлам в общем ресурсе Samba, и следующие озадачивают меня, почему и user1, и user2 могут удалять файлы друг друга, даже если у них, похоже, нет разрешения на это. Вот как эти файлы выглядят на машине ubuntu, на которой запущен сервер samba:

-rwxr--r-- 1 user1 private 0 okt 8 00:43 'test file user1.txt'*
-rwxr--r-- 1 user2 private 0 okt 8 00:06 'test file user2.txt'*

Если это имеет какое-то значение, оба user1 и user2 являются членами private. Оба пользователя получают доступ к общему ресурсу через свои соответствующие компьютеры с Windows, сначала создавая соответствующий файл, а затем удаляя файлы друг друга.

в smb.conf этот ресурс настроен следующим образом:

 [Together]
   path = /srv/together
   browseable = yes
   read only = no
   writable = yes
   create mask = 0755
   directory mask = 0755
   valid users = @private
   force group = private

Я думаю, что valid users параметр намного более мощный, чем я думал, в основном поднимая всех членов группы до статуса владельца. Это так?

Редактировать: (в ответ на комментарии)

У родительского каталога есть следующие разрешения:

drwxrwx--- 19 root      private   44 okt  8 00:58 together/

Так что я предполагаю, что это то, что требует удаления. Думаю, мне нужно пройти ускоренный курс по разрешениям файлов Linux. Мне никогда бы не пришло в голову, что удаление - это не просто особый вид редактирования ... Значит ли это, что если бы пользователи попытались отредактировать файлы, они бы не смогли, даже если бы удаление прошло нормально?

Намек на липкий кусочек t тоже полезно. Спасибо.

Что касается расширенной поддержки ACL: да, она включена (по-видимому, по умолчанию), но я не совсем понимаю, что это значит для моей «проблемы» (если мы предположим на минуту, что разрешения родительского каталога ничего не объясняют) . Должен ли расширенный ACL быть включен или отключен для создания такого поведения, которое я наблюдаю?

Хорошо, я попытаюсь подвести итог и дать вам быстрое объяснение того, как работают разрешения Linux (без включения ACL) и почему они работают так:

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

Пояснение:

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

Например. когда вы используете ls ты в основном читать список из "каталога-файла" (именно поэтому вам нужны права на чтение каталога, чтобы вывести его содержимое).

Файл существует (за некоторыми исключениями, но это слишком много для данной публикации) до тех пор, пока на него указывает какая-то «ссылка» / «запись в списке», иначе говоря, он указан в каком-то каталоге. Если вы удалите все списки файла из каждого каталога, в котором он указан, файл (и его данные) исчезнут. Это немного сложно понять, но пока давайте просто предположим, что файл существует только один раз.

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

Итак, опять же, каталоги - это только особый вид файла, для которого разрешения имеют немного другое значение (ну, не совсем, если вы думаете об этом, только для eИксразрешение ecute):

  • читать (r или 4) -> перечислить имена содержимого каталога (например, с ls)
  • написать (w или 2) -> изменить "файл каталога", необходимый для удаления файлов внутри этого каталога, также необходимый для создания файлов внутри этого каталога (если вы думаете о каталоге как текстовом файле, это упрощает понимание этой концепции)
  • выполнить (x или 1) -> перейдите в этот каталог и прочтите индексные дескрипторы файлов внутри каталога (это самая большая разница между каталогом и «обычным» файлом). Без него вы не можете получить доступ ни к одному файлу в этом каталоге, и вы не можете cd в него, например если у вас нет разрешения x на каталог /test вы не можете получить доступ /test/testfile.txt, даже если у вас есть разрешение на чтение testfile.txt. По сути, x-flag - это разрешение на чтение inodes внутри каталога.

Если вас интересует дополнительная информация по теме разрешений, ознакомьтесь с этим введением профессора Поллока о разрешениях файлов и каталогов Unix, в нем также кратко рассматриваются списки управления доступом (которые в основном вроде как это делает Windows, вы устанавливаете разрешения для каждой папки / файла для каждого пользователя / группы поверх назначения одного пользователя и одной группы): https://wpollock.com/AUnix1/FilePermissions.htm

Если вы изучаете систему разрешений Linux, я бы пока воздержался от использования ACL, если вам действительно не нужны более конкретные разрешения.

Да и кстати: права на запись в файл внутри этого каталога дают вам право изменять (записывать) этот файл. В вашем примере user2 может не записать в «тестовый файл user1.txt», даже если он может его удалить.

Изменить: я также хотел добавить объяснение об индексных дескрипторах и о том, как они взаимодействуют с каталогами и т. Д., Но решил, что в этом посте это зайдет слишком далеко. Если вам интересно, есть много отличных источников по этой теме, но на самом деле это не должно вас сильно беспокоить, если вам просто нужно настроить свою Samba.