Вопрос или проблема
Я борюсь с установкой правильных разрешений для файлов
Я хотел бы, чтобы user1 и user2 имели доступ к своим директориям, плюс общий доступ, а модератор должен иметь доступ ко всем этим директориям. Я установил разрешения для приватных директорий (chmod 700 для директории модератора, user1 и user2) user1, user2 и модератор находятся в одной группе: shared
Я думал, что будет хорошей идеей установить полные групповые разрешения для общей директории, изменить основную группу на root и добавить пользователя модератора в нее, но, похоже, это не сработало
Можно ли установить эти разрешения простым способом?
Одно из предложений может быть следующим:
- Создать непривилегированную группу для использования в качестве основной группы для всех учетных записей пользователей:
# groupadd users
- Ассоциировать user1, user2 и модератора с этой группой. Возможно, вам придется напрямую отредактировать файл паролей:
# usermod -g users user1
# usermod -g users user2 ...
- Изменить группу всех директорий в примере, чтобы они были ‘в собственности’ этой группы:
# chgrp -R users * # Текущая рабочая директория должна быть основной директорией для всех
# директорий в вашем примере
- Установить биты ‘ограниченного удаления’ и ‘setgid’ для ‘shared’ директории и разрешить пользователю и группе доступ на чтение, запись и выполнение:
# chmod 3775 shared
Все вышеперечисленное даст всем пользователям, входящим в группу ‘users’, возможность создавать файлы в общей директории, не имея возможности удалять файлы, которые они не создали. Альтернативным вариантом будет использование вторичной группы, и пользователи будут менять свою групповую сессию, когда захотят записывать в ‘shared’ директорию. Надеюсь, это поможет, результаты могут отличаться, стандартные отказы применяются 🙂
Включая комментарии к вопросу, ваша текущая ситуация, похоже, выглядит так:
drwx------ 2 moderator moderator ... moderator # изменений не требуется
drwxrwx--- 2 root shared ... shared # требуется разрешение setgid
drwx------ 2 user1 user1 ... user1 # изменений не требуется
drwx------ 2 user2 user2 ... user2 # изменений не требуется
Таким образом, принимая во внимание, что ваша стандартная umask
для пользователей установлена на 007 или 002, чтобы разрешить полный доступ к группе, вам нужно только установить бит setgid для директории shared
. Это приведет к тому, что все новые файлы, созданные в этой директории, автоматически будут назначены группе, владеющей директорием.
Вы можете сделать это двумя способами:
chmod g+s shared
или
chmod 2770 shared # 2770 = разрешения drwxrws---
Однако, если стандартная umask
ваших пользователей равна 022 или 077 (не разрешая запись для группы), вам может также понадобиться добавить стандартный ACL в директорию:
setfacl -m d:g:shared:rwX shared
После этого разрешения директории shared
будут отображаться как drwxrws---+
, знак плюс указывая на наличие списка контроля доступа. Вы можете просмотреть его с помощью getfacl shared
; ACL будет автоматически унаследована любыми создаваемыми поддиректориями и обеспечит, что группе shared
будет предоставлен полный доступ к любым новым файлам или директориям внутри.
Ответ или решение
Для настройки общих прав доступа к директориям в Linux, вам нужно будет учитывать несколько аспектов, чтобы гарантировать, что пользователи могут работать с директориями, не затрагивая приватные данные других пользователей. Ваша цель состоит в том, чтобы пользователи user1
, user2
имели доступ к своим собственным директориям и к общей директории, а модератор мог получать доступ ко всем этим директориям.
-
Создание группы пользователей:
Создайте группу, которая будет использоваться для совместного доступа:sudo groupadd shared
-
Назначение пользователей в группу:
Добавьте пользователейuser1
,user2
иmoderator
в группуshared
:sudo usermod -aG shared user1 sudo usermod -aG shared user2 sudo usermod -aG shared moderator
-
Изменение владельца директории:
Убедитесь, что директорияshared
принадлежит группеshared
:sudo chgrp shared /путь/к/директории/shared
-
Настройка прав доступа для общей директории:
Установите права доступа для директорииshared
с помощью команды:sudo chmod 2770 /путь/к/директории/shared
Здесь "2" устанавливает бит
setgid
, который обеспечивает наследование группы для новых файлов и поддиректорий, созданных в этой директории. -
Настройка прав доступа к приватным директориям:
Для приватных директорийuser1
иuser2
, права доступа могут оставаться следующими:chmod 700 /путь/к/директории/user1 chmod 700 /путь/к/директории/user2
А для директории
moderator
:chmod 700 /путь/к/директории/moderator
-
(Опционально) Использование ACL для более тонкой настройки прав доступа:
Если вашу систему настройки умаски (umask) необходимо изменить, вы можете рассмотреть возможность использования списков управления доступом (ACL). Например, чтобы дополнительно предоставить группеshared
права на запись и выполнение в директории, можно использовать:sudo setfacl -m d:g:shared:rwX /путь/к/директории/shared
Эти шаги обеспечат, что:
user1
иuser2
будут иметь полный доступ только к своим директориям и правом на чтение/запись в общей директории.moderator
будет иметь доступ ко всем директориям.- Все новые файлы и поддиректории, созданные в директории
shared
, будут иметь по умолчанию права для группыshared
.
Для проверки итоговых прав доступа используйте команду ls -l
для просмотра прав доступа к директориям. Убедитесь, что директория shared
отображается как drwxrws---
, что показывает, что бит setgid
установлен, а также что у группы есть права на запись, чтение и выполнение.