Як повністю відключити обліковий запис?


48

Як повністю відключити обліковий запис? passwd -lне дозволить нікому входити в обліковий запис за допомогою пароля, але ви все одно можете увійти через приватні / відкриті ключі. Як би я повністю відключив обліковий запис? Як швидке виправлення я перейменував файл у authorized_keys_lockme. Чи є інший спосіб?


3
Ви плануєте врешті-решт увімкнути це? Блокування системи? Якщо ні, я просто видалю обліковий запис.
Кен

Відповіді:


59

Правильний спосіб відповідно до usermod(8)цього:

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

(Власне, аргументом --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 <username>
Маркус Максвелл

4
Було б чудово, якби ви могли також надати метод, щоб повернути цю операцію. Схоже, usermod --unlock --expiredate '' usernameце зроблять.
Боб

3
Додаючи до того, що написав @MarcusMaxwell: Сторінка чоловіка для usermod:Note: if you wish to lock the account (not only access with a password), you should also set the EXPIRE_DATE to 1.
Zero3

1
Чому --expiredate 1недостатньо самостійно?
Томас Дженсен

Але, sudo su usernameздається, працює за допомогою іншого облікового запису.
xuhdev

10

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

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

(Або більш стисло,. sudo usermod -L -s /bin/nologin username)


Як я можу змінити оболонку на / bin / nologin. '

5
@mattdm Це не повне рішення, оскільки користувач все ще може вказати команду, яку потрібно виконати. Наприклад ssh username@hostname /bin/bash, дасть користувачеві bash-підказку, незалежно від оболонки за замовчуванням.
phunehehe

4
@phunehehe - ви пробували? Ви отримаєте в журналі "Користувач [ім'я користувача] не дозволений, оскільки оболонка / бін / нологін не існує".
mattdm

2
Наскільки мені відомо, поведінка недійсної оболонки насправді не зафіксована. З іншого боку, на сторінці man пише, що якщо пароль є провідним !! в Linux рахунок буде розглядатися як заблокований, і це насправді не працює. Отже, ви знаєте, документація та реальність - це все одно лише приблизні відповіді. :)
mattdm

2
sudo chsh -s /bin/nologinбуло б краще, ніж редагування /etc/passwdвручну. Також на деяких системах це /sbin/nologin.
Мікель

3

Ось ще один простий спосіб. Ви можете встановити термін дії облікового запису користувача. Це дозволить уникнути як облікових записів на основі пароля, так і ssh на основі ключа, але не торкатися пароля.

Щоб заблокувати обліковий запис:

# chage -E 0 username

Обліковий запис користувача 'ім'я користувача' буде заблоковано в системі. Щоб знову ввімкнути обліковий запис користувача, виконайте наступне.

Щоб розблокувати обліковий запис:

# chage -E -1 username

Обліковий запис користувача "ім'я користувача" буде знову включено у вашій системі тим самим паролем, що і раніше. Бінарний файл "chage" є частиною пакету тіньових утиліт на Red Hat Linux або пакетом passwd на Debian Linux.


3

У мене немає достатнього представника, щоб прокоментувати відповідь Legate, але я хотів поділитися, що ця відповідь допомогла нам у іншому випадку використання:

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чому планувальник функціонує належним чином, а авторизовані кінцеві користувачі можуть стати необхідним обліковим записом служби.

Дякую за рішення!


1

Щоб повністю видалити його, використовуйте userdel.

Зауважте, що якщо ви видалите обліковий запис, існує ризик, що його ідентифікатор користувача все-таки буде використовуватися десь у файловій системі, і новий користувач успадкує право власності на ці файли, якщо він увійде під цим самим ідентифікатором користувача.

Ви хочете змінити власника будь-яких файлів, які належать видаленому користувачеві.

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

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

Відмова: Я навчився UNIX самостійно, тому не здивуюсь, якщо є кращий спосіб тимчасового відключення користувача. Насправді я навіть не знаю, про які приватні / відкриті ключі ви говорите. Також я впевнений, що є findкоманда, яку можна використовувати для пошуку файлів із цим власником userid


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

0

Хтось намагався це зробити через ssh_config? Можливо, це може допомогти http://www.techrepublic.com/blog/opensource/set-up-user-accounts-quickly-and-securely/86

Крім того, переконайтеся, що для параметра PasswordAuthentication встановлено не так, щоб змусити всі реєстратори використовувати відкриті ключі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.