Как временно убрать пользователя (не удалить, но запретить вход)?
Бывают такие ситуации, когда надо запретить юзеру пользоваться вашей машиной временно. Конечно, самый простой способ - удалить его учетную карточку, но не трогать остальные файлы. Однако, этот способ имеет кучу недостатков:
- почта на несуществующего юзера будет возвращаться отправителю,
- user ID этого юзера может достаться другому (новому юзеру),
- при возвращении юзера в систему надо будет воспроизвести в точности ту же учетную карточку,
- и т.п.
Поэтому, этот способ - самый неудачный и его даже не стоит рассматривать. Лучше рассмотрим другие возможности:
Первый способ
Этот способ заключается в том, что в бюджет надо вписать <Account expiration time> (с помощью программы chpass), естественно, поставив там уже прошедшую дату. В этом случае, юзер как бы существует в системе - письма к нему идут, файлы сохраняются, во всех диагностиках, где может встретиться его имя, оно отображается правильно. Но, в то же время, если юзер попытается войти в систему, ему просто выдастся сообщение, что "ваш account истек".
Однако, это способ тоже не лишен недостатков. Чтобы понять - почему, надо рассмотреть подробнее, что значит "доступ в систему" юзера.
Обычный юзер может войти в систему (и пользоваться ее ресурсами) через терминал или по сети, с помощью telnet. При этом должна проработать программа login (которая проверит имя и пароль юзера и, если все правильно, запустит для него Shell). Эта же программа обычно вызывается для тех, кто заходит через модем и устанавливает IP соединение по модемной линии (PPP или SLIP). (Кстати, программе login можно запретить пропускать юзера, если прописать правильную строчку (запрещающую вход конкретному юзеру) в файле /etc/login.access. Как это правильно сделать, можно посмотреть в man login.access). Но, кроме того, юзер может (если, конечно, ваша система предоставляет такой сервис):
- иметь доступ к своим файлам через FTP, тогда проверкой имени/пароля занимается ftpd (программа-сервер FTP);
- читать свою почту через POP-сервер, тогда проверкой имени/пароля занимается программа popper (или другой РОР-сервер);
- иметь доступ к своей домашней директории через сервер samba, тогда проверкой имени/пароля занимается программа smbd;
- пользоваться удаленным запуском программ (rlogin, rsh и т.п.), тогда проверкой имени/пароля занимаются соответствующие демоны (rlogind, rshd и т.д.);
Так вот. Проблема в том, что не все перечисленные демоны (программы-серверы), ответственные за допуск юзера к ресурсам, могут обращать внимание на "Account expiration time". И, следовательно, все равно дадут юзеру возможность воспользоваться своими услугами.
Второй способ
Другой способ "отсечь" юзера заключается в том, чтобы "испортить" ему пароль. Для этого достаточно добавить к зашифрованному паролю, хранящемуся в учетной карточке, один знак. Обычно, ставят знак <*> в начале пароля, поскольку этот знак не может встретиться в нормальном зашифрованном пароле и, во-первых, пароль в этом случае невозможно подобрать, а во-вторых, такое "искажение" пароля легче потом искать, когда вы будете возвращать юзера обратно. Сделать такую манипуляцию можно программой vipw или chpass.
Этот способ надежно срабатывает во всех случаях, когда юзер пытается получить доступ в систему, независимо от того, через какую программу он это делает (он просто не знает теперь своего пароля).
Недостаток этого способа в том, что он менее "цивилизованный". То есть, юзер просто получит сообщение о том, что он неправильно ввел свое имя или пароль, а не о том, что ему запрещен вход.
Кроме того, есть случаи, когда этот способ не работает. Дело в том, что удаленные сервисы могут не проверять пароль, если у юзера в домашней директории в соответствующем файле (.rhosts) записаны адреса машин "пользующихся доверием" и он осуществляет доступ именно с этих машин. В этом случае, проверяется только адрес машины (и имя юзера под которым он зарегистрирован там), а пароль не запрашивается, следовательно, описанный метод не сработает. (Кстати, предыдущий метод account expiration в этом случае должен работать.)
Так как же все таки надо поступить?
Способ с "испорченным" паролем более универсальный, но все-таки неправильный.
Самый правильный путь - подбирать всех демонов таких, которые правильно отрабатывают запрет входа (например, через <account expiration>).
Кстати, те демоны, которые у Вас из "родного" дистрибутива, должны правильно обрабатывать такой запрет. Проблемы могут возникнуть только с программами от других разработчиков.
Кроме того, для юзеров, запускающих "IP по модему", обычно, другой способ входа недоступен. Поэтому можно смело пользоваться <account expiration> или запретом в /etc/login.access.
Ну и хочу напомнить, что "не стесняйтесь" читать man- страницы, там все очень хорошо описано.
man 5 passwd - описывает структуру учетной карточки (user account)
man adding_user - общие слова о добавлении юзера. Кстати, там есть рекомендации - каким должно быть Login name
man pwd_mkdb
man vipw
man adduser
man passwd - изменение пароля
man chpass - другие изменения в учетной карточке
man rmuser
man login.access
man login.conf
А, также, в каждом из них есть раздел See Also (смотри также...). Их тоже можно почитать, хотя, в основном, они все ссылаются друг на друга.