Чи можу я зробити загальнодоступний каталог під приватним каталогом?


20

У мене на сервері є особиста папка / a / b з дозволом 700. Я не хочу, щоб інші вміщували список вмісту в / a / b. Власник / a - root.

Тепер мені потрібно відкрити всі повноваження каталогу / a / b / c для всіх користувачів.

Я змінив дозвіл / a / b / c на 777, але для інших він все ще недоступний.


2
Вам потрібно встановити "Execute bit", щоб дозволити обхід каталогів (для переходу / a та / a / b), це може вирішити вашу проблему:chmod +x /a/b
ex0ns

Відповіді:


34

Ти можеш. Вам просто потрібно встановити виконавчий біт у /a/bкаталозі. Це не дозволить побачити що-небудь в b, але ви все одно можете зробити все, якщо перейти безпосередньо до a/b/c.

% mkdir -p a/b/c
% chmod 711 a/b
% sudo chown root a/b
% ll a/b
  ls: cannot open directory a/b: Permission denied
% touch a/b/c/this.txt
% ls a/b/c
  this.txt

Будьте уважні, хоча інші не можуть перелічити вміст /a/b, вони можуть отримати доступ до файлів у цьому каталозі, якщо вони вгадають ім'я файлу.

% echo hello | sudo tee a/b/f
% cat a/b/f
hello
% cat a/b/doesntexist
cat: a/b/doesntexist: No such file or directory

Тому не забудьте підтримувати належні дозволи (без групи / світу) для всіх інших файлів / каталогів у bкаталозі, оскільки це дозволить уникнути цього застереження.


Як альтернативу встановленню виконуваного біта, чи можете ви також надати жорстке посилання на a / b / c, яке знаходиться в іншому місці?
Диск Moby

2
@MobyDisk Ви не можете встановити жорстке посилання на каталог.
Майкл Хемптон

Це не вийде, тому що незалежно від того, вам все-таки потрібно прочитати bпосилання наc
stevieb

3
Зауважте, що для цього є деякі важливі застереження. Якщо будь-який із файлів у a/bгрупі / інших дозволах не є нульовим, і супротивник знає чи може здогадуватися їх імена, зазначений противник може взаємодіяти з цими файлами.
Кевін

Правда @Kevin, у perms для всіх підрозділів bповинні бути встановлені хімічні речовини для захисту від цього перед створенням c, і тоді необхідна ретельність, коли інші елементи заповнюються, bщоб гарантувати, що хімічні речовини захищені лише для власника.
stevieb

9

Маючи ці дозволи, ви не можете досягти своєї мети. Для того, щоб потрапити в каталог c, ви повинні дозволити всім іншим користувачам переходити каталог, bщо робиться шляхом надання дозволу на виконання цього каталогу. Якщо /a/bвстановлено режим 711, ви можете домогтися того, що хочете, оскільки ви надаєте обхід каталогів, але заперечуєте читання та запис. Але майте на увазі, що хоча інші користувачі не можуть перелічити файли /a/b, вони можуть мати доступ до файлів, якщо вони здогадуються, що ім'я та файли мають достатньо відкритих дозволів.


3

Якщо користувач не може отримати доступ /a/b, він не може отримати доступ до жодного файлу в розділі /a/b/c. Дозволи на не /a/b/cмають значення, оскільки обхід каталогів зупиняється на /a/b.

Якщо все, що ви хочете, - це не допустити, щоб каталог /a/bне був перелічений, але ви добре, якщо користувачі отримують доступ до файлів, /a/bякщо вони здогадуються ім'я файлу, то ви можете зробити /a/bвиконуваним, але не читабельним. У каталозі дозвіл на читання контролює лише перелік вмісту каталогу, тоді як дозвіл на виконання контролює доступ до записів цього каталогу.

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# echo 'hello' >/a/b/existingfile
# su bob -c 'ls -l /a/b'
ls: /a/b: Permission denied
# su bob -c 'cat /a/b/nosuchfile'
cat: /a/b/nosuchfile: No such file or directory
# su bob -c 'cat /a/b/existingfile'
hello
# su bob -c 'ls -l /a/b/c'
 contents of /a/b/

Якщо ви не хочете, щоб інші користувачі мали доступ до файлів за /a/bвинятком випадків /a/b/c, ви можете експонувати їх /a/b/cчерез інший вигляд, через кріплення прив’язки .

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# mkdir /c
# mount --bind /a/b/c /c
# su bob -c 'ls /a/b/c'
ls: /a/b/c: Permission denied
# su bob -c 'ls -l /c'
 contents of /a/b/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.