Как мне полностью отключить аккаунт?

48

Как мне полностью отключить аккаунт? passwd -lне позволит никому войти в учетную запись, используя пароль, но вы все равно можете войти через закрытые / открытые ключи. Как бы я полностью отключил аккаунт? В качестве быстрого исправления я переименовал файл в authorized_keys_lockme. Есть ли другой способ?

Braiam
источник
3
Планируете ли вы включить его в конце концов? Системные блокировки? Если нет, я бы просто удалил аккаунт.
Кен

Ответы:

59

Правильный путь в соответствии с usermod(8):

usermod --lock --expiredate 1970-01-02 <username>

(На самом деле аргумент to --expiredateможет быть любой датой до текущей даты в формате YYYY-MM-DD.)


Объяснение:

  • --lockблокирует пароль пользователя. Однако вход в систему другими способами (например, с открытым ключом) все еще возможен.

  • --expiredate YYYY-MM-DDотключает учетную запись на указанную дату. Согласно man shadow 51970-01-01 является неоднозначным значением и не должно использоваться.

Я проверил это на своей машине. Ни логин с паролем, ни открытый ключ невозможны после выполнения этой команды.


Чтобы позже включить учетную запись, вы можете запустить:

usermod --unlock --expiredate '' <username>
Кристоф Вурм
источник
7
Не используйте 1970-01-01, так как для поля истечения срока действия / etc / shadow будет установлено значение 0. shadow (5) Не следует использовать значение 0, поскольку оно интерпретируется как учетная запись без срока действия или как срок действия на 1 января 1970 г. Пожалуйста, используйте: usermod --lock --expiredate 1970-02-02 <имя пользователя>
Маркус Максвелл
4
Было бы здорово, если бы вы могли также предоставить метод, чтобы отменить эту операцию. Похоже usermod --unlock --expiredate '' username, сделаем это.
Боб
3
Добавление к тому, что написал @MarcusMaxwell: Страница usermodNote: if you wish to lock the account (not only access with a password), you should also set the EXPIRE_DATE to 1.
руководства
1
Почему --expiredate 1не хватает само по себе?
Томас Дженсен
Но, sudo su usernameпохоже, работает с использованием другого аккаунта.
xuhdev
10

Заблокируйте пароль и измените оболочку на /bin/nologin.

sudo usermod --lock --shell /bin/nologin username

(Или более кратко sudo usermod -L -s /bin/nologin username.)

mattdm
источник
Как мне изменить оболочку на / bin / nologin.?
5
@mattdm Это не полное решение, так как пользователь все еще может указать команду для выполнения. Например ssh username@hostname /bin/bash, предоставит пользователю приглашение bash независимо от оболочки по умолчанию.
phunehehe
4
@phunehehe - ты пробовал это? В журнале вы увидите: «Пользователь [имя пользователя] не разрешен, потому что shell / bin / nologin не существует».
Mattdm
2
Насколько я знаю, поведение недопустимой оболочки на самом деле не задокументировано. С другой стороны, на странице руководства написано, что если пароль имеет начальную строку! в Linux учетная запись будет считаться заблокированной, и это на самом деле не работает. Так что, знаете, документация и реальность в любом случае являются лишь приблизительными. :)
mattdm
2
sudo chsh -s /bin/nologinбыло бы лучше, чем редактирование /etc/passwdвручную. Кроме того, в некоторых системах это так /sbin/nologin.
Микель
3

Вот еще один простой способ. Вы можете установить срок действия учетной записи пользователя. Это предотвратит вход в систему как по паролю, так и по ssh-ключу, но не затронет пароль.

Чтобы заблокировать аккаунт:

# chage -E 0 username

Учетная запись пользователя 'username' будет заблокирована в системе. Чтобы снова включить учетную запись пользователя, выполните следующие действия.

Чтобы разблокировать аккаунт:

# chage -E -1 username

Учетная запись пользователя 'username' будет повторно активирована в вашей системе с тем же паролем, что и раньше. Двоичный файл 'chage' является частью пакета shadow-utils в Red Hat Linux или пакета passwd в Debian Linux.

miklosq
источник
3

У меня нет достаточного количества представителей, чтобы комментировать ответ Легата, но я хотел бы поделиться, что этот ответ помог нам в другом случае использования:

1.) рассматриваемая учетная запись - это локальная учетная запись службы, на которой выполняется приложение, а не учетная запись конечного пользователя.

2.) Конечные пользователи ssh в качестве самих себя, и sudo /bin/su <user>стать пользователем и администрировать приложение из-за требования контрольного журнала, что учетная запись службы не может иметь возможность прямого входа в систему.

3.) Учетная запись службы должна иметь допустимую оболочку (а /bin/bashне /sbin/nologin), потому что платформа планирования предприятия (агент запускается как root локально) должна иметь возможность, su - <user>а не su -s /bin/bash <user>способность полной оболочки, и необходима для удаленного запуска заданий. для больших пакетных операций, охватывающих несколько серверов и баз данных.


Итак ...

passwd -l <user>
Не удовлетворяет ограничениям, потому что аутентификация с открытым ключом обходит PAM и все еще позволяет прямой вход в систему.

usermod -s /sbin/nologin <user>
Не удовлетворяет ограничениям, потому что нарушает планировщик предприятия

usermod --lock --expiredate 1970-01-01 <user>
Это наш победитель. Удаленный вход в систему отключен, но root все еще может su <user>, как и другие пользователи, sudoтак что планировщик функционирует должным образом, и авторизованные конечные пользователи могут стать целевой учетной записью службы по мере необходимости.

Спасибо за решение!

user1880028
источник
1

Чтобы полностью удалить его используйте userdel.

Обратите внимание, что если вы удаляете учетную запись, существует риск того, что ее идентификатор пользователя все еще будет использоваться в файловой системе где-то, и новый пользователь наследует права собственности на эти файлы, если он вошел под тем же идентификатором пользователя.

Вы хотите изменить владельца любых файлов, которые принадлежат удаленному пользователю.

Если вы хотите добавить пользователя позже, сохраните его строки из /etc/passwd(и в Solaris /etc/shadow) во временные файлы, такие как /etc/passwd_deleted.

Таким образом, когда вы добавляете его обратно, вы можете использовать тот же идентификатор пользователя и тот же пароль (который зашифрован в одном из вышеуказанных файлов)

Отказ от ответственности: я изучил UNIX самостоятельно, поэтому я не удивлюсь, если есть лучший способ временно отключить пользователя. На самом деле, я даже не знаю, о каких секретных / открытых ключах вы говорите. Также я уверен, что есть findкоманда, которая может быть использована для поиска файлов с этим владельцем.

Брайан Филд
источник
1
google author_keys или попробуйте прочитать этот eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html в основном вместо использования пароля, вы помещаете свой ключ publuc в этот файл, и когда вы подключаетесь с помощью ssh, вы автоматически входите в систему если один из открытых совпадает с вашим текущим закрытым ключом