Почему пользователи могут удалять файлы на общей папке 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

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

Изменить: (в ответ на комментарии)

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

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

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

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

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

1
задан 8 October 2018 в 23:03
1 ответ

Gerai, pabandysiu čia apibendrinti ir pateikti trumpą paaiškinimą apie tai, kaip veikia „Linux“ leidimai (neįtraukiant ACL) ir kodėl jie taip veikia:

Pirmiausia trumpai duoti atsakymą: norint ištrinti failą iš katalogo, jums reikia rašymo leidimų kataloge ir , o ne pačiame faile.

Paaiškinimas:

Katalogas yra tik specialus failo rūšis , kurioje yra informacija apie failus ir jų inodo numerius (inodai iš esmės yra failo metaduomenys, pvz., kur tiksliai kietajame diske yra saugomas failo duomenų turinys, failo leidimai ir pan.), trumpai, tai iš esmės yra tekstinis failas, kuriame yra jame esančių failų sąrašas.

Pvz kai naudojate ls , jūs iš esmės perskaitėte sąrašą iš katalogo failo (todėl jums reikia katalogo skaitymo leidimų, kad galėtumėte išvardyti jo turinį).

A failas egzistuoja tik (išskyrus kai kurias išimtis, bet šio įrašo yra per daug), jei tik į jį nukreipta nuoroda / nuoroda į sąrašą, dar žinomas kaip koks nors katalogas. Jei ištrinsite visus failo sąrašus iš kiekvieno katalogo, kuriame jis yra, failo (ir jo duomenų) nebeliks. Tai šiek tiek sudėtinga suprasti, bet dabar tarkime, kad failas egzistuoja tik vieną kartą.

Tikiuosi, kad tai aiškiai paaiškina, kodėl norint ištrinti reikia katalogo rašymo leidimų, o ne paties failo, nes vėlgi, katalogas yra tik „tekstinis failas“, kuriame yra jo turinio sąrašas. Jei ištrinsite failo įrašą iš „katalogo failo“, kuriame jis yra, iš tikrųjų ištrinsite failą.

Taigi vėlgi, katalogai yra tik specialios rūšies failai, kuriems leidimai turi šiek tiek kitokią reikšmę (gerai ne iš tikrųjų, jei pagalvotumėte, tik dėl el. leidimo x :

  • perskaitykite (r arba 4) -> išvardykite katalogo turinio pavadinimus (pvz., naudodami ls )
  • rašyti (w arba 2) -> modifikuoti „katalogo failą“, reikalingą norint ištrinti failus tame kataloge, taip pat reikia sukurti failus tame kataloge (jei galvojate apie katalogą kaip tekstinis failas palengvina šios sąvokos supratimą)
  • vykdyti (x arba 1) -> pakeisti į šį katalogą ir perskaityti kataloge esančių failų inodus (tai yra didžiausias skirtumas tarp katalogo ir „normalus“ failas). Be jo negalite pasiekti jokio failo šiame kataloge ir negalite į jį CD , pvz. jei kataloge / test neturite x leidimo, negalite pasiekti /test/testfile.txt , net jei turite skaitymo leidimus testfile.txt . Iš esmės „x-flag“ yra leidimas skaityti inodus kataloge.

Jei jus domina daugiau informacijos apie leidimų temą, perskaitykite šį profesoriaus Pollocko įvadą į „Unix“ failų ir katalogų teises. į ACL (tai iš esmės yra kinda , kaip tai daro „Windows“, nustatydami kiekvieno vartotojo / grupės kiekvieno aplanko / failo teises, priskirdami vieną vartotoją ir vieną grupę): https: // wpollock. com / AUnix1 / FilePermissions.htm

Jei esate „Linux“ leidimų sistemos mokymosi procese, kol kas susilaikyčiau nuo ACL naudojimo, nebent jums tikrai reikia konkretesnių leidimų.

O ir BTW: rašymo leidimai tame kataloge esantis failas suteikia jums leidimą keisti (įrašyti) tą failą. Jūsų pavyzdyje user2 negalėjo ne įrašyti į „bandomąjį failą user1.txt“, nors ir gali jį ištrinti.

Redaguoti: Aš taip pat norėjau pridėti paaiškinimą apie inodus ir jų sąveiką su katalogais ir kt. bet nusprendžiau, kad šiame įraše tai bus toli. Jei jus domina, yra daugybė puikių šaltinių šia tema, tačiau tai tikrai neturėtų jums per daug rūpėti, jei jums tereikia sukurti „Samba“.

3
ответ дан 3 December 2019 в 18:26

Теги

Похожие вопросы