У меня есть ssh-сервер. Некоторые из моих пользователей одновременно заходят в систему несколько раз; некоторым из тех, кто делает это, не должно быть, и я подозреваю, что делится аккаунтом. Те, кому не следует, все являются членами определенной группы unix.
Я бы хотел ограничить количество одновременных входов в систему, которые могут иметь члены группы 402, «по одному для каждого», при этом приоритет будет иметь самый последний вход в систему.
Последний момент важен; эти пользователи иногда законно теряют свое соединение с машиной, и им необходимо восстановить его, и я не хочу, чтобы они были заблокированы вне машины, потому что есть зависший сеанс, который они не могут убить. Вместо этого я хочу, чтобы новое аутентифицированное соединение автоматически отключило старое.
Кто-нибудь делает что-нибудь подобное? Есть ли у кого-нибудь умные предложения на основе PAM или подобные?
Поверьте, вы могли бы использовать /etc/security/limits.conf для обеспечения этого, синтаксис:
<domain> <type> <item> <value>
Итак, рабочая строка может выглядеть так:
@402 hard maxlogins 1
Что касается потерянных сеансов, не могли бы вы установить минимум ClientAliveInterval
в sshd, чтобы мертвые сеансы не оставались слишком долго?
Использовать MaxSessions
директива в sshd_config.
Match Group groupname
MaxSessions 1
ClientAliveInterval 30
ClientAliveCountMax 1
В конце вашего файла, чтобы значения были переопределены только для группы groupname
(вы должны использовать имя, а не числовой идентификатор). Если клиент не отвечает более чем на одно сообщение, отправленное каждые 30 секунд, клиент будет отключен. Вы можете возиться с числовыми значениями, как вам нравится. Кажется, работает на моем RHEL 6.