Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/09/2019, à 11:49

SepiOz

Script pendant le login ubuntu

Bonjour, premièrement je suis nouveau sur le forum donc excusez moi si je m'y prend mal
Donc voila ça fait un moment que j’écume les forum a la recherche d'une réponse, je vous explique,
je cherche un moyen de scripter le log dans ubuntu j'ai déjà vu comment changer le nombre d'essais autorisé pour la connexion mais ça ne fonctionne pas et ce que j'aimerais faire ce serait que dès la première fail connexion mon pc reboot or je n'arrive pas a placer la commande reboot, y a t il une option déjà présente qui permet de le faire ?
merci d'avance de vos réponse big_smile big_smile big_smile

Hors ligne

#2 Le 26/09/2019, à 16:34

LeoMajor

Re : Script pendant le login ubuntu

bonjour,

Dépend de PAM
L'histoire du login dépend d'untel service sous /etc/pam.d/*

si c'est celui de l'entrée principale/greeter/desktop, cela dépend de l'environnement de bureau, mais tu peux le deviner par le dbus

en préambule,
-> déterminer la session courante sur lequel tu te trouves via loginctl  (man loginctl)

 active_session=$(loginctl --no-pager --no-legend list-sessions | awk  -v user="SepiOz" '$3==user {cmd="loginctl -p State -p Type show-session "$1; \
while (cmd|getline tmp)if(tmp~/active|x11/){sess[$1]++}; close(cmd)}; END {for (s in sess)if(sess[s]==2)print s}')

dans l'exemple, active_session=30

~$ gdbus introspect --system -d org.freedesktop.login1 -o /org/freedesktop/login1/session/"$active_session"

node /org/freedesktop/login1/session/30 {
  interface org.freedesktop.DBus.Peer {
    methods:
      Ping();
      GetMachineId(out s machine_uuid);
    signals:
    properties:
  };
  interface org.freedesktop.DBus.Introspectable {
    methods:
      Introspect(out s data);
    signals:
    properties:
  };
  interface org.freedesktop.DBus.Properties {
    methods:
      Get(in  s interface,
          in  s property,
          out v value);
      GetAll(in  s interface,
             out a{sv} properties);
      Set(in  s interface,
          in  s property,
          in  v value);
    signals:
      PropertiesChanged(s interface,
                        a{sv} changed_properties,
                        as invalidated_properties);
    properties:
  };
  interface org.freedesktop.login1.Session {
    methods:
      Terminate();
      Activate();
      Lock();
      Unlock();
      SetIdleHint(in  b arg_0);
      Kill(in  s arg_0,
           in  i arg_1);
      TakeControl(in  b arg_0);
      ReleaseControl();
      TakeDevice(in  u arg_0,
                 in  u arg_1,
                 out h arg_2,
                 out b arg_3);
      ReleaseDevice(in  u arg_0,
                    in  u arg_1);
      PauseDeviceComplete(in  u arg_0,
                          in  u arg_1);
    signals:
      PauseDevice(u arg_0,
                  u arg_1,
                  s arg_2);
      ResumeDevice(u arg_0,
                   u arg_1,
                   h arg_2);
      Lock();
      Unlock();
    properties:
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s Id = '30';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly (uo) User = (1001, '/org/freedesktop/login1/user/_1001');
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s Name = 'toto';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly t Timestamp = 1569501971073826;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly t TimestampMonotonic = 5216750180;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly u VTNr = 2;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly (so) Seat = ('seat0', '/org/freedesktop/login1/seat/seat0');
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s TTY = '/dev/tty2';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s Display = '';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly b Remote = false;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s RemoteHost = '';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s RemoteUser = '';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s Service = 'gdm-password';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s Desktop = '';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s Scope = 'session-30.scope';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly u Leader = 10004;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly u Audit = 30;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s Type = 'x11';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s Class = 'user';
      readonly b Active = true;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
      readonly s State = 'active';
      readonly b IdleHint = true;
      readonly t IdleSinceHint = 1569496765559832;
      readonly t IdleSinceHintMonotonic = 11236185;
  };
};

-> chercher service

readonly s Service = '???'

-> chercher son correspondant sous pam; /etc/pam.d/

pam_service=$(gdbus introspect --system -d org.freedesktop.login1 -o /org/freedesktop/login1/session/"$active_session" | awk '/Service/ {gsub(/'\''|;/,"");print $NF}')
echo "/etc/pam.d/$pam_service"  

-> donc il faudra modifier sudo nano "/etc/pam.d/$pam_service"  # dans l'exemple, /etc/pam.d/gdm-password
PAM_SERVICE correspond aussi à pam_service  ( tu comprendras par la suite avec les variables d'environnement PAM)

..
...
###@include common-auth
auth    optional        pam_gnome_keyring.so
@include common-account

###ajout
auth    [success=4 default=ignore]      pam_unix.so nullok_secure
auth    optional                        pam_exec.so expose_authtok seteuid log=/tmp/pam_deny.log /usr/local/bin/pam_deny
auth	optional			pam_debug.so auth=perm_denied
auth    requisite                       pam_deny.so
# success.
auth    required                        pam_permit.so
auth    optional                        pam_exec.so expose_authtok seteuid log=/tmp/pam_permit.log /usr/local/bin/pam_permit
auth	optional 			pam_debug.so auth=success
###fin
...
..

modifier ###@include common-auth  et ajouter le bloc ajout/fin

xscreensaver est aussi un bon cobaye
cat /etc/pam.d/xscreensaver

#
# /etc/pam.d/xscreensaver - PAM behavior for xscreensaver
#

###@include common-auth
@include common-account

#ajout
auth    [success=4 default=ignore]      pam_unix.so nullok_secure
auth    optional                        pam_exec.so expose_authtok seteuid log=/tmp/pam_deny.log /usr/local/bin/pam_deny
auth	optional			pam_debug.so auth=perm_denied
auth    requisite                       pam_deny.so
# success.
auth    required                        pam_permit.so
auth    optional                        pam_exec.so expose_authtok seteuid log=/tmp/pam_permit.log /usr/local/bin/pam_permit
auth	optional 			pam_debug.so auth=success

cat  /usr/local/bin/pam_permit

#!/bin/bash

read password

declare -a aexporter

active_session=$(loginctl --no-pager --no-legend list-sessions | awk  -v user="$PAM_USER" '$3==user {cmd="loginctl -p State -p Type show-session "$1; \
while (cmd|getline tmp)if(tmp~/active|x11/){sess[$1]++}; close(cmd)}; END {for (s in sess)if(sess[s]==2)print s}')

if [ -n "$active_session" ]; then

active_userid=$(loginctl -p User show-session "$active_session" | cut -d= -f2)
#active_pid=$(pgrep -u "$active_userid" gnome-session)   # lightdm
active_pid=$(pgrep -u "$active_userid" gnome-session)   #gdm3
aexporter=($(awk '/^(DBUS_SESSION_BUS_ADDRESS|DISPLAY|XAUTHORITY)/ ' < <(strings /proc/${active_pid}/environ)))
export "${aexporter[@]}"
notify-send "chocolat:PERMIT"

fi

echo -e "$(date):auth=success:1,$PAM_SUCCESS,$PAM_IGNORE,$PAM_SERVICE,$PAM_TYPE,$PAM_USER,$password\n2,$active_session,$active_userid,$active_pid,\n3,${aexporter[@]}\n" >> /tmp/chocolat.log

cat  /usr/local/bin/pam_deny

#!/bin/bash

read password

declare -a aexporter

active_session=$(loginctl --no-pager --no-legend list-sessions | awk  -v user="$PAM_USER" '$3==user {cmd="loginctl -p State -p Type show-session "$1; \
while (cmd|getline tmp)if(tmp~/active|x11/){sess[$1]++}; close(cmd)}; END {for (s in sess)if(sess[s]==2)print s}')

if [ -n "$active_session" ]; then

active_userid=$(loginctl -p User show-session "$active_session" | cut -d= -f2)
#active_pid=$(pgrep -u "$active_userid" gnome-session)   # lightdm
active_pid=$(pgrep -u "$active_userid" gnome-session)   #gdm3

aexporter=($(awk '/^(DBUS_SESSION_BUS_ADDRESS|DISPLAY|XAUTHORITY)/ ' < <(strings /proc/${active_pid}/environ)))
export "${aexporter[@]}"
notify-send "chocolat:deny"
fi


echo -e "$(date):auth=perm_denied:1,$PAM_SUCCESS,$PAM_IGNORE,$PAM_SERVICE,$PAM_TYPE,$PAM_USER,$password\n2,$active_session,$active_userid,$active_pid,\n3,${aexporter[@]}\n" >> /tmp/chocolat.log

pour activer une configuration pam   

sudo pam-auth-update
ou 
patienter 10/15 minutes (le temps de mémorisation mot de passe/sudo)

s'interdire de modifier les /etc/pam.d/common*  qui agissent sur tous les services  (portée globale système)   

Hors ligne

#3 Le 04/10/2019, à 10:31

SepiOz

Re : Script pendant le login ubuntu

Désolé du temps passé avant ma réponse, merci beaucoup LeoMajor je teste ça des que je peux

Hors ligne