Назад |
Перейти на главную страницу
Разрешения для файлов / папок и привилегии пользователей / групп в среде chroot (простой сценарий - большая головная боль)
Я знаю, что инструкции по разрешениям и привилегиям можно найти в любом месте в Google, и поверьте мне, я сделал это и внимательно прочитал каждую бит информации, которую смог найти по этому вопросу. Либо я недостаточно умен, чтобы решить проблему (вполне может иметь место здесь) или нет способа добиться того, что я хочу делать в контексте, который я устанавливаю.
В любом случае мы будем благодарны за любые отзывы.
Сценарий
Пользователи и группы
- user1: group1 - здесь user1 по умолчанию принадлежит к своей группе group1 (например, john: john)
- user2: group2 - здесь user2 по умолчанию принадлежит к своей группе group2 (то есть - jane: jane)
- group3 - здесь group3 полностью независима (то есть sftp)
- user1 и user2 - также принадлежат к group3
Файлы и папки
- Я создал тюрьму sftp для обоих пользователей (chroot sftp с использованием ssh со строфами, соответствующими group1 для user1 и group2 для user2) в / path / to / chroot
- Я создал 2 папки в / path / to / chroot - "private" и "public"
- Я создал 2 папки в / path / to / chroot / public - «загрузки» и «загрузки».
Чего я хочу достичь
"личная" папка
- user1 должен
- иметь полный доступ (чтение / запись / выполнение) к «частной» папке, подпапкам и файлам.
- не разрешено удалять саму "личную" папку, но разрешено делать что-либо внутри нее
- user2 должен
- не иметь доступа к этой папке / подпапкам и файлам
"общедоступная" папка
- user1 должен
- не разрешено удалять "общедоступную" папку, но разрешено просматривать ее.
- не разрешено писать в "общедоступную" папку
- user2 должен
- не разрешено удалять «общую» папку, но разрешено просматривать ее.
- не разрешено писать в "общедоступную" папку
папка "public / downloads"
- user1 должен
- иметь полный доступ (чтение / запись / выполнение) к папке «public / downloads», подпапкам и файлам.
- не разрешено удалять саму папку "public / downloads", но разрешено делать что-либо внутри нее
- user2 должен
- иметь доступ только для чтения к файлам и папкам внутри "public / downloads"
- не разрешено удалять папку "public / downloads"
папка "public / uploads"
- user1 должен
- иметь полный доступ (чтение / запись / выполнение) к папке «public / downloads», подпапкам и файлам.
- не разрешено удалять саму папку "public / uploads", но разрешено делать что-либо внутри нее
- user2 должен
- разрешено добавлять новые файлы / папки в "общедоступные / загрузки"
- ему разрешено удалять / редактировать файлы, которые он загрузил в "public / downloads"
- не иметь права читать / скачивать / исполнять файлы, которые ему не принадлежат в "public / downloads"
- не иметь права редактировать / удалять файлы, которые ему не принадлежат, в "public / downloads"
- не разрешено удалять папку "public / downloads"
Что я уже сделал
- chroot (/ путь / к / chroot)
- частный (пользователь1: группа1 0770)
- резервные копии
- личный
- Другой
- общественный (root: group3) chmod g + rx <- и -> setfacl -m "default: group :: rx"
- загрузки (usesr1: group3) chmod g + s && chmod g + rx <- и -> setfacl -m "default: group :: rx"
- загружает (корень: group3) chmod g + s && chmod g + rwx <- и -> setfacl -m "default: group :: rwx"
Это дает следующие результаты
- "Личная" папка принадлежит пользователю user1, и только он и группа group1 имеют к ней доступ
- «Общая» папка принадлежит пользователю root и доступна только для чтения группе group3.
- Это означает, что только root может создавать / изменять / удалять файлы / папки внутри этой папки, но члены group3 могут получить к ним доступ / прочитать / загрузить.
- Папка также имеет acl по умолчанию, установленный на «rx» для группы, что означает, что все файлы / папки, созданные внутри этой папки, по умолчанию наследуют разрешение только на чтение для group3.
- Папка «public / downloads» принадлежит пользователю user1 и доступна только для чтения группе group3.
- Это означает, что только user1 может создавать / удалять / изменять новые файлы / папки в этой папке, но члены group3 могут получать к ним доступ / читать / загружать.
- Папка также имеет acl по умолчанию, установленный на «rx» для группы, что означает, что все файлы / папки, созданные внутри этой папки, по умолчанию наследуют разрешение только на чтение для group3.
- В папке также включен "g + s", что означает, что все файлы / папки, созданные пользователем user1, автоматически наследуют идентификатор группы group3.
Где у меня проблемы с выяснением
- user1 все еще может удалить "личную" папку (ПРОБЛЕМА).
- Я пробовал использовать chattr + i в «частной» папке, но это не дало желаемого эффекта, поскольку кажется, что файлы / папки, созданные внутри «частной» папки, наследуют это свойство.
- В настоящее время я работаю внутри Linux-Vserver и не могу общаться с папкой внутри vserver, поэтому мне пришлось сделать это через хост (это еще одна проблема, но может иметь значение).
- В настоящее время папка «public / uploads» принадлежит пользователю root и доступна для чтения-записи группе group3.
- Это означает, что user1 и user2 могут получать доступ / читать / загружать / создавать / удалять / изменять новые файлы / папки внутри папки, но не могут их удалить. (ХОРОШО)
- Папка также имеет acl по умолчанию, установленный на «rwx» для группы, что означает, что все файлы / папки, созданные в этой папке, по умолчанию унаследуют разрешение на чтение и запись для group3.
- В папке также включен "g + s", что означает, что все файлы / папки, созданные пользователем user1, автоматически наследуют идентификатор группы group3.
- Это означает, что user2 все еще может загружать / редактировать / удалять все файлы / папки, хранящиеся в "public / uploads" (ПРОБЛЕМА)
- Я попробовал + t (липкий бит) для "public / uploads", но это не дало желаемого эффекта, так как user1 больше не мог удалять файлы внутри.
Я застрял!
- Смена владельца "public / uploads" на user1
- user1 должен иметь доступ ко всему внутри (ХОРОШО)
- НО теперь можно удалить папку (ПРОБЛЕМА)
- Другие возможные моды
- установка группы acl по умолчанию на rwx (все новые файлы / папки будут rwx для group3)
- установка g + s (все новые файлы наследуют идентификатор группы group3)
- установка + t (еще не проверено, но, надеюсь, будет применяться только к группе, а не к владельцу)
- user2 должно быть разрешено создавать / изменять / удалять свои собственные файлы, но не файлы других людей (ХОРОШО)
- НО ему также будет разрешено скачивать / просматривать файлы, владельцем которых он не является (ПРОБЛЕМА).
Когда я начал работать над этим, это звучало довольно тривиально, но, похоже, на данный момент я достиг своих пределов. Если у кого-то есть идея или указатель, дайте мне знать.
Заранее большое спасибо, JS
Вот структура каталогов, которая должна делать то, что вы хотите.
# file: .
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: public
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: public/uploads
# owner: user1
# group: group1
user::rwx
group::r-x
group:group3:rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:group1:rwx
default:group:group3:---
default:mask::rwx
default:other::---
# file: public/downloads
# owner: user1
# group: group1
user::rwx
group::r-x
group:group3:r-x
mask::r-x
other::---
default:user::rwx
default:group::r-x
default:group:group3:r-x
default:mask::r-x
default:other::r-x
# file: private
# owner: user1
# group: group1
user::rwx
group::rwx
other::---
Важные различия: Базовый и общедоступный каталог принадлежат пользователю root. Таким образом, пользователь user1 не может удалить private и public / *. public / uploads имеет значение по умолчанию: group: group1: rwx и default: group: group3: ---. Таким образом, пользователь1 может делать все, но пользователь2 не может ничего делать с новыми файлами в этом каталоге, кроме своих собственных файлов.