2013-09-11 8 views
1

Я должен очистить всех пользователей, у которых есть идентификатор 0, отличный от root. Например, мой файл PASSWD содержит корень пользователя с ID 0 и пользовательский Гомер с идентификатором 0.Как удалить пользователей с uid 0?

Я пытался что-то вроде

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

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

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

+2

UIDs * являются * уникальными. У вас нет двух пользователей с ID = 0, у вас есть два имени пользователя для пользователя с ID = 0. Ваша команда запрашивает 'userdel' для удаления этого пользователя (через его имя пользователя' homer'), которое вы не можете сделать потому что вы вошли в систему как пользователь (через свое имя пользователя «root»). – ruakh

+0

ОК спасибо. Есть ли способ удалить другие имена пользователей? Удаляет ли строки из passwd и тени все, что необходимо? –

+0

См. Ниже правильную команду. Редактирование непосредственно опасно на машине с любой нагрузкой. – Bryce

ответ

8

«Гомер» и «корень» - это та же учетная запись. У вас может быть несколько имен пользователей для одной учетной записи. См. Также 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/ для будущих вопросов этого типа.

2

Вы можете иметь эту SED команду:

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

Или

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

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

1

Это трюк: userdel -rf username

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

userdel: user XXX is currently used by process 1 

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