Как работают разрешения вложенных папок?

Как работают разрешения вложенных папок?

1) Я не совсем понимаю, как работают разрешения для вложенных каталогов.

Предположим, у меня есть следующие каталоги/файлы и разрешения:

~/Private/ 700
~/Private/Group 770
~/Private/Group/Public 777

Действительно ли Public является публичным?

2) Если я хочу сделать Private действительно приватным, имеет ли значение, использую ли я -R при выполнении «chmod 700»?

3) Я читал, что Ubuntu по умолчанию использует домашнюю папку, доступную для чтения, и отказывается это исправлять. Но когда я делаю 'ls -lh', я получаю это: drwx------ (700, верно?). Так что же это? Они изменили свое мнение о домашней папке?

Примечание: Я использую виртуальную машину Ubuntu 12.

решение1

~/Private/ 700
~/Private/Group 770
~/Private/Group/Public 777

Пользователь, который не является владельцем ~/Private/, ~/Private/Groupне сможет войти в общую папку с этими разрешениями.

В Unix/Linux необходимо добавить бит выполнения, чтобы пользователь мог перемещаться (переходить в или через) по каталогу. Но вам не нужно предоставлять доступ на чтение. Поэтому попробуйте это вместо этого. Но имейте в виду, что пользователь должен знать, что существуют каталоги Group и Public, у него не будет возможности проверить, lsсуществуют ли они, если ему также не предоставлен доступ на чтение.

~/Private/ 711
~/Private/Group 771
~/Private/Group/Public 777

имеет ли значение, использую ли я -R при выполнении 'chmod 700'?

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

Вместо этого вы можете использовать команду вроде этой. Это изменит только разрешения для каталога и подкаталогов, не меняя разрешения для файлов.

find {directory_path} -type d -print0 | xargs --null -n 1 chmod 0700

Аналогичная команда для изменения только файлов будет выглядеть так.

find {directory_path} -type f -print0 | xargs --null -n 1 chmod 0600

Связанный контент