Rutoken EDS рдФрд░ Rutoken S рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд╕реНрдЯреНрд░рд╛ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП PAM рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ



рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд▓рд┐рдирдХреНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЧреЗрдЬ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддрдВрддреНрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВрдЧреЗ, рд╣рдо PAM рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рдордЭреЗрдВрдЧреЗ рдФрд░ pam_p11 рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реНрдорд╛рд░реНрдЯ рдХрд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд░реНрдЧ 3 рдПрд╕рд╡реАрдЯреА рдФрд░ рд╕реНрддрд░ 2 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рдорд╛рдгрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдпреВрдПрд╕рдмреА рдЯреЛрдХрди рдЯреЛрдХрди рдпреВрдбреАрдПрд╕ рдФрд░ рд░реБрддреЛрдХреЗрди рдПрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрд╕реНрдЯреНрд░рд╛ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдХреА рдЕрдШреЛрд╖рд┐рдд рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдХрдореА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред NDV 3, рдФрд░ Rutoken EDS рдХреЗ рд▓рд┐рдП NDV 4 рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЧреЛрдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, "C" рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдЬрд╛рдирдХрд╛рд░реА рддрдХред

рдереЛрдбрд╝рд╛ рдЗрддрд┐рд╣рд╛рд╕


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

PAM рд╕рдВрд░рдЪрдирд╛


рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ "PAM рдореЙрдбреНрдпреВрд▓" рдХреНрдпрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рд╡реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдСрдкрд░реЗрд╢рди рд╣реИрдВрдбрд▓рд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ PAM рдЦреБрдж рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ pam_unix рдореЙрдбреНрдпреВрд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

рдиреАрдЪреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд▓реЛрдХрди рд╣реИ рдХрд┐ PAM рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

PAM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
  1. рдЖрд╡реЗрджрди PAM рдкреБрд╕реНрддрдХрд╛рд▓рдп (libpam.so) рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ
  2. рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ PAM рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ
  3. рдореЙрдбреНрдпреВрд▓ рдЙрдиреНрд╣реЗрдВ рд╕реМрдВрдкреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ
  4. рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЖрд╡реЗрджрди рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред

рдмреЗрд╢рдХ, 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 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЙрдЧрд┐рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдореВрд░реНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рджреЗрдЦреЗрдВред
 # PAM configuration for login auth requisite pam_securetty.so auth required pam_nologin.so auth required pam_env.so auth required pam_unix.so nullok account required pam_unix.so session required pam_unix.so session optional pam_lastlog.so password required pam_unix.so nullok obscure min=4 max=8 

рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ
 < > < > <  > <> 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдвреЗрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддрд╛ рд╣реИред PAM рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд┐рдпрдВрддреНрд░рдг рдзреНрд╡рдЬ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдСрдкрд░реЗрд╢рди рдХреА рд╕рдлрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЧрдИ рд╣реИрдВ:

рдореЙрдбреНрдпреВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ / usr / share / pam-configs / <рдореЙрдбреНрдпреВрд▓ рдирд╛рдо> рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреВрд░реНрдг рдирд╛рдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реЛ, рдореЙрдбреНрдпреВрд▓ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреИрд░рд╛рдореАрдЯрд░ред

PAM рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╡рд┐рдХрд╛рд╕


рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣рдо pam_p11 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрди рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрддреЗ рд╕рдордп рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

pam_p11

рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдЕрд╕рдордорд┐рдд рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдорд╛рд░реНрдЯ рдХрд╛рд░реНрдб рдпрд╛ рдпреВрдПрд╕рдмреА рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рджреЛ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░реНрдп рдХреА рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ
  2. PAM рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд┐рди рдХреЛрдб рдорд╛рдВрдЧрд╛ рдЬрд╛рддрд╛ рд╣реИ
  3. рдпрджрд┐ рдЯреЛрдХрди рдкрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдлрд▓ рдерд╛, рддреЛ рдЯреЛрдХрди рд╕реЗ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реНрд╡рдпрдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  4. рдкреНрд░рд╛рдкреНрдд рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрджрд┐, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рд╕рдлрд▓ рд░рд╣рд╛, рддреЛ рдореЙрдбреНрдпреВрд▓ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
рдЗрд╕ рдпреЛрдЬрдирд╛ рдореЗрдВ, 2048-рдмрд┐рдЯ рдЖрд░рдПрд╕рдП рдХреБрдВрдЬреА рдЬреЛрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЯреЛрдХрди рдкрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░-рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдХрд╛рд╕

рдореЙрдбреНрдпреВрд▓ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, PAM рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:

рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ 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); 

рдпрд╣рд╛рдБ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ:

рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рдореНрди рдорд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░, рд╣рдо рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PKCS # 11 API рдФрд░ OpenSSL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП libp11 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрди рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 int i, rv; const char *user; //   char *password; //    char password_prompt[64]; //    ,   //  PAM struct pam_conv *conv; //   PAM struct pam_message msg; //   PAM struct pam_message *(msgp[1]); struct pam_response *resp; //  PAM //  lib_p11: PKCS11_CTX *ctx; //  PKCS#11 PKCS11_SLOT *slot, *slots; //  PKCS11_CERT *certs; //  unsigned int nslots, ncerts; PKCS11_KEY *authkey; //   PKCS11_CERT *authcert; //  EVP_PKEY *pubkey; //   OpenSSL    unsigned char rand_bytes[RANDOM_SIZE]; unsigned char signature[MAX_SIGSIZE]; int fd; unsigned siglen; 

рдпрджрд┐ рд╣рдо 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; } //     PKCS#11 rv = PKCS11_enumerate_slots(ctx, &slots, &nslots); if (rv) { pam_syslog(pamh, LOG_ERR, "listing slots failed"); return PAM_AUTHINFO_UNAVAIL; } //      slot = PKCS11_find_token(ctx, slots, nslots); if (!slot || !slot->token) { pam_syslog(pamh, LOG_ERR, "no token available"); rv = PAM_AUTHINFO_UNAVAIL; goto out; } //     rv = PKCS11_enumerate_certs(slot->token, &certs, &ncerts); if (rv) { pam_syslog(pamh, LOG_ERR, "PKCS11_enumerate_certs failed"); rv = PAM_AUTHINFO_UNAVAIL; goto out; } if (ncerts <= 0) { pam_syslog(pamh, LOG_ERR, "no certificates found"); rv = PAM_AUTHINFO_UNAVAIL; goto out; } 

рдЕрдм рдЯреЛрдХрди рдХреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ ~ / .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) { /* this is not the cert we are looking for */ authcert = NULL; } else { break; } } } if (!authcert) { pam_syslog(pamh, LOG_ERR, "no matching certificates found"); rv = PAM_AUTHINFO_UNAVAIL; goto out; } 

рдФрд░ рдЕрдм рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ PAM рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдкрд┐рди рдХреЛрдб рд╣реЛрдЧрд╛), рдФрд░ рдлрд┐рд░ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░реЗрдВ
 //   ,    PAM      rv = pam_get_item(pamh, PAM_AUTHTOK, (void *)&password); if (rv == PAM_SUCCESS && password) { password = strdup(password); } else { //    ,      sprintf(password_prompt, "Password for token %.32s: ", slot->token->label); //    PAM:     "" msg.msg_style = PAM_PROMPT_ECHO_OFF; msg.msg = password_prompt; //      PAM rv = pam_get_item(pamh, PAM_CONV, (const void **)&conv); if (rv != PAM_SUCCESS) { rv = PAM_AUTHINFO_UNAVAIL; goto out; } if ((conv == NULL) || (conv->conv == NULL)) { rv = PAM_AUTHINFO_UNAVAIL; goto out; } //   ,      resp rv = conv->conv(1, (const struct pam_message **)msgp, &resp, conv->appdata_ptr); if (rv != PAM_SUCCESS) { rv = PAM_AUTHINFO_UNAVAIL; goto out; } if ((resp == NULL) || (resp[0].resp == NULL)) { rv = PAM_AUTHINFO_UNAVAIL; goto out; } //       password = strdup(resp[0].resp); memset(resp[0].resp, 0, strlen(resp[0].resp)); free(&resp[0]); } 

рдЕрдм рд╣рдо рдЯреЛрдХрди рдкрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 rv = PKCS11_login(slot, 0, password); //    ,    memset(password, 0, strlen(password)); free(password); if (rv != 0) { pam_syslog(pamh, LOG_ERR, "PKCS11_login failed"); rv = PAM_AUTHINFO_UNAVAIL; goto out; } 

рдпрд╣ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдм рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЯреЛрдХрди рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЗ рдкрд╛рд╕ рдирд┐рдЬреА рдХреБрдВрдЬреА рд╣реИ рдпрд╛ рдирд╣реАрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдордирдорд╛рдирд╛ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВред
рдкрд╣рд▓реЗ, рджреЗрд╡ / рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реЗ 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); 

рддрдм рд╣рдореЗрдВ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рдЕрдиреБрд░реВрдк рдирд┐рдЬреА рдХреБрдВрдЬреА рдорд┐рд▓рддреА рд╣реИ рдФрд░ рдЙрд╕ рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рддреЗ рд╣реИрдВ
 //      authkey = PKCS11_find_key(authcert); if (!authkey) { pam_syslog(pamh, LOG_ERR, "no key matching certificate available"); rv = PAM_AUTHINFO_UNAVAIL; goto out; } //    siglen = MAX_SIGSIZE; rv = PKCS11_sign(NID_sha1, rand_bytes, RANDOM_SIZE, signature, &siglen, authkey); if (rv != 1) { pam_syslog(pamh, LOG_ERR, "fatal: pkcs11_sign failed\n"); rv = PAM_AUTHINFO_UNAVAIL; goto out; } 

рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ, рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдорд┐рд▓ рдЬрд╛рдПрдЧреА, рдФрд░ рдлрд┐рд░ рд╣рдо рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ
 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; } //      OpenSSL rv = RSA_verify(NID_sha1, rand_bytes, RANDOM_SIZE, signature, siglen, pubkey->pkey.rsa); if (rv != 1) { pam_syslog(pamh, LOG_ERR, "fatal: RSA_verify failed\n"); 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛрдиреЛрдВ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡рд┐рддрд░рдг рдХрд┐рдЯ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рддрд░рд┐рдд рдкреИрдХреЗрдЬ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП:

рд░реБрддреЛрдХреЗрди рдПрд╕ рдХреЗ рд▓рд┐рдП


рд░реБрддреЛрдХреЗрди рдХреЗ рд▓рд┐рдП рдИ.рдбреА.рдПрд╕.


рдУрдкрдирд╕реА рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдкреИрдХреЗрдЬреЛрдВ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдбреЗрдмрд┐рдпрди рдирд┐рдЪреЛрдбрд╝ рднрдВрдбрд╛рд░ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдХреЗрдЬ рд▓рд┐рдП рдЧрдП:

PAM рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЗрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ

рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЧрдП рдереЗ:

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 рдХреЗ рддрдВрддреНрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдореЗрдВ рдирд╣реАрдВред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдкреАрдПрдПрдо рд╕рдВрд╡рд╛рдж рддрдВрддреНрд░, рдкреАрдПрдПрдо рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдФрд░ рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рдХреБрдЫ рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдкрдиреЗ рдЖрдк рд╕реЗ, рд╡реЗ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирдП рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рдЪрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдЖрдзреБрдирд┐рдХ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In144700/


All Articles