Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
N
nss-pam-webapi
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Monitor
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
magicfelix
nss-pam-webapi
Commits
45dfbc0c
Verified
Commit
45dfbc0c
authored
4 years ago
by
Nik | Klampfradler
Browse files
Options
Downloads
Patches
Plain Diff
Remove draft document for token lifecycle
parent
cff0538f
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
TODO
+0
-86
0 additions, 86 deletions
TODO
with
0 additions
and
86 deletions
TODO
deleted
100644 → 0
+
0
−
86
View file @
cff0538f
turns out calling getpw{nam,uid} recursively is not such
a great idea… we need a fixed path (solution 1) or global
state (solution 2, although we cannot do away with a fixed
path by numeric uid totally) after all
/var/
- lib/
- nss-pam-oidc/
- by-uid/
- 0 inode 555
- FFF inode 556
- 1000 inode 557
- by-name/
- root inode 555 root:root 0600
- foo inode 556 foo:root 0600
- bar inode 557 bar:root 0600
1. Loginversuch
2. PAM-Modul wird geladen
3. PAM-Modul macht HTTP-Request, bekommt erfolgreiche Antwort
4. PAM-Modul legt /var/lib/nss-pam-oidc/by-name/%s an…
open(path, O_RDWR|O_CREAT|O_TRUNC, 0600)
… schreibt das Token rein.
5. PAM-Modul macht setenv("NSS_PAM_OIDC_OVERRIDE", "/var/lib/nss-pam-oidc/by-name/%s");
6. PAM-Modul macht getpwnam()
7a. NSS-Modul ist nicht im Einsatz, UID wird zurückgegeben
7b. NSS-Modul ist im Einsatz
.1. NSS-Modul wird im PAM-Kontext aufgerufen, läuft also als root
.2. Die Variable NSS_PAM_OIDC_OVERRIDE ist gesetzt, also nimmt er
das Token aus jener Datei (die zu dem Zeitpunkt noch root gehört)
(falls sie existiert, ansonsten das Systemtoken)
.3. NSS-Modul macht Request/Auflösung/usw. mit dem Token aus 7b.2
.4. NSS-Modul gibt UID (bzw. struct passwd) zurück
8. PAM-Modul macht link("/var/lib/nss-pam-oidc/by-name/%s", "/var/lib/nss-pam-oidc/by-uid/%X")
9. PAM-Modul macht chown("/var/lib/nss-pam-oidc/by-name/%s", numerische uid)
10. User ist eingeloggt, System läuft jetzt als User
11. User macht NSS-Aufruf (wir ignorieren mal Fall Modul wird nicht verwendet)
12. NSS-Modul läuft also als User
13. NSS_PAM_OIDC_OVERRIDE ist nicht gesetzt, also wir das Token
von "/var/lib/nss-pam-oidc/by-uid/%X" geladen (oder halt System)
14. usw. etc. usf. pp.
Experiment (muß man sehen, ob der State vom NSS-Teil gelesen werden kann):
1. Loginversuch
2. PAM-Modul wird geladen
3. pam_authenticate startet
4. PAM-Modul macht HTTP-Request, bekommt erfolgreiche Antwort
5. Token wird in globalen State der Library gelegt und dort ein Flag auf 1 gesetzt
6. PAM-Modul macht getpwnam()
7a. NSS-Modul ist nicht im Einsatz, UID wird zurückgegeben
7b. NSS-Modul ist im Einsatz
.1. NSS-Modul wird im PAM-Kontext aufgerufen, läuft also als root
.2. Das Flag ist gesetzt, also wird das Token aus dem globalen State gelesen
.3. NSS-Modul macht Request/Auflösung/usw. mit dem Token aus 7b.2
.4. NSS-Modul gibt UID (bzw. struct passwd) zurück
8. PAM-Modul merkt sich UID aus Schritt 7 im globalen State
9. pam_authenticate zuende
10. pam_session startet (hier ist z.B. ecryptfs bereits geladen und ~ verfügbar)
11. PAM-Modul droppt temporär die Privilegien
12. PAM-Modul legt Token ins Homeverzeichnis
13. PAM-Modul wird wieder root
14. PAM-Modul legt "/var/lib/nss-pam-oidc/%X" als Symlink auf die Datei im User-Home an
15. pam_session endet
16. User ist eingeloggt, System läuft jetzt als User
17. User macht NSS-Aufruf (wir ignorieren mal Fall Modul wird nicht verwendet)
18. NSS-Modul läuft also als User
19. NSS-Modul lädt Token von "/var/lib/nss-pam-oidc/%X"
20. usw. etc. usf. pp.
Berechtigungen:
/var/lib/nss-pam-oidc (dir) user=root group=root mode=0711
/var/lib/nss-pam-oidc/* (file) user=* group=root mode=0600
Stücke an globalem State, die vorzuhalten sind:
• Tokenpuffer, uninitialisiert
‣ gesetzt durch pam_authenticate
‣ genutzt durch NSS gdw Flag=1 (zum Holen der UID)
‣ genutzt durch pam_session (zum Schreiben ins Home)
• Flag „Tokenpuffer gültig?“, auf 0 initialisiert
‣ gesetzt durch PAM auf 1, nachdem Tokenpuffer gesetzt wurde
‣ genutzt durch NSS (siehe oben)
• struct passwd-Inhalt für den User, uninitialisiert
‣ gesetzt durch pam_authenticate
‣ genutzt durch pam_session (zum Schreiben ins Home und nach /var/lib/…)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment