рдордВрдЪ рдкрд░ рдлрд┐рд░ рд╕реЗ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд╡рд┐рдЬреЗрддрд╛ рдПрд╕рдПрд╕рдПрдЪ рдФрд░ рд╕реБрдбреЛред рд╕рдореНрдорд╛рдирд┐рдд рдХрдВрдбрдХреНрдЯрд░ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдореЗрдВ

рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, sudo рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ /etc/sudoers.d рдФрд░ visudo рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдирд┐рдпрдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ ~ / .ssh / рдЕрдзрд┐рдХреГрдд_рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдореБрдЦ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде, рдЗрди рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдХреЗрдВрджреНрд░реАрдп рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред рдЖрдЬ рддрдХ, рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

  • рд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА - рдмрд╛рд╡рд░реНрдЪреА , рдХрдардкреБрддрд▓реА , Ansible , рдирдордХ
  • рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ + sssd
  • рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд╕рдВрдкрд╛рджрди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХреГрддрд┐рдпрд╛рдБ

рдореЗрд░реЗ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд░рд╛рдп рдореЗрдВ, рдХреЗрдВрджреНрд░реАрдХреГрдд рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдЕрднреА рднреА рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ + sssd рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рдн рд╣реИрдВ:

  • рд╕рдЪрдореБрдЪ рдПрдХ рдХреЗрдВрджреНрд░реАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ред
  • Sudo рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд┐рддрд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
  • рд╡рд┐рднрд┐рдиреНрди рд▓рд┐рдирдХреНрд╕-рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдУрдПрд╕ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдЬ рдХрд╛ рд╕реБрдЗрдЯ рдПрдХ рд╣реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ sudo рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдФрд░ ssh рдХреАрдЬрд╝ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Active Directory + sssd рдмрдВрдбрд▓ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реЛрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рд╢реНрд░реЛрддрд╛рдУрдВ рдиреЗ рддрдирд╛рд╡рдкреВрд░реНрдг рдореМрди рдореЗрдВ рднрдЯрдХрддреЗ рд╣реБрдП, рдХрдВрдбрдХреНрдЯрд░ рдиреЗ рдЕрдкрдиреА рдЫрдбрд╝реА рдЙрдард╛рдИ, рдСрд░реНрдХреЗрд╕реНрдЯреНрд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ред
рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВред

рджрд┐рдП рдЧрдП:

  • Windows Server 2012 R2 рдкрд░ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдбреЛрдореЗрди testopf.local ред
  • Linux рд╣реЛрд╕реНрдЯ Centos 7 рдЪрд▓ рд░рд╣рд╛ рд╣реИ
  • Sssd рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдзрд┐рдХреГрдд рд╡рд┐рдиреНрдпрд╛рд╕

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

рдЪрд░рдг 1: рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ sudo рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрдиред


рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реНрдХреАрдорд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдЖрдкрдХреЛ рдирд╡реАрдирддрдо sudo рд░рд┐рд▓реАрдЬрд╝ - 1.8.27 рдЖрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдирдкреИрдХ рдХрд░реЗрдВ, рдбреЛрдореЗрди рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ ./doc рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕реНрдХреАрдорд╛.рдПрдХреНрдЯрд┐рд╡рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБред рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ, рдЬрд╣рд╛рдБ рдЖрдкрдиреЗ рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдереА, рдЪрд▓рд╛рдПрдБ:

ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(рдЕрдкрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рди рднреВрд▓реЗрдВ)

Adsiedit.msc рдЦреЛрд▓реЗрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрджрд░реНрдн рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:

рдбреЛрдореЗрди рдХреЗ рдореВрд▓ рдореЗрдВ, рдПрдХ sudoers рдпреВрдирд┐рдЯ рдмрдирд╛рдПрдВред (рдмреБрд░реНрдЬреБрдЖ рд╣рдареАрд▓реА рддрд░реНрдХ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЗрд╕ рдЙрдкрдЦрдВрдб рдореЗрдВ рд╣реИ рдХрд┐ sssd рдбреЗрдореЛрди рд╕реБрдбреЛрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рд╕реНрддреГрдд рдбрд┐рдмрдЧ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдФрд░ рд▓реЙрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЦреЛрдЬ рдХреИрдЯрд▓реЙрдЧ рдЯреНрд░реА рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЧрдИ рд╣реИред)

рдпреВрдирд┐рдЯ рдореЗрдВ рдкрд╣рд▓рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдЬреЛ рдХрд┐ sudoRole рд╡рд░реНрдЧ рдХрд╛ рд╣реИред рдирд╛рдо рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рд╕реНрдХреАрдорд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ, рдореБрдЦреНрдп рд╣реИрдВ:

  • sudoCommand - рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣реЛрд╕реНрдЯ рдкрд░ рдХрд┐рди рдХрдорд╛рдВрдбреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред
  • sudoHost - рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднреВрдорд┐рдХрд╛ рдХрд┐рд╕ рд╣реЛрд╕реНрдЯ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕рднреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдирд╛рдо рд╕реЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдПред рдорд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред
  • sudoUser - рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ sudo рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред
    рдпрджрд┐ рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рддреЛ рдирд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ "%" рдЪрд┐рд╣реНрди рдЬреЛрдбрд╝реЗрдВред рдпрджрд┐ рд╕рдореВрд╣ рдХреЗ рдирд╛рдо рдореЗрдВ рд╕реНрдерд╛рди рд╣реИрдВ, рддреЛ рдЪрд┐рдВрддрд╛ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рд▓реЙрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, sssd рддрдВрддреНрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рдЪрд┐рддреНрд░ 1. рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдореВрд▓ рдореЗрдВ sudoers рдЗрдХрд╛рдИ рдореЗрдВ sudoRole рдСрдмреНрдЬреЗрдХреНрдЯ


рдЪрд┐рддреНрд░рд╛ 2. sudoRole рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдиреНрдпрд╛рд╕ рд▓рд┐рдирдХреНрд╕ рдкрдХреНрд╖ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

/Etc/nsswitch.conf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ:

 sudoers: files sss 

[Sssd] рдЕрдиреБрднрд╛рдЧ рдореЗрдВ /etc/sssd/sssd.conf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ sudo рдЬреЛрдбрд╝реЗрдВ

 cat /etc/sssd/sssd.conf | grep services services = nss, pam, sudo 

рд╕рднреА рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ sssd рдбреЗрдореЙрди рдХреИрд╢ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдСрдЯреЛрдореИрдЯрд┐рдХ рдЕрдкрдбреЗрдЯ рд╣рд░ 6 рдШрдВрдЯреЗ рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо рдЕрднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЗрддрдирд╛ рдЗрдВрддрдЬрд╛рд░ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

 sss_cache -E 

рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╢ рдХреНрд▓рд┐рдпрд░ рдХрд░рдиреЗ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред рдлрд┐рд░ рд╣рдо рд╕реЗрд╡рд╛ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ, рдЖрдзрд╛рд░ рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВ, рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

 service sssd stop rm -rf /var/lib/sss/db/* service sssd start 

рд╣рдо рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рддрд╣рдд рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ sudo рдХреЗ рддрд╣рдд рдЙрдкрд▓рдмреНрдз рд╣реИ:

 su user1 [user1@testsshad log]$ id uid=1109801141(user1) gid=1109800513(domain users) groups=1109800513(domain users),1109801132(admins_) [user1@testsshad log]$ sudo -l [sudo] password for user1: Matching Defaults entries for user1 on testsshad: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User user1 may run the following commands on testsshad: (root) /usr/bin/ls, /usr/bin/cat 

рд╣рдо рдЕрдкрдиреЗ рджреВрд╕рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ:

 su user2 [user2@testsshad log]$ id uid=1109801142(user2) gid=1109800513(domain users) groups=1109800513(domain users),1109801138(sudo_root) [user2@testsshad log]$ sudo -l Matching Defaults entries for user2 on testsshad: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User user2 may run the following commands on testsshad: (root) ALL 

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реВрдбреЛ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЛ рдХреЗрдВрджреНрд░реАрдп рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ ssh рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рднрдВрдбрд╛рд░рдг рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рд╕реНрдХреАрдо рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде, рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ ssh рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдирдХреНрд╕ рдореЗрдЬрдмрд╛рдиреЛрдВ рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

Sssd рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

PowerShell рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВред

AddsshPublicKeyAttribute.ps1
рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛- {
$ рдЙрдкрд╕рд░реНрдЧ = "1.2.840.113556.1.8000.2554"
$ GUID = [System.Guid] :: NewGuid ()ред ToString ()
$ рдкрд╛рд░реНрдЯреНрд╕ = @ ()
$ рдкрд╛рд░реНрдЯреНрд╕ + = [UInt64] :: рдкрд╛рд░реНрд╕ ($ рдЧрд╛рдЗрдбред рд╕реНрдЯрдмрд╕реНрдЯреНрд░рд┐рдВрдЧ (0.4), "AllowHexSpecifier")
$ рдкрд╛рд░реНрдЯреНрд╕ + = [UInt64] :: Parse ($ рдЧрд╛рдЗрдбред SubString (4,4), "AllowHexSpifier")
$ рдкрд╛рд░реНрдЯреНрд╕ + = [UInt64] :: Parse ($ рдЧрд╛рдЗрдбред SubString (9,4), "AllowHexSpifier"))
$ рдкрд╛рд░реНрдЯреНрд╕ + = [UInt64] :: Parse ($ рдЧрд╛рдЗрдбред SubString (14,4), "AllowHexSpifier")
$ рдкрд╛рд░реНрдЯреНрд╕ + = [UInt64] :: Parse ($ рдЧрд╛рдЗрдбред SubString (19,4), "AllowHexSpifier")
$ рдкрд╛рд░реНрдЯреНрд╕ + = [UInt64] :: Parse ($ рдЧрд╛рдЗрдбред SubString (24.6), "AllowHexSpifier")
$ рдкрд╛рд░реНрдЯреНрд╕ + = [UInt64] :: Parse ($ рдЧрд╛рдЗрдбред SubString (30.6), "AllowHexSpifier")
$ oid = [рд╕реНрдЯреНрд░рд┐рдВрдЧ] :: рдкреНрд░рд╛рд░реВрдк ("{0}ред {1}ред {2}ред {3} {{4}} {5}ред {6}ред {7}", $ рдЙрдкрд╕рд░реНрдЧ, $ рднрд╛рдЧреЛрдВ]ред 0]
$ рдкрд╛рд░реНрдЯреНрд╕ [1], $ рдкрд╛рд░реНрдЯреНрд╕ [2], $ рдкрд╛рд░реНрдЯреНрд╕ [3], $ рдкрд╛рд░реНрдЯреНрд╕ [4], $ рдкрд╛рд░реНрдЯреНрд╕ [5], $ рдкрд╛рд░реНрдЯреНрд╕ [6])
$ рдУрдпрдб
}
$ рд╕реНрдХреАрдорд╛рдкрде = (рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ- ADRootDSE) .schemaNamingContext
$ oid = рдирдИ-рд╡рд┐рд╢реЗрд╖рддрд╛
$ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ = @ {
lDAPDisplayName = 'sshPublicKey';
рд╡рд┐рд╢реЗрд╖рддрд╛ = $ рдУрдЖрдИрдбреА;
oMSyntax = 22;
рдПрдЯреНрд░реАрд╕рд╛рдЗрдВрд╕реИрдХреНрд╕ = "2.5.5.5";
isSleleValued = $ true;
adminDescription = 'SSH рд▓реЙрдЧрд┐рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА';
}

рдирдИ-ADObject -рдирд╛рдо sshPublicKey -Type рд╡рд┐рд╢реЗрд╖рддрд╛Schema -Path $ schemapath -OtherAttributes $ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
$ userSchema = get-adobject -SearchBase $ schemapath -Filter 'name -eq "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛"
$ userSchema | рд╕реЗрдЯ-ADObject -Add @ {mayContain = 'sshPublicKey'}

рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдбреЛрдореЗрди рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред
рд╣рдо рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рд╣рдо ssh рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬреЛрдбрд╝реА рдмрдирд╛рддреЗ рд╣реИрдВред

рдкреБрдЯреНрдЯреАрдЬреЗрди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ, "рдЬреЗрдирд░реЗрдЯ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдЦрд╛рд▓реА рдХреНрд╖реЗрддреНрд░ рдХреЗ рднреАрддрд░ рдорд╛рдЙрд╕ рдкрд░ рдлреНрд░рд┐рдХ рдХрд░реЗрдВред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рд╣рдо рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЛ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ " OpenSSH рдЕрдзрд┐рдХреГрдд_рдХреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЪрд┐рдкрдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА: " рд╡рд┐рдВрдбреЛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред



рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВред

рд╡рд┐рдХрд▓реНрдк 1 - GUI:



рд╡рд┐рдХрд▓реНрдк 2 - рдкреЙрд╡рд░рд╢реЗрд▓:

get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}

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

 cat /usr/local/bin/fetchSSHKeysFromLDAP #!/bin/sh ldapsearch -h testmdt.testopf.local -xb "dc=testopf,dc=local" '(sAMAccountName='"${1%@*}"')' -D Administrator@testopf.local -w superSecretPassword 'sshPublicKey' | sed -n '/^ /{H;d};/sshPublicKey:/x;$g;s/\n *//g;s/sshPublicKey: //gp' 

рд╣рдордиреЗ рдЗрд╕ рдкрд░ рд░реВрдЯ рдХреЗ рд▓рд┐рдП 0500 рдЕрдиреБрдорддрд┐рдпрд╛рдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рд╣реИрдВред

 chmod 0500 /usr/local/bin/fetchSSHKeysFromLDAP 

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

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдкрдиреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдХреНрд╖рдг рд╕реЗ рдмрд╣реБрдд рднреНрд░рдорд┐рдд рдерд╛, рдЕрдзрд┐рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрджред

рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд▓реНрдк:

  • рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрд╡ рдХрд░рддрд╛ рд╣реВрдБ:

     echo -n Supersecretpassword > /usr/local/etc/secretpass 
  • рдореИрдВрдиреЗ рд░реВрдЯ рдХреЗ рд▓рд┐рдП 0500 рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХреА рд╣реИрдВ

     chmod 0500 /usr/local/etc/secretpass 
  • рдореИрдВ ldapsearch рдХреЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓рддрд╛ рд╣реВрдВ: -w рд╕реБрдкрд░рд╕рд┐рдЯреНрд░реЗрд╕реЗрдкрд╛рд╕рд╡рд░реНрдб рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ -y / usr / рд▓реЛрдХрд▓ / рдЖрджрд┐ / рдЧреБрдкреНрддрдкрд╛рд╕ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдЖрдЬ рдХреЗ рд╕реБрдЗрдЯ рдореЗрдВ рдЕрдВрддрд┐рдо рд░рд╛рдЧ sshd_config рдХрд╛ рд╕рдВрдкрд╛рджрди рдХрд░ рд░рд╣рд╛ рд╣реИ

 cat /etc/ssh/sshd_config | egrep -v -E "#|^$" | grep -E "AuthorizedKeysCommand|PubkeyAuthe" PubkeyAuthentication yes AuthorizedKeysCommand /usr/local/bin/fetchSSHKeysFromLDAP AuthorizedKeysCommandUser root 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ ssh рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдореБрдЦреНрдп рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрдХреНрд░рдо рдорд┐рд▓рддрд╛ рд╣реИ:

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред
  2. Sshd рдбреЗрдореЙрди, рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рдорд╛рди рдЦреАрдВрдЪрддрд╛ рд╣реИ рдФрд░ рдХреБрдВрдЬреА рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рддрд╛ рд╣реИред
  3. Sssd рдбреЗрдорди рдЖрдЧреЗ рд╕рдореВрд╣ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЪреЗрддрд╛рд╡рдиреА! рдпрджрд┐ рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рднреА рдбреЛрдореЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд╣реЛрд╕реНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдЧреАред
  4. рдЬрдм sudo рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, sssd рдбреЗрдорди рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЦреЛрдЬрддрд╛ рд╣реИред рдпрджрд┐ рднреВрдорд┐рдХрд╛рдПрдБ рд╣реИрдВ, рддреЛ рд╕рдореВрд╣ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рджрд╕реНрдпрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ (рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП sudoRoles рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)

рдкрд░рд┐рдгрд╛рдо


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЪрд╛рдмрд┐рдпрд╛рдБ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ, sudo рдЕрдиреБрдорддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ - рдЗрд╕реА рддрд░рд╣, рд╕рдХреНрд░рд┐рдп рдЦрд╛рддреЛрдВ рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдХреЗ рдбреЛрдореЗрди рдЦрд╛рддреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдирдХреНрд╕ рд╣реЛрд╕реНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред

рдХрдВрдбрдХреНрдЯрд░ рдХреА рдЫрдбрд╝реА рдХреА рдЕрдВрддрд┐рдо рд▓рд╣рд░ - рдФрд░ рд╣реЙрд▓ рдЪреБрдкреНрдкреА рдореЗрдВ рдЬрдорд╛ рджреЗрддрд╛ рд╣реИред

рд▓реЗрдЦрди рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╕рдВрд╕рд╛рдзрди:

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


All Articles