#1 Le 19/09/2019, à 10: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
Hors ligne
#2 Le 26/09/2019, à 15: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, à 09: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