Вопрос или проблема
Я хочу удалить определенные группы в своей системе Debian GNU/Linux, но некоторые из них являются главными группами.
Например, если я хочу удалить группу news
с помощью /sbin/groupdel news
Я получаю сообщение Главная группа пользователя "news" не может быть удалена
.
-
Как я могу все-таки удалить ее с помощью командной строки?
-
Если я вручную удалю конкретные группы в файлах:
/etc/group
/etc/gshadow
/etc/passwd
/etc/security/group.conf
Есть ли что-то еще, что мне нужно учесть или удалить в другом месте?
-
Будут ли группы также удалены/деактивированы, если я просто закомментирую строки в этих файлах?
-
Какой лучший способ удалить основные группы, которые действительно не нужны?
Другой взгляд на это…
Вы не можете удалить группы вообще. Группа — это просто число, и вы не можете удалить число и сделать его недоступным. Она все равно существует.
То, что вы находите в /etc/group, не является группой, а ярлыком для группы. Так что, если вы удалите ярлык, но группа все еще используется, у вас возникнут две проблемы:
- Группа будет без ярлыка, и когда она будет использоваться, будет отображаться просто как число с загадочным значением.
- Поскольку ярлык удален, система не будет знать, что номер группы используется, и может попытаться повторно использовать номер для другого группового ярлыка, что может вызвать проблемы с безопасностью, когда одна группа используется для двух целей.
- В дополнение к вышеупомянутым двум проблемам, если группа используется системной службой и вы удалите ярлык, использование удаленного ярлыка группы в конфигурационных файлах сервиса может сделать конфигурационные файлы недействительными и привести к сбою службы.
Лучший способ удалить группу (ярлык), который является главной группой для пользователя, — удалить пользователя.
Для сервисных аккаунтов, таких как “news”, не рекомендуется удалять пользователя, если вы также не удаляете программное обеспечение, использующее этот сервисный аккаунт.
На дистрибутиве Linux, который использует менеджер пакетов, пользователь (и соответствующая группа) могут быть автоматически удалены, если вы используете менеджер пакетов для удаления программного обеспечения. К сожалению, пользователи и группы не управляются так же строго, как программные пакеты, поэтому нет простого способа отследить, какое программное обеспечение использует конкретный сервисный аккаунт. К счастью, они обычно называются таким образом, что легко угадать это. Если этого не удастся, вы можете найти ссылки на сервисный аккаунт либо в праве собственности на конфигурационные файлы, либо в упоминаниях группы и пользователя в конфигурационных файлах сервиса и systemd, поэтому, если вы не можете угадать, может потребоваться немного покопаться.
Вы не можете точно деактивировать пользователя. Вы можете сделать их пароль недействительным, чтобы они не могли войти в систему, своего рода. Вы можете изменить их оболочку на что-то недействительное, чтобы они не могли войти через другие методы. (Это может уже быть в случае с сервисным аккаунтом!) Но вы обычно не входите в группу, так что для групп вы даже не можете сделать это. Ни файл паролей, ни файл групп не поддерживают комментирование групп. Так что, например, если вы попробуете закомментировать группу news с помощью #
, то вы теперь имеете группу, неправильно помеченную как #news
. Поскольку комментарии не являются задокументированным поведением для этих файлов, даже если некоторые инструменты поддерживают это, другие инструменты не будут. Как упоминалось в других ответах, единственный способ деактивировать группу — это прекратить ее использование, удалив все упоминания о ней в конфигурационных файлах, праве собственности на файлы, активных процессах и, возможно, жестко закодированные использования в исполняемых программных файлах (и, вероятно, какой-то способ использования, который я забыл).
Краткий ответ: вы не можете удалить основную группу.
Немного более длинный ответ: теоретически это возможно, но любой, кто знает достаточно о Unix, чтобы знать, как это сделать, также знает достаточно, чтобы не хотеть это делать. Это одна из тех вещей “Если вы не знаете, для чего это нужно, не удаляйте это”.
Значительно более длинный ответ: стандарты Unix указывают, что каждый пользователь имеет идентификатор пользователя и идентификатор группы. Этот идентификатор группы — это идентификатор “главной группы” этого пользователя; если вы знакомы с базами данных, это внешний ключ, указывающий на эту группу.
Пока хотя бы один пользователь имеет данную группу как свою главную группу, groupdel
не позволит вам удалить эту группу, потому что это приведет к несогласованности файлов passwd и group и риску непредсказуемого поведения (например, если вы позже создадите новую группу с тем, что оказывается идентификатором этой главной группы, “сиротский” пользователь внезапно окажется частью этой группы, независимо от того, намеревались вы это сделать или нет).
Если вы действительно хотите, чтобы группа news
исчезла, вам сначала нужно будет удалить пользователя news
, но я согласен с Panki: реальных причин для удаления ее, кроме неуместного стремления к порядку, нет, и риск случайного разрушения чего-то, что предполагает существование группы, хоть и мал, но не равен нулю — и если что-то сломается таким образом, вы потратите недели или месяцы frustrations, прежде чем поймете, что пошло не так.
Дополнение: Не пытайтесь, при никаких кроме самых крайних обстоятельствах, пытаться #2, если вы не хотите увидеть, как выглядит необратимо испорченная система, и насладиться тем, что вам придется переустановить вашу систему с нуля.
Краткий ответ: вы не можете.
Длинный ответ: вы можете, но сначала должны прекратить ее использование. Это не только данные в /etc
, это значит и права собственности на файлы по всему вашим файловым системам. Если она используется в /dev
, могут возникнуть серьезные проблемы. Это также может означать возможные будущие установки, в зависимости от вашего дистрибутива. (И некоторые дистрибутивы могут восстановить то, что они стандартно устанавливают, при обновлении.)
Что касается комментариев: не стоит рассчитывать на синтаксис комментариев. (Версия 7 не документирует синтаксис комментариев.) Вы просто можете изменить имя. (Хотя я признаю, что “#” комментарии, по-видимому, действительно работают для меня, даже с busybox!)
Ответ или решение
Удаление или деактивация основных групп в Debian GNU/Linux может быть сложной задачей, особенно если вы не знакомы с механикой работы групп и пользователей в системе. Давайте разберем по пунктам, как можно подойти к решению вашей проблемы.
1. Как удалить основную группу?
Как вы уже заметили, если группа является основной для пользователя, то команда groupdel
не позволит вам её удалить. Это связано с тем, что каждая учетная запись пользователя должна иметь основную группу, и удаление группы, к которой привязан пользователь, может привести к неконсистентности в файлах /etc/passwd
и /etc/group
.
Чтобы удалить группу, вам необходимо сначала удалить или изменить пользователя, которому эта группа принадлежит. Например, если у вас есть пользователь с именем news
, который является членом группы news
, вы можете выполнить следующие шаги:
# Удаление пользователя
sudo userdel news
# Теперь можно удалить группу
sudo groupdel news
Если вы не хотите удалять пользователя, вы можете изменить его основную группу на какую-либо другую.
2. Ручное редактирование файлов
Если вы решите вручную редактировать файлы /etc/group
, /etc/gshadow
, /etc/passwd
и другие, это следует делать с осторожностью:
- /etc/group: удаляйте строку, соответствующую группе, которую вы хотите удалить.
- /etc/gshadow: также удалите соответствующую строку.
- /etc/passwd: если у вас есть учетные записи, связанные с удаляемой группой, измените их на другую группу, либо удалите пользователей.
- /etc/security/group.conf: проверьте наличие любых ссылок на удаляемую группу и удалите или измените их.
3. Комментирование строк в этих файлах
Комментирование строк в этих файлах — не лучший способ. Хотя в некоторых случаях комментарии могут работать, это приводит к тому, что система может не распознавать группы, и, возможно, возникнут проблемы с идентификацией (например, #news
вместо news
). Лучше избегать комментирования и вместо этого использовать правильные команды для удаления.
4. Лучший способ удаления ненужных основных групп
Наилучший способ удалить ненужные основные группы — это сначала убедиться, что ни один пользователь не привязан к данной группе. Вам нужно:
- Убедиться, что учетная запись пользователя, связанная с группой, либо удалена, либо переназначена в другую группу.
- Выполнить команду удаления группы через
groupdel
.
Заключение
Удаление основной группы может вызвать проблемы в работе системы, если это не сделать аккуратно. Помните, что группы — это не просто метки, а важные компоненты управления доступом в Linux. Рекомендуется хорошо продумать, прежде чем предпринимать какие-либо действия по удалению учетных записей или групп. Если у вас есть сомнения, лучше оставить группу, чем рисковать системой.