OpenSSH - eine Session pro User

bsd-rider

Member
Hallo zusammen,

ich habe folgende Problemstellung. Ich möchte den Login eines Benutzers auf maximal eine aktive SSH-Session begrenzen. Unter Debian oder ähnlichem habe ich das bisher folgendermaßen gemacht.

Code:
In der PAM-Konfiguration für SSH in Datei /etc/pam.d/sshd

session required pam_limits.so

Dann in /etc/security/limits.conf 

<username> hard maxlogins 1

Hiermit wird eine Session gleich wieder geschlossen wenn bereits eine andere besteht.

Irgendwie finde ich das PAM-Modul pam_limits.so nicht, und die Datei limits.conf gibt es auch nicht.

Dann dachte ich das in der login.conf etwas zu finden wäre, aber leider auch nichts. Die Lösung über ein Script was ich als Loginshell anlege möchte ich nicht.

Kennt ja jemand das Pondon in FreeBSD dazu?


Viele Grüße
~b
 
Ach kommt, ihr wisst doch was gemeint ist :-)

Hab schon gesucht ob ich das Modul irgendwie für FreeBSD bekomme. Komisch, das muss es doch in ähnlicher Form geben.

Teste gerade nochmal was mit der sshd_config. Vielleicht wird es darüber irgendwie gehen. Man kann ja pro User bestimmte Konfigurationsparameter übergeben. Mal schauen was das hergibt.

Match User <benutzer>


Viele Grüße
~b
 
Hiho,

ich habe da doch was in der Manpage zu /etc/login.conf gefunden. Nur funktioniert das leider nicht so wie ich es in der Doku verstehe und konfiguriert habe. Es könnte sein das sich dieses lediglich auf die tty am System bezieht, aber nicht auf die pseuso tty´s vom sshd.

#man 5 login.conf
---cut---
sessionlimit number Maximum number of concurrent login
sessions on ttys in any group.
ttys.accounted list List of ttys and ttygroups for
which login accounting is active.
ttys.exempt list List of ttys and ttygroups for
which login accounting is exempt.
---cut---

Ok, Login-Class "testclass" angelegt und einen User angelegt der diese zugewiesen bekommen hat. Nur kann ich mich jetzt trotzdem von 3 unterschiedlichen Systemen mit dem BEnutzer "test" einloggen.

# cat /etc/login.conf
---cut---
testclass:\
:sessionlimit=2:\
---cut---

[root@host23 /]# grep test /etc/master.passwd
test:$1$5GHzu/8S$Hy3aRdhluKUDt9pFgEcyj.:1001:1001:testclass:0:0:User &:/home/test:/bin/csh

Ich geh gleich mal direkt an den Server in teste es wenn ich mich direkt an dem System einlogge.


Viele Grüße
~b
 
Erst hatte ich es nicht gemacht, aber nachdem ich mit die Datei dann mal von oben bis unten durchgelesen habe, dann ja. Steht ja gleich Oben :-)

Nur hat es das auch nicht gebracht.

Dann dachte ich baue ich da nochmal folgendes mit in die Class:
Code:
:pseudoterminals=1:\

Nur habe ich das Gefühl das garnichts greift was ich da eintrage. Z.b die ":minpasswordlen=8:\" habe ich gesetzt. Aber ein User kann immernoch ein kürzeres PW haben. Ich denke da gibt es ein generelles Problem. Die Installation ist sehr frisch und groß dran rumgebastelt wurde noch nicht.


Viele GRüße
~b
 
im manpage steht zu sessionlimit das nur mit gruppen in der tty funktioniert. So wie ich es verstanden habe greift es nur bei ssh mit weiterleitung zu X11. Zu minpasswordlen, hast du zuerst benutzer angelegt und dann login.conf geändert oder umgedreht.
 
hiho,

das mit der Passwortlänge war nur zum Test ob es angenommen wird. Ich gehe das gerade anders wie folgt an. Die Limits können auch pro User durch Einträge in der ~/.login_conf eingegeben werden. Ich möchte ja die Pseudoterminals limitieren. So das genau für einen Benutzer auch nur eines zur Verfügung steht. Also die Werte greifen, entweder verstehe ich da Grundlegend etwas falsch oder es funktioniert so nicht. In der Manpage zur login.conf findet sich da folgendes:

pseudoterminals number Maximum number of pseudo-
terminals.

So gut, also fix eingetragen in die .login_conf des Benutzers. Und einfach mehrere male einloggen und auch noch von einem anderen System. Folgende Outputs dazu:

Code:
[root@bsdbox /home/user]# cat .login_conf
# $FreeBSD: src/share/skel/dot.login_conf,v 1.3.36.1.2.1 2009/10/25 01:10:29 kensmith Exp $
#
# see login.conf(5)
#
me:\
        :sessionlimit=1:\
        :pseudoterminals=1:

[root@bsdbox /home/user]# cap_mkdb /home/user/.login_conf

[root@bsdbox /home/user]# ls -la .l*
-rw-r--r--  1 user   wheel    261 Mar  2 02:13 .login
-rw-r--r--  1 user   wheel    209 Mar  6 15:43 .login_conf
-rw-r--r--  1 root   wheel  16384 Mar  6 15:58 .login_conf.db

[root@bsdbox /home/user]# ssh user@10.90.70.23
Password:

$ limits -a
Resource limits (current):
  cputime              infinity secs
  filesize             infinity kB
  datasize               524288 kB
  stacksize               65536 kB
  coredumpsize         infinity kB
  memoryuse            infinity kB
  memorylocked         infinity kB
  maxprocesses             3603
  openfiles                7207
  sbsize               infinity bytes
  vmemoryuse           infinity kB
  pseudo-terminals            1
  swapuse              infinity kB

$ w
 4:06pm  up 2 days, 16:14, 3 users, load averages: 0,00 0,02 0,00
USER             TTY      FROM              LOGIN@  IDLE WHAT
user              pts/0    172.10.10.23    4:05pm     - -sh (sh)
user              pts/2    172.10.10.23    4:06pm     - -sh (sh)
user              pts/3    172.10.10.23    4:06pm     - w
user              pts/4    10.180.40.12    4:07pm     - -sh (sh)

Also das Limit ist gesetzt, beim Login sollte es auch greifen aber es tut nicht das was es nach meinem Verständnis tun sollte. Korrigiert mich wenn ich es falsch verstehe :)

Grüße
~b
 
Zuletzt bearbeitet:
Ich stehe vor einem ähnlichen Problem. Ich setze voraus, daß der FreeBSD sshd 'PAMifiziert' ist. Dann sollte in der PAM-Funktionsklasse 'account' das Modul pam_unix.so laut Manpage genau das tun, was in login.conf eingestellt wird (siehe /etc/pam.d/sshd). Ich kann mich mehrfach anmelden. 'limits' zeigt mir sowohl mit 'sessionlimit=1' als auch mit 'pseudoterminals=1' das an, was ich erwartet hätte. Offenbar kann aber das Modul pam_unix.so mit diesen Einträgen nichts anfangen, oder aber der Authentifizierungs- und Authorisationsprozeß geht einen anderen Weg als den von mir angenommenen (über PAM).
 
Zurück
Oben