Linux - limitar tiempo de sesion ssh para un usuario o grupo en particular

 
Vista:

limitar tiempo de sesion ssh para un usuario o grupo en particular

Publicado por yiekho (1 intervención) el 22/02/2017 15:10:36
buen dia.
en mi trabajo requiero que algunos usuarios..pertenecientes a un grupo en especifico solo tengan la sesion de sshd urante 10 minutos. pero a la vez requiero que la mayoria de usuarios no tengan limitaciones...

no he encontrado como lograrlo...
alguna idea?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 4
Ha aumentado su posición en 3 puestos en Linux (en relación al último mes)
Gráfica de Linux

limitar tiempo de sesion ssh para un usuario o grupo en particular

Publicado por José Luis (3 intervenciones) el 22/02/2017 16:46:29
Yo también estoy interesado en esta consulta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de barna_rasta
Val: 96
Bronce
Ha mantenido su posición en Linux (en relación al último mes)
Gráfica de Linux

limitar tiempo de sesion ssh para un usuario o grupo en particular

Publicado por barna_rasta (175 intervenciones) el 23/02/2017 19:42:30
Buenas tardes yiekho,
yo tambien llevo muchos años realizando el mantenimiento y aplicaciones a medida (algunos la llaman ERP) que se accede con putty y
ssh.
Hace tiempo recuerdo haber creado un script para controlar los usuarios que estaban deslogeados o no mostraban ningun tipo de actividad durante 30 minutos (idleout en SCO).

Para tu caso lo primero que deberias 'cazar' es la informacion de los usuarios logeados
1
2
3
4
5
6
7
# who -u
root     tty12        2017-02-23 18:21 00:07        7281
pepe   tty4         2017-02-23 19:22 00:09        7649
root     tty3         2017-02-23 17:52 00:10        6929
root     tty2         2017-02-23 16:54 00:10        6570
root     tty1         2017-02-23 16:50 00:09        6529
angel    pts/0        2017-02-23 19:32   .          7742

Lo mismo pero aplicando filtro de usuario y extrayendo la hora de logeo (4ª columna) la 5ª columna es el tiempo de inactividad.
1
2
# who -u|grep pepe|awk {'print $4'}
19:22

Apartir de aqui ya es cosa de ir comparando la hora actual con la obtenida y matando (kill -13) el proceso de la 6ª columna.

Comenta como lo trabajas. ok? :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 4
Ha aumentado su posición en 3 puestos en Linux (en relación al último mes)
Gráfica de Linux

limitar tiempo de sesion ssh para un usuario o grupo en particular

Publicado por José Luis (3 intervenciones) el 27/02/2017 19:09:36
Hola barna_rasta,

Buen tip, lo he metido a un crontab monitoreando cada minuto y con un script en awk determino el tiempo.

Gracias y saludos.
José Luis.

*Siempre se aprende algo nuevo todos los días*
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

limitar tiempo de sesion ssh para un usuario o grupo en particular

Publicado por mixiqui (1 intervención) el 01/03/2017 10:06:03
puedes mostrar el script?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 4
Ha aumentado su posición en 3 puestos en Linux (en relación al último mes)
Gráfica de Linux

limitar tiempo de sesion ssh para un usuario o grupo en particular

Publicado por José Luis (3 intervenciones) el 06/03/2017 23:57:28
Claro que sí,

Sorry por contestar tanto tiempo después.

Yo no mataba el proceso, solamente verificaba que si tenia mas de 1 hora conectado me enviara un correo.

check_time.awk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
BEGIN    \
{
    # Initialize table of month lengths
    _tm_months[0,1] = _tm_months[1,1] = 31
    _tm_months[0,2] = 28; _tm_months[1,2] = 29
    _tm_months[0,3] = _tm_months[1,3] = 31
    _tm_months[0,4] = _tm_months[1,4] = 30
    _tm_months[0,5] = _tm_months[1,5] = 31
    _tm_months[0,6] = _tm_months[1,6] = 30
    _tm_months[0,7] = _tm_months[1,7] = 31
    _tm_months[0,8] = _tm_months[1,8] = 31
    _tm_months[0,9] = _tm_months[1,9] = 30
    _tm_months[0,10] = _tm_months[1,10] = 31
    _tm_months[0,11] = _tm_months[1,11] = 30
    _tm_months[0,12] = _tm_months[1,12] = 31
}
 
 
# decide if a year is a leap year
function _tm_isleap(year,    ret)
{
    ret = (year % 4 == 0 && year % 100 != 0) ||
            (year % 400 == 0)
    return ret
}
# convert a date into seconds
function _tm_addup(a,    total, yearsecs, daysecs,
                         hoursecs, i, j)
{
    hoursecs = 60 * 60
    daysecs = 24 * hoursecs
    yearsecs = 365 * daysecs
 
    total = (a[1] - 1970) * yearsecs
 
    # extra day for leap years
    for (i = 1970; i < a[1]; i++)
        if (_tm_isleap(i))
            total += daysecs
 
    j = _tm_isleap(a[1])
    for (i = 1; i < a[2]; i++)
        total += _tm_months[j, i] * daysecs
 
    total += (a[3] - 1) * daysecs
 
    total += a[4] * hoursecs
    total += a[5] * 60
    total += a[6]
 
    return total
}
# Function mktime convert a date into seconds
function mktime(str,    res1, res2, a, b, i, j, t, diff)
{
    i = split(str, a, " ")    # don't rely on FS
 
    if (i != 6)
        return -1
 
    # force numeric
    for (j in a)
        a[j] += 0
 
    # validate
    if (a[1] < 1970 ||
        a[2] < 1 || a[2] > 12 ||
        a[3] < 1 || a[3] > 31 ||
        a[4] < 0 || a[4] > 23 ||
        a[5] < 0 || a[5] > 59 ||
        a[6] < 0 || a[6] > 61 )
            return -1
 
    res1 = _tm_addup(a)
 
    return res1
}
 
{
 
    last_t=substr($2 " " $3,1,19)
    getline < "check_time.txt"
    curr_t=$0
 
    # Convert last_time to seconds (epoch)
    b=last_t
    gsub(/[-:]/," ",b)
    last_s=mktime(b)
 
    # Convert curr_time to seconds (epoch)
    b=curr_t
    gsub(/[-:]/," ",b)
    curr_s=mktime(b)
 
    print ((curr_s-last_s)<=3600) ? 0 : 1
 
}

En el shell
1
2
3
4
5
6
7
who -u| awk '{print $1, $3 " " $4 ":00"}' > user_conn.txt
count=$(cat user_conn.txt | awk -f check_time.awk )
 
  if [ $count -eq 1 ]; then
   # mas de 60 minutos conectado
   echo "$(awk '{print $1}' user_conn.txt) Tiene mas de una hora conectado, favor de revisar. $(date)" | mail -s "$SUBJECT" $EMAILID
  fi



Saludos
José Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar