Как удалить пользователей, у которых есть uid 0?

Я должен очистить всех пользователей с идентификатором 0, кроме root. Например, мой файл passwd содержит пользователя root с идентификатором 0 и пользователя homer с идентификатором 0.

Я пробовал что-то вроде

grep :x:0: passwd | grep -v root:x: | awk -F : '{ print $1 }' | xargs userdel

но я получил ошибку userdel: пользователь homer в настоящее время вошел в систему, хотя я вошел в систему как root, а не homer. Я полагаю, эта ошибка происходит из-за их совместного использования и идентификации.

Есть ли способ обойти это? Должен ли я просто отредактировать файлы passwd и shadow? Иначе, есть ли способ заставить идентификатор 0 быть уникальным, чтобы мы могли гарантировать, что другие пользователи не будут созданы с идентификатором 0? Благодарю.

3 ответа

Решение

"Гомер" и "root" - это одна и та же учетная запись. Вы можете иметь несколько имен пользователей для одной учетной записи. Смотрите также https://unix.stackexchange.com/questions/49993/another-account-with-same-uid-as-root-gets-prompted-to-set-new-password-for-root

Ты захочешь vipw а также vipw -s чтобы исправить это. Редактирование напрямую с vim или же sed плохая идея

Рассмотрите https://serverfault.com/ или https://unix.stackexchange.com/ для будущих вопросов такого типа.

Это хитрость: userdel -rf username

Эта команда показывает вам:

userdel: user XXX is currently used by process 1

но имя пользователя удалено

Вы можете использовать эту команду sed:

sed '/^[^:]\+:x:0:/{/^root:/!d}' /etc/passwd

Или же

sed -i '/^[^:]\+:x:0:/{/^root:/!d}' /etc/passwd

Что бы изменить файл.

Другие вопросы по тегам