Назад | Перейти на главную страницу

Разрешения для файлов / папок и привилегии пользователей / групп в среде chroot (простой сценарий - большая головная боль)

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

В любом случае мы будем благодарны за любые отзывы.

Сценарий

Пользователи и группы

Файлы и папки

Чего я хочу достичь

"личная" папка

  1. user1 должен
    • иметь полный доступ (чтение / запись / выполнение) к «частной» папке, подпапкам и файлам.
    • не разрешено удалять саму "личную" папку, но разрешено делать что-либо внутри нее
  2. user2 должен
    • не иметь доступа к этой папке / подпапкам и файлам

"общедоступная" папка

  1. user1 должен
    • не разрешено удалять "общедоступную" папку, но разрешено просматривать ее.
    • не разрешено писать в "общедоступную" папку
  2. user2 должен
    • не разрешено удалять «общую» папку, но разрешено просматривать ее.
    • не разрешено писать в "общедоступную" папку

папка "public / downloads"

  1. user1 должен
    • иметь полный доступ (чтение / запись / выполнение) к папке «public / downloads», подпапкам и файлам.
    • не разрешено удалять саму папку "public / downloads", но разрешено делать что-либо внутри нее
  2. user2 должен
    • иметь доступ только для чтения к файлам и папкам внутри "public / downloads"
    • не разрешено удалять папку "public / downloads"

папка "public / uploads"

  1. user1 должен
    • иметь полный доступ (чтение / запись / выполнение) к папке «public / downloads», подпапкам и файлам.
    • не разрешено удалять саму папку "public / uploads", но разрешено делать что-либо внутри нее
  2. 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"

Это дает следующие результаты

  1. "Личная" папка принадлежит пользователю user1, и только он и группа group1 имеют к ней доступ
  2. «Общая» папка принадлежит пользователю root и доступна только для чтения группе group3.
    • Это означает, что только root может создавать / изменять / удалять файлы / папки внутри этой папки, но члены group3 могут получить к ним доступ / прочитать / загрузить.
    • Папка также имеет acl по умолчанию, установленный на «rx» для группы, что означает, что все файлы / папки, созданные внутри этой папки, по умолчанию наследуют разрешение только на чтение для group3.
  3. Папка «public / downloads» принадлежит пользователю user1 и доступна только для чтения группе group3.
    • Это означает, что только user1 может создавать / удалять / изменять новые файлы / папки в этой папке, но члены group3 могут получать к ним доступ / читать / загружать.
    • Папка также имеет acl по умолчанию, установленный на «rx» для группы, что означает, что все файлы / папки, созданные внутри этой папки, по умолчанию наследуют разрешение только на чтение для group3.
    • В папке также включен "g + s", что означает, что все файлы / папки, созданные пользователем user1, автоматически наследуют идентификатор группы group3.

Где у меня проблемы с выяснением

  1. user1 все еще может удалить "личную" папку (ПРОБЛЕМА).
    • Я пробовал использовать chattr + i в «частной» папке, но это не дало желаемого эффекта, поскольку кажется, что файлы / папки, созданные внутри «частной» папки, наследуют это свойство.
    • В настоящее время я работаю внутри Linux-Vserver и не могу общаться с папкой внутри vserver, поэтому мне пришлось сделать это через хост (это еще одна проблема, но может иметь значение).
  2. В настоящее время папка «public / uploads» принадлежит пользователю root и доступна для чтения-записи группе group3.
    • Это означает, что user1 и user2 могут получать доступ / читать / загружать / создавать / удалять / изменять новые файлы / папки внутри папки, но не могут их удалить. (ХОРОШО)
    • Папка также имеет acl по умолчанию, установленный на «rwx» для группы, что означает, что все файлы / папки, созданные в этой папке, по умолчанию унаследуют разрешение на чтение и запись для group3.
    • В папке также включен "g + s", что означает, что все файлы / папки, созданные пользователем user1, автоматически наследуют идентификатор группы group3.
  3. Это означает, что user2 все еще может загружать / редактировать / удалять все файлы / папки, хранящиеся в "public / uploads" (ПРОБЛЕМА)
    • Я попробовал + t (липкий бит) для "public / uploads", но это не дало желаемого эффекта, так как user1 больше не мог удалять файлы внутри.

Я застрял!

  1. Смена владельца "public / uploads" на user1
    • user1 должен иметь доступ ко всему внутри (ХОРОШО)
    • НО теперь можно удалить папку (ПРОБЛЕМА)
  2. Другие возможные моды
    • установка группы 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 не может ничего делать с новыми файлами в этом каталоге, кроме своих собственных файлов.