
рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд▓рд┐рдирдХреНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЧреЗрдЬ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддрдВрддреНрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВрдЧреЗ, рд╣рдо PAM рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рдордЭреЗрдВрдЧреЗ рдФрд░ pam_p11 рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реНрдорд╛рд░реНрдЯ рдХрд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд░реНрдЧ 3 рдПрд╕рд╡реАрдЯреА рдФрд░ рд╕реНрддрд░ 2 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рдорд╛рдгрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдпреВрдПрд╕рдмреА рдЯреЛрдХрди рдЯреЛрдХрди рдпреВрдбреАрдПрд╕ рдФрд░ рд░реБрддреЛрдХреЗрди рдПрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрд╕реНрдЯреНрд░рд╛ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдХреА рдЕрдШреЛрд╖рд┐рдд рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдХрдореА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред NDV 3, рдФрд░ Rutoken EDS рдХреЗ рд▓рд┐рдП NDV 4 рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЧреЛрдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, "C" рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдЬрд╛рдирдХрд╛рд░реА рддрдХред
рдереЛрдбрд╝рд╛ рдЗрддрд┐рд╣рд╛рд╕
рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рджрд┐рдиреЛрдВ рдореЗрдВ, рдпрджрд┐ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрд╕реЗ / etc / passwd рдФрд░ / etc / рд╢реИрдбреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдХреЙрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рдерд╛, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рди рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдерд╛, рдмрд▓реНрдХрд┐ рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреАред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рддрдВрддреНрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡реЗ рдЕрдкрдиреЗ рдЦрд╛рддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд▓рд┐рдирдХреНрд╕-рдкреАрдПрдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдерд╛ред рд╡реИрд╕реЗ, рдкреАрдПрдПрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реВрд░реНрдп рджреНрд╡рд╛рд░рд╛ рдЕрдХреНрдЯреВрдмрд░ 1995 рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЕрдЧрд╕реНрдд 1996 рдореЗрдВ рд▓рд┐рдирдХреНрд╕-рдкреАрдПрдПрдо рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рд░реЗрдб рд╣реИрдЯ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ PAM рдХреЗ рддреАрди рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ:
- рд▓рд┐рдирдХреНрд╕-рдкреАрдПрдПрдо рдкреАрдПрдПрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдЬрд┐рд╕рдХреА рдЪрд░реНрдЪрд╛ рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред
- OpenPAM BSD рд╕рд┐рд╕реНрдЯрдо рдФрд░ Mac OS X рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ PAM рдХрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ
- рдЬрд╛рд╡рд╛ рдкреИрдо - рд▓рд┐рдирдХреНрд╕-рдкреАрдПрдПрдо рдкрд░ рдЬрд╛рд╡рд╛ рдЖрд╡рд░рдг
PAM рд╕рдВрд░рдЪрдирд╛
рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ "PAM рдореЙрдбреНрдпреВрд▓" рдХреНрдпрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рд╡реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдСрдкрд░реЗрд╢рди рд╣реИрдВрдбрд▓рд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ PAM рдЦреБрдж рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ pam_unix рдореЙрдбреНрдпреВрд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреЗ рд╕рд╛рде рджрд░реНрдЬ рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ
- рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╕реБрд░рдХреНрд╖рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ
рдиреАрдЪреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд▓реЛрдХрди рд╣реИ рдХрд┐ PAM рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

PAM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдЖрд╡реЗрджрди PAM рдкреБрд╕реНрддрдХрд╛рд▓рдп (libpam.so) рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ
- рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ PAM рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ
- рдореЙрдбреНрдпреВрд▓ рдЙрдиреНрд╣реЗрдВ рд╕реМрдВрдкреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ
- рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЖрд╡реЗрджрди рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред
рдмреЗрд╢рдХ, PAM рдХреЗрд╡рд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред PAM рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрд╖реНрдардХ рдореЗрдВ рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкрджрдирд╛рдо рд╣реИрдВ:
- рдкреНрд░рдорд╛рдгреАрдХрд░рдг (рд╕рд╛рдорд╛рдиреНрдп)
- рдЦрд╛рддрд╛ рдкреНрд░рдмрдВрдзрди
- рд╕рддреНрд░ рдкреНрд░рдмрдВрдзрди
- рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рдмрдВрдзрди (рдкрд╛рд╕рд╡рд╛рд░реНрдб)
рдЕрдм рд╣рдо рдХреЗрд╡рд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рдмрд╛рдХреА рдЙрддреНрд╕реБрдХрддрд╛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред
PAM рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрд╕реЗ /etc/pam.d рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЙрд╕рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреА рд╣реЛрдЧреА, рдЬрд┐рд╕рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдЕрдиреНрдп рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ Ubuntu 11.10 рдореЗрдВ /etc/pam.d рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреНрдпрд╛ рдирд┐рд╣рд┐рдд рд╣реИ
$ ls /etc/pam.d/ atd common-account common-session-noninteractive lightdm other samba vmtoolsd chfn common-auth cron lightdm-autologin passwd sshd chpasswd common-password cups login polkit-1 su chsh common-session gnome-screensaver newusers ppp sudo
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЙрдЧрд┐рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдореВрд░реНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рджреЗрдЦреЗрдВред
рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ
< > < > < > <>
- рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕реНрд╡рдпрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрдХреЗрддрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА, рд╕рд╛рдорд╛рдиреНрдп / рдЦрд╛рддрд╛ / рд╕рддреНрд░ / рдкрд╛рд╕рд╡рд╛рд░реНрдб)
- рд╕рдлрд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдзреНрд╡рдЬ рдореЙрдбреНрдпреВрд▓ рдХреА рдорд╣рддреНрд╡рдкреВрд░реНрдгрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдзреНрд╡рдЬ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рди рд▓реЗ рд╕рдХрддрд╛ рд╣реИ: рдЕрдкреЗрдХреНрд╖рд┐рдд (рдЖрд╡рд╢реНрдпрдХ), рдЖрд╡рд╢реНрдпрдХ (рдЖрд╡рд╢реНрдпрдХ), рдкрд░реНрдпрд╛рдкреНрдд (рдкрд░реНрдпрд╛рдкреНрдд) рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ (рд╡реИрдХрд▓реНрдкрд┐рдХ)ред
- рд▓рд╛рдпрдмреНрд░реЗрд░реА рдХрд╛ рдкрде рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрде рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЗрдВ / lib / рд╕реБрд░рдХреНрд╖рд╛ / рдореЗрдВ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдкреИрд░рд╛рдореАрдЯрд░ рдЙрди рддрд░реНрдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рддрд░реНрдХреЛрдВ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдореБрдЦреНрдп () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ argc / argv рд╕рд┐рджреНрдзрд╛рдВрдд, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ argv [0] рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реНрдХ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдвреЗрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддрд╛ рд╣реИред PAM рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд┐рдпрдВрддреНрд░рдг рдзреНрд╡рдЬ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдСрдкрд░реЗрд╢рди рдХреА рд╕рдлрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЧрдИ рд╣реИрдВ:
- рдЕрдкреЗрдХреНрд╖рд┐рдд (рдЖрд╡рд╢реНрдпрдХ): рдпрджрд┐ рд╕реНрдЯреИрдХ рдореЙрдбреНрдпреВрд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз рддреБрд░рдВрдд рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдЖрд╡рд╢реНрдпрдХ: рдпрджрд┐ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╕реНрдЯреИрдХ рдореЙрдбреНрдпреВрд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЕрдиреНрдп рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдиреБрд░реЛрдз рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдкрд░реНрдпрд╛рдкреНрдд: рдпрджрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рдпрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирдХрд╛рд░рд╛рддреНрдордХ рдЙрддреНрддрд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╕реНрдЯреИрдХ рдореЗрдВ рд╢реЗрд╖ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╡реИрдХрд▓реНрдкрд┐рдХ: рдпрджрд┐ рд╕реНрдЯреИрдХ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдиреЗ рднреА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреА рд╣реИ, рддреЛ рдХрдо рд╕реЗ рдХрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рд╕реЗрд╡рд╛ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЙрдбреНрдпреВрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП
рдореЙрдбреНрдпреВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ / usr / share / pam-configs / <рдореЙрдбреНрдпреВрд▓ рдирд╛рдо> рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреВрд░реНрдг рдирд╛рдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реЛ, рдореЙрдбреНрдпреВрд▓ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреИрд░рд╛рдореАрдЯрд░ред
PAM рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╡рд┐рдХрд╛рд╕
рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣рдо pam_p11 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрди рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрддреЗ рд╕рдордп рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
pam_p11
рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдЕрд╕рдордорд┐рдд рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдорд╛рд░реНрдЯ рдХрд╛рд░реНрдб рдпрд╛ рдпреВрдПрд╕рдмреА рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рджреЛ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░реНрдп рдХреА рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдЙрд╕рдХреА рдирд┐рдЬреА рдХреБрдВрдЬреА рдЯреЛрдХрди рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИ
- рдкреНрд░рдорд╛рдг рдкрддреНрд░ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдШрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ
- PAM рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд┐рди рдХреЛрдб рдорд╛рдВрдЧрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдпрджрд┐ рдЯреЛрдХрди рдкрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдлрд▓ рдерд╛, рддреЛ рдЯреЛрдХрди рд╕реЗ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реНрд╡рдпрдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдкреНрд░рд╛рдкреНрдд рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрджрд┐, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рд╕рдлрд▓ рд░рд╣рд╛, рддреЛ рдореЙрдбреНрдпреВрд▓ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
рдЗрд╕ рдпреЛрдЬрдирд╛ рдореЗрдВ, 2048-рдмрд┐рдЯ рдЖрд░рдПрд╕рдП рдХреБрдВрдЬреА рдЬреЛрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЯреЛрдХрди рдкрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░-рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдХрд╛рд╕
рдореЙрдбреНрдпреВрд▓ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, PAM рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:
- pam_sm_authenticate, pam_sm_setcred - рдкреНрд░рдорд╛рдгреАрдХрд░рдг
- pam_sm_acct_mgmt - рдЦрд╛рддрд╛ рдкреНрд░рдмрдВрдзрди
- pam_sm_chauthtok - рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рдмрдВрдзрди
- pam_sm_open_session, pam_sm_close_session - рд╕рддреНрд░ рдкреНрд░рдмрдВрдзрди
рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ pam_sm_authenticate рдФрд░ pam_sm_setcred рдлрд╝рдВрдХреНрд╢рдВрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдмрд╕ рд╕реНрдЯрдмреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
PAM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ:
#define PAM_SM_AUTH #define PAM_SM_ACCOUNT #define PAM_SM_SESSION #define PAM_SM_PASSWORD #include <security/pam_appl.h> #include <security/pam_modules.h>
PAM рдХреЗ рд▓рд┐рдП рдпреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдорд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЕрдЧрд░ рд╣рдо рдХреЗрд╡рд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдХреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди pam_p11 рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЕрдкреНрд░рдпреБрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯрдмреНрд╕ рдбрд╛рд▓рдирд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрдЧрд╛ред
рдЪрд▓рд┐рдП pam_sm_authenticate рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВ:
PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv);
рдпрд╣рд╛рдБ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ:
- pamh - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд PAM рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░реЗрдВ
- argc, argv - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрд░реНрдХред рд╣рдорд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рдПрдХ рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ - PKCS # 11 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдорд╛рд░реНрдЧ
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рдореНрди рдорд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
- PAM_AUTH_ERR - рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддреНрд░реБрдЯрд┐
- PAM_CRED_INSUFFICIENT - рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ
- PAM_AUTHINFO_UNAVAIL - рдореЙрдбреНрдпреВрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдерд╛ред рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдпрд╛ рдЕрдиреНрдп рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- PAM_SUCCESS - рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдлрд▓
- PAM_USER_UNKNOWN - рджрд┐рдП рдЧрдП рдирд╛рдо рд╡рд╛рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ
- PAM_MAXTRIES - рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЙрдбреНрдпреВрд▓ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреА рдЕрдиреБрдордд рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдПред
рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░, рд╣рдо рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PKCS # 11 API рдФрд░ OpenSSL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП libp11 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрди рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
int i, rv; const char *user;
рдпрджрд┐ рд╣рдо PKCS # 11 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рд╣рдо рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ
if (argc != 1) { pam_syslog(pamh, LOG_ERR, "need pkcs11 module as argument"); return PAM_ABORT; }
рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдФрд░ рдкреАрдХреЗрд╕реАрдПрд╕ # 11 рд╕рдВрджрд░реНрдн рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ
OpenSSL_add_all_algorithms(); ERR_load_crypto_strings(); ctx = PKCS11_CTX_new();
рдкреАрдПрдПрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ
rv = pam_get_user(pamh, &user, NULL); if (rv != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "pam_get_user() failed %s", pam_strerror(pamh, rv)); return PAM_USER_UNKNOWN; }
рдЕрдм PKCS # 11 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓реЛрдб рдХрд░реЗрдВ, рдкрд╣рд▓реЗ рдЙрдкрд▓рдмреНрдз рдЯреЛрдХрди рдХреЛ рдвреВрдВрдвреЗрдВ рдФрд░ рдЙрд╕рд╕реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
rv = PKCS11_CTX_load(ctx, argv[0]); if (rv) { pam_syslog(pamh, LOG_ERR, "loading pkcs11 engine failed"); return PAM_AUTHINFO_UNAVAIL; }
рдЕрдм рдЯреЛрдХрди рдХреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ ~ / .eid / рдкреНрд░рд╛рдзрд┐рдХреГрдд_рдкрддреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдирд┐рд╣рд┐рдд рд╣реИ:
for (i = 0; i < ncerts; i++) { authcert = &certs[i]; if (authcert != NULL) { rv = match_user(authcert->x509, user); if (rv < 0) { pam_syslog(pamh, LOG_ERR, "match_user() failed"); rv = PAM_AUTHINFO_UNAVAIL; goto out; } else if (rv == 0) { authcert = NULL; } else { break; } } } if (!authcert) { pam_syslog(pamh, LOG_ERR, "no matching certificates found"); rv = PAM_AUTHINFO_UNAVAIL; goto out; }
рдФрд░ рдЕрдм рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ PAM рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдкрд┐рди рдХреЛрдб рд╣реЛрдЧрд╛), рдФрд░ рдлрд┐рд░ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░реЗрдВ
рдЕрдм рд╣рдо рдЯреЛрдХрди рдкрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
rv = PKCS11_login(slot, 0, password);
рдпрд╣ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдм рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЯреЛрдХрди рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЗ рдкрд╛рд╕ рдирд┐рдЬреА рдХреБрдВрдЬреА рд╣реИ рдпрд╛ рдирд╣реАрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдордирдорд╛рдирд╛ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВред
рдкрд╣рд▓реЗ, рджреЗрд╡ / рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реЗ 128 рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
fd = open(RANDOM_SOURCE, O_RDONLY); if (fd < 0) { pam_syslog(pamh, LOG_ERR, "fatal: cannot open RANDOM_SOURCE: "); rv = PAM_AUTHINFO_UNAVAIL; goto out; } rv = read(fd, rand_bytes, RANDOM_SIZE); if (rv < 0) { pam_syslog(pamh, LOG_ERR, "fatal: read from random source failed: "); close(fd); rv = PAM_AUTHINFO_UNAVAIL; goto out; } if (rv < RANDOM_SIZE) { pam_syslog(pamh, LOG_ERR, "fatal: read returned less than %d<%d bytes\n", rv, RANDOM_SIZE); close(fd); rv = PAM_AUTHINFO_UNAVAIL; goto out; } close(fd);
рддрдм рд╣рдореЗрдВ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рдЕрдиреБрд░реВрдк рдирд┐рдЬреА рдХреБрдВрдЬреА рдорд┐рд▓рддреА рд╣реИ рдФрд░ рдЙрд╕ рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рддреЗ рд╣реИрдВ
рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ, рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдорд┐рд▓ рдЬрд╛рдПрдЧреА, рдФрд░ рдлрд┐рд░ рд╣рдо рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ
pubkey = X509_get_pubkey(authcert->x509); if (pubkey == NULL) { pam_syslog(pamh, LOG_ERR, "could not extract public key"); rv = PAM_AUTHINFO_UNAVAIL; goto out; }
рдпрджрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рд╕рдлрд▓ рд░рд╣рд╛, рддреЛ рд╣рдо PKCS # 11 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ PAM_SUCCESS рдХреЛ рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред
rv = PAM_SUCCESS; out: PKCS11_release_all_slots(ctx, slots, nslots); PKCS11_CTX_unload(ctx); PKCS11_CTX_free(ctx); return rv;
рдмрд╛рдХреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмреНрдпрд╛рдЬ рдХреЗ рд╕реНрдЯрдмреНрд╕ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ
рд╣рдо рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рддрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рддрд╛рдЬрд╛ рдЙрдмрдВрдЯреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ 12.04 рдкрд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рдордиреЗ рдСрд╕реНрдЯреНрд░реЛрди рд▓рд┐рдирдХреНрд╕ рд╕реНрдкреЗрд╢рд▓ рдПрдбрд┐рд╢рди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕реНрдореЛрд▓реЗрдВрд╕реНрдХ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рд░реЛрд╕реЛрдХрди рдИрдбреАрдПрд╕ рдХреЗ рдпреВрдПрд╕рдмреА рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд░реБрддреЛрдХреЗрди рдПрд╕ред

рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдкрд╣рд▓реЗ рдореБрдЭреЗ рдХреБрдЫ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдереЗред рд░реБрддреЛрдХреЗрди рдПрд╕ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдУрдкрдирдПрд╕рд╕реА рдХреЗ рдПрдХ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: 0.11.13, рдФрд░ рд░реБрддреЛрдХреЗрди рдИрдбреАрдПрд╕ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: 0.12.2ред OpenCT рд╕рдВрд╕реНрдХрд░рдг 0.6.20 рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛрдиреЛрдВ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡рд┐рддрд░рдг рдХрд┐рдЯ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рддрд░рд┐рдд рдкреИрдХреЗрдЬ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП:
- libopenct1 (0.6.20-1.2): libopenct1_0.6.20-1.2_amd64.deb
- openct (0.6.20-1.2): openct_0.6.20-1.2_amd64.deb
рд░реБрддреЛрдХреЗрди рдПрд╕ рдХреЗ рд▓рд┐рдП
- libopensc2_0.11.13-1.1_amd64.deb
- opensc_0.11.13-1.1_amd64.deb
- рдореЛрдЬрд╝рд┐рд▓рд╛ opensc_0.11.13-1.1_amd64.deb
рд░реБрддреЛрдХреЗрди рдХреЗ рд▓рд┐рдП рдИ.рдбреА.рдПрд╕.
- рдЦреБрд▓рддрд╛ рд╣реИ (0.12.2-2): рдЦреБрд▓рддрд╛ рд╣реИ_0.12.2-2_amd64.deb
рдУрдкрдирд╕реА рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдкреИрдХреЗрдЬреЛрдВ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдбреЗрдмрд┐рдпрди рдирд┐рдЪреЛрдбрд╝ рднрдВрдбрд╛рд░ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдХреЗрдЬ рд▓рд┐рдП рдЧрдП:
- libltdl7 (> = 2.2.6b): libltdl7_2.2.6b-2_amd64.deb
- libssl0.9.8 (> = 0.9.8m-1): libssl0.9.8_0.9.8o-4squeeze11_amd64.deb
PAM рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЗрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ
рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЧрдП рдереЗ:
- libp11-1 (0.2.7-2): libp11-1_0.2.7-2_amd64.deb
- libpam-p11 (0.1.5-1): libpam-p11_0.1.5-1 + b1_amd64.deb
- libengine-pkcs11-рдЦреБрд▓рддрд╛ рд╣реИ (0.1.8-2): libengine-pkcs11-рдЦреБрд▓рддрд╛ рд╣реИ_0.1.8-2_amd64.deb
Pam_p11 рд╕реЗрдЯрд┐рдВрдЧ
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдореЗрдВ рд▓рдЧрднрдЧ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ / usr / рд╢реЗрдпрд░ / pam-configs / p11 рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
Name: Pam_p11 Default: yes Priority: 800 Auth-Type: Primary Auth: sufficient pam_p11_opensc.so /usr/lib/opensc-pkcs11.so
рдмреНрдпрд╛рдЬ рдХреА рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рдХрд╛рд░, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд╛рдо рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рджрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рдкреАрдХреЗрд╕реАрдПрд╕ # 11 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред
рдЕрдм рд╣рдореЗрдВ рдмрд╕ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИ
$ pam-auth-update
рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╡рд╛рдж рдореЗрдВ, pam_p11 рдЪреБрдиреЗрдВред рдпрджрд┐ рдЖрдк рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпреВрдирд┐рдХреНрд╕ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдпрд╣ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдореЙрдбреНрдпреВрд▓ "рдкрд░реНрдпрд╛рдкреНрдд" рд╣реЛрдЧрд╛, рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ "PAM_SUCCESS" рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдлрд▓ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рдХреБрдВрдЬреА рдФрд░ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдмрдирд╛рдПрдБ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдИрдбреА "45" рдХреЗ рд╕рд╛рде 2048 рдмрд┐рдЯреНрд╕ рдХреА рдЖрд░рдПрд╕рдП рдХреБрдВрдЬреА рдЬреЛрдбрд╝реА рдмрдирд╛рдПрдВ (рдЖрдИрдбреА рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдмрдирд╛рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА)ред
$ pkcs15-init --generate-key rsa/2048 --auth-id 02 --id 45 < PIN >
рдЙрддреНрдкрдиреНрди рдХреБрдВрдЬреА рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
$ pkcs15-tool --list-keys Using reader with a card: Aktiv Rutoken ECP 00 00 Private RSA Key [Private Key] Object Flags : [0x3], private, modifiable Usage : [0x4], sign Access Flags : [0x1D], sensitive, alwaysSensitive, neverExtract, local ModLength : 2048 Key ref : 1 (0x1) Native : yes Path : 3f001000100060020001 Auth ID : 02 ID : 45
рдЕрдм рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдмрдирд╛рдПрдВред рд╣рдо рдЦреБрд▓рддрд╛ рд╣реИ рдФрд░ pkcs11 рд╕рдорд░реНрдерди рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
$ openssl OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so (dynamic) Dynamic engine loading support [Success]: SO_PATH:/usr/lib/engines/engine_pkcs11.so [Success]: ID:pkcs11 [Success]: LIST_ADD:1 [Success]: LOAD Loaded: (pkcs11) pkcs11 engine
PEM рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдмрдирд╛рдПрдБ:
OpenSSL> req -engine pkcs11 -new -key 1:45 -keyform engine -x509 -out cert.pem тАУtext
рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб рдореЗрдВ, 1:45 рдПрдХ рдЬреЛрдбрд╝реА рд╣реИ: <рдХреБрдВрдЬреА рдЖрдИрдбреА>ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдЯреЛрдХрди рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдПрдХ рдкреНрд░рдореБрдЦ рдЬреЛрдбрд╝реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдмрдирд╛рдпрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдирд╛рдо рдХреА рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдлрд╛рдЗрд▓ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рдЕрдм рдЯреЛрдХрди рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рд╣реЗрдЬреЗрдВ:
$ pkcs15-init --store-certificate cert.pem --auth-id 02 --id 45 --format pem < PIN >
рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреА рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рджрд░реНрдЬ рдХрд░рдирд╛
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЯреЛрдХрди рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЛ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:
$ mkdir ~/.eid $ chmod 0755 ~/.eid $ pkcs15-tool -r <certificate_id> > ~/.eid/authorized_certificates $ chmod 0644 ~/.eid/authorized_certificates
рдирд┐рд╖реНрдХрд░реНрд╖
рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ PAM рдХреЗ рддрдВрддреНрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдореЗрдВ рдирд╣реАрдВред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдкреАрдПрдПрдо рд╕рдВрд╡рд╛рдж рддрдВрддреНрд░, рдкреАрдПрдПрдо рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдФрд░ рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рдХреБрдЫ рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдкрдиреЗ рдЖрдк рд╕реЗ, рд╡реЗ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирдП рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рдЪрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдЖрдзреБрдирд┐рдХ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред