Unix: Як я можу дозволити лише одній людині бачити мою папку в одній і тій же файлі?


9

Я хочу надати доступ до режисера для друга. Він має доступ до файлової системи, де знаходиться dir. Я не хочу встановлювати дозволи для всіх користувачів. Як я можу дозволити бачити лише режисера людину? Ніхто з нас не є суперрусером.

[BOUNTY CHALLENGE] Жодна відповідь не працює, використовуючи Ubuntu:

1. Підхід джамураї не працює

$ setfacl -m user:friend:rwx classroom.xml 
setfacl: classroom.xml: Operation not supported

2. Підхід nik не працює: не вдається отримати доступ до неіснуючого файлу

3. Ба підхід не працює: я не можу створювати групи, а не корінь.

4. Підхід ТЗ не працює, користувачі розділені на дві групи: "користувачі" та "поле"

chown -R myFriend:users ~/TEST
chown: changing ownership of `/u/myFriend/TEST/you_see_it': Operation not permitted
chown: changing ownership of `/u/myFriend/TEST': Operation not permitted

1
Було б корисно, якби ви дали однолінійку про те, як ці відповіді представляють для вас проблему - ви дасте краще визначення проблеми для формування інших варіантів.
nik

nik: Додано профілі помилок.

Відповіді:


12

З нормальними дозволами UNIX (користувач, група, усі) це зробити не виходить легко. Якщо вам більше не потрібен доступ до каталогу, ви, можливо, можете змінити власника каталогу на свого друга, що є дійсним у деяких Unices, але в більшості з них це не так.

Однак якщо у вас увімкнено ACL в Linux, ви можете це зробити, якщо ви є власником файлу. Просто запустіть команду, setfacl -m user:friend:rwx filenameде друг - це ім'я облікового запису вашого друга, а ім'я файлу - файл. Ви можете перевірити, що він набрав чинності, запустивши getfacl filename, ви побачите тріаду user:friend:rwxв списку. Я не бачив занадто багато систем Linux, у яких увімкнено ACL.


ACL - це стандартне рішення цієї проблеми, якщо припустити, що ваша файлова система увімкнула їх.
Райан К. Томпсон,

Начебто HHH каже, що це не спрацює. Я думаю, що це було б, якщо тільки з якоїсь дивної причини ACL не ввімкнено. HHH, що дає?
pboin

pboin: цей метод працює не так, мабуть, причина може полягати в тому, що ACL не ввімкнено або s / інше, не впевнений.

11

Це те, про що ми говорили ще в школі.
Виходить приблизно так,

  1. Створіть каталог (названий dataтут для довідок)
    • змінити дозволи як " chmod 711 data"
    • група та інші мають лише xдоступ - для входу в каталог
    • вони не можуть перелічити каталог
    • Тепер створіть каталог difficult-name-here(це може бути хеш-рядок)
    • змінити дозволи як " chmod a+rx difficult-name-here"
    • вміст цього каталогу захищено, тоді як зовнішній каталог не може бути перерахований
    • люди, які знають "важке ім'я", можуть перейти в цей другий каталог
      • " cd path/to/data/difficult-name-here"
      • інші не можуть бачити ім'я та не мають доступу до вмісту каталогів
      • Однак rootзавжди можна отримати доступ до всього (що тут не проблема)
    • поділіться difficult-name-hereз людьми, яким ви хочете надати ці дані
    • Зберігайте спільні файли у цьому другому каталозі

Досить грубо, але якщо це можна зламати без злому контролю доступу Unix, я хотів би знати.


Оновлення на коментар від dmckee,
Це саме висновок, якого ми дійшли!
"безпека через неясність" має обмежену безпеку .

Сказавши, що при проектуванні захисту даних
важливо визначити його значення.

Ви повинні орієнтуватися на,

  • Витрати на захист, що перевищує,
  • Вартість захищеного вмісту,
  • За коефіцієнтом, пропорційним вашій параної

У цьому випадку, якщо rootвирішить перерахувати дерево каталогів десь у загальнодоступному доступі,
ваш секрет вийшов! Але ви захищаєте від кореня чи їх потенційної безвідповідальності?
Якщо це так, у вас є набагато більше турбуватися про спільні файли.


Оновлення щодо непрацюючої примітки у питанні .
Я використовував це в перші дні Linux, щоб знати, що він працює.
Якщо ви отримаєте " cannot access non-existant file" замість 'permissions denied", ви, ймовірно, помилилися в послідовності. Те, що ви хочете, має виглядати так,

 755 711 755 все, що завгодно - === Дозволи доступу

 BasePath / CoverDir / Obscure / protectedFile.txt
          | | ^^^^^^^^^^^^^^^^^ Не можна побачити без
          | ^^^^^^^ Ім'я каталогу читати доступ до
          ^^^^^ Публіка поділилася з другом. Неясний каталог.
                доступні 
                каталог.
  1. Якщо ви встановите " CoverDir" доступ як 'rwx--x--x",
    група та інші можуть входити лише до каталогу, але не можуть читати його вміст.
  2. Тепер, якщо ви використовуєте неясне ім’я каталогу,
    " Obscure", всередині нього і надаєте повний доступ для читання за допомогою " rwxr-xr-x",
    кожен , хто знає це ім'я, може перерахувати його вміст.
  3. Цей доступ доведеться здійснювати ззовні із написом " ls BasePath/CoverDir/Obscure"
    Тому що люди у вашій групі та інші люди не зможуть ls BasePath/CoverDir".

7
"якщо це може бути порушено [...], хотілося б знати" Ну, це дуже приклад безпеки через невідомість, і, таким чином, неміцний. Не розраховуйте на це довгостроково. Хоча акуратно.
dmckee --- кошеня колишнього модератора

Якщо ваш контроль доступу Unix надійно реалізований, це майже так само безпечно, як база даних з тіньовими паролями (або sshприватний ключ).
nik

5

Райан насправді був на 100% правильний, просто відсталий. Оскільки у вашого друга (швидше за все) є унікальна група, пов’язана з його / її ім'ям користувача, змінити власність групи на відповідний каталог на цю групу, швидше за все, ім'я користувача друга. Щоб мати можливість ділитися вмістом між вами, ви повинні зберегти право власності як користувач:

chown -R youruser:friendgroup ~/foo/bar

Потім призначте відповідні дозволи до каталогу, залежно від того, який доступ ви бажаєте мати для іншого користувача:

chmod -R 770 ~/foo/bar

надасть вам обом повний доступ rwx до каталогу та всього його вмісту.

Зверніть увагу, що це передбачає, що до групи вашого друга не додано жодного іншого користувача. Система, швидше за все, не зробила б це завдання, однак, як було сказано раніше, користувач root може робити те, що обирає. Ви можете скористатися командою групи, щоб побачити кожну групу, до якої належить ваш друг або довільний користувач. Крім того, якщо дозволи з певних причин не були змінені, вам слід мати можливість переглядати файл / etc / group, який містить групові призначення для кожної групи в системі.


4

Я б створив нову групу для вас і вашого друга і встановив би права доступу до папки повною для власника та групи разом із встановленим жорстким бітом для каталогу.

Але залежно від ваших потреб вам, можливо, доведеться також розглянути можливість змінити вас та ваших друзів umask, щоб він автоматично встановлював групу, щоб мати змогу змінювати нові файли.

# groupadd bestfriends
# chmod 2770 dir
# chgrp bestfriends dir
# usermod -G bestfriends FRIENDLOGIN

3
Це може зажадати привилегій суперпользователя, яких у нього немає.
Кек

1
О, я цілком пропустив цей рядок: x Тоді я в збитку. Здогадуюсь, я б просто пішов з надсиланням по електронній пошті - не найкраще рішення, але принаймні файл потрапляє до іншого хлопця.
gaqzi

2

Списки контролю доступу - це ідеальний спосіб зробити це.

Однак (якщо я правильно пам’ятаю) файлову систему потрібно ініціалізувати ACL (наприклад, «/ dev / sda6 / home ext3, за замовчуванням, acl »), через / etc / fstab, і це те, що може зробити лише суперпользователь. ..


2

Потрібні RBACS, такі як grsec / selinux.


не впевнений, чи це проблема, чи можете ви додати трохи цитування?

2

За замовчуванням у кожного користувача системи Ubuntu також є асоційована група з тим же ім’ям. Тож якщо ви можете додати свого друга до своєї групи, а потім позначити відповідну папку як g+rwx, ви будете налаштовані. Я туманно пам'ятаю, що цей випадок використання названий причиною створення групи для кожного користувача.


Додавання користувачів до груп вимагає кореневого доступу, що, за словами ОП, у нього немає.
Дейв Шерохман


2

не пробували цього, але як щодо загальнодоступного читаного каталогу із зашифрованим FS простору користувача (наприклад, encfs). Тоді ви можете поділитися цим паролем зі своїм другом, і ніхто більше не може скористатися цими даними (ну, мабуть, вони могли отримати ці дані та запустити зловмисник паролів в автономному режимі?).


2

Щоб надати Linux таку саму вишуканість, як Windows у файлових привілеях, ви повинні вкладати групи. Створіть одну групу, яка має доступ до вашої папки, як ви хотіли б, щоб ваш друг. Додайте його до тієї групи або групи, в якій він проживає. Наприклад

/ foo - папка, якою ви хочете поділитися. Створіть груповий FooGroup, який має бажаний доступ до папки. Додайте до цієї групи групи та користувачів, яким ви хочете отримати доступ до цієї папки.

Є велика біль створити групу для кожної папки чи файлу, але це найкращий спосіб обмежити доступ на тому ж рівні, що і Windows.


1

Ви можете зашифрувати каталог gpg. А потім спробуйте приховати місце розташування на зразок того, як запропонував nik.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.