Могу ли я сделать публичный каталог в частном каталоге?

20

У меня есть личная папка / a / b на сервере с разрешением 700. Я не хочу, чтобы другие перечисляли содержимое в / a / b. Владелец / a является пользователем root.

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

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

подветренный
источник
2
Вам нужно установить «бит выполнения», чтобы разрешить обход каталога (для обхода / 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каталоге, так как это позволит избежать этого предостережения.

stevieb
источник
В качестве альтернативы установке исполняемого бита, не могли бы вы предоставить жесткую ссылку на / b / c, который находится в другом месте?
Moby Disk
2
@MobyDisk Вы не можете жестко ссылаться на каталог.
Майкл Хэмптон
Это не сработает, потому что несмотря ни на что, вам все равно нужно прочитать bссылку наc
stevieb
3
Обратите внимание, что здесь есть несколько важных предостережений. Если какой-либо из файлов a/bимеет ненулевые групповые / другие разрешения, и злоумышленник знает или может угадать их имена, указанный злоумышленник может взаимодействовать с этими файлами.
Кевин
На самом деле @Kevin, для всех разрешений необходимо настроить разрешения 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через другое представление, через bind mount .

# 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/
Жиль "ТАК - перестать быть злым
источник