Kubernetes рдореЗрдВ Seccomp: 7 рдЪреАрдЬреЗрдВ рдЬреЛ рдЖрдкрдХреЛ рд╢реБрд░реБрдЖрдд рд╕реЗ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИрдВ

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



рдпрд╣ рд▓реЗрдЦ рдЬрд╛рджреВ рдФрд░ рдЬрд╛рджреВ рдЯреЛрдирд╛ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ SecDevOps рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рд╕реЗрдХрдВрдб рдкреНрд░реЛрдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдореИрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ seccomp рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдФрд░ рдЖрдВрддрд░рд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред

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

рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реИ? рдПрдХ рдХрдВрдЯреЗрдирд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╢реАрди рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдФрд░ рдпрд╣ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХрдВрдЯреЗрдирд░ рдХреЛрдИ рднреА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдмрд╣реБрдд рдЬрд▓реНрдж рдорд╛рд▓рд╡реЗрдпрд░ рдЗрд╕рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдХрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрд▓рдЧрд╛рд╡ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛: рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдЬрд╛рдирдХрд╛рд░реА, рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдирд╛ рдЖрджрд┐ред

Seccomp рдкреНрд░реЛрдлрд╛рдЗрд▓ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЙрд╕реЗ рдЕрд╕реНрд╡реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо рд▓реЙрдиреНрдЪ рдХреЗ рджреМрд░рд╛рди рдЙрдиреНрд╣реЗрдВ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдХрд░реНрдиреЗрд▓ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХреЗред рдРрд╕реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЛ рд╣рдорд▓реЗ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреНрд╖рддрд┐ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо (рдпрд╛рдиреА, рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ, рдпрд╛ рдЙрдирдХреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ) рдРрд╕рд╛ рдХрд░рдиреЗ рд▓рдЧрддреА рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

рдореВрд▓ рдмрд╛рддреЗрдВ рд╕рдордЭрдирд╛


Seccomp рдмреЗрд╕ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рддреАрди рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: defaultAction , architectures (рдпрд╛ archMap ) рдФрд░ syscalls :

 { "defaultAction": "SCMP_ACT_ERRNO", "architectures": [ "SCMP_ARCH_X86_64", "SCMP_ARCH_X86", "SCMP_ARCH_X32" ], "syscalls": [ { "names": [ "arch_prctl", "sched_yield", "futex", "write", "mmap", "exit_group", "madvise", "rt_sigprocmask", "getpid", "gettid", "tgkill", "rt_sigaction", "read", "getpgrp" ], "action": "SCMP_ACT_ALLOW" } ] } 

( рдордзреНрдпрдо-рдореВрд▓- seccomp.json )

defaultAction syscalls рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рд╕реА рднреА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднрд╛рдЧреНрдп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдореБрдЦреНрдп рдореВрд▓реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

  • SCMP_ACT_ERRNO - рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ,
  • SCMP_ACT_ALLOW - рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

architectures рдЕрдиреБрднрд╛рдЧ рд▓рдХреНрд╖реНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЪреВрдВрдХрд┐ рдХрд░реНрдиреЗрд▓ рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реНрд╡рдпрдВ, рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдЙрдирдХреЗ рдирд╛рдореЛрдВ рдкрд░ред рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо рдЙрдиреНрд╣реЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдореИрдк рдХрд░рддрд╛ рд╣реИред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЖрдИрдбреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, recvfrom рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ (рд╕реЙрдХреЗрдЯ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдореЗрдВ x64 рд╕рд┐рд╕реНрдЯрдо рдкрд░ ID = 64 рдФрд░ x86 рдкрд░ ID = 517 рд╣реИред рдпрд╣рд╛рдВ рдЖрдк x86-x64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреА рд╕реВрдЪреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

syscalls рдЕрдиреБрднрд╛рдЧ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк defaultAction рдкрд░ SCMP_ACT_ERRNO рдХреЛ рд╕реЗрдЯ рдХрд░рдХреЗ рдПрдХ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ syscalls рдХреЛ syscalls рдЕрдиреБрднрд╛рдЧ рдкрд░ рдХреЙрд▓ рдЕрд╕рд╛рдЗрди рдХрд░ SCMP_ACT_ALLOW ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдХреЗрд╡рд▓ syscalls рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХреЙрд▓ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ defaultAction рдорд╛рди рдФрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдм рдХреБрдЫ рд╢рдмреНрджреЛрдВ рдХреЛ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрддрдиреЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдиреАрдЪреЗ рджреА рдЧрдИ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЖрддреА рд╣реИрдВ рдХрд┐ рдЖрдк рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рддреИрдирд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╡реЗ рдХрдо рд╕реЗ рдХрдо рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред

1. AllowPrivilegeEscalation = false


рдХрдВрдЯреЗрдирд░ рдХреЗ securityContext рдореЗрдВ AllowPrivilegeEscalation рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдпрджрд┐ рдЗрд╕реЗ false рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ false , рддреЛ рдХрдВрдЯреЗрдирд░ no_new_priv рдмрд┐рдЯ рд╕реЗ ( on ) рд╕реЗрдЯ рд╣реЛ no_new_priv ред рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЕрд░реНрде рдирд╛рдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдпрд╣ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЙрди рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдкрд╛рд╕ рд╣реИред

true (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди) рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдПрдХ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдпрд╣ рд╣реИ рдХрд┐ рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ seccomp рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рд░рдирдЯрд╛рдЗрдо рдХреА рдЖрдВрддрд░рд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рд╕рдореВрд╣ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ, рдХреБрдЫ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ) рдХреЛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдХрдВрдЯреЗрдирд░ рдЬреЛ рдмреИрдВрдХреЛ echo hi рдХрд░рддрд╛ рд╣реИ рдЙрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

 { "defaultAction": "SCMP_ACT_ERRNO", "architectures": [ "SCMP_ARCH_X86_64", "SCMP_ARCH_X86", "SCMP_ARCH_X32" ], "syscalls": [ { "names": [ "arch_prctl", "brk", "capget", "capset", "chdir", "close", "execve", "exit_group", "fstat", "fstatfs", "futex", "getdents64", "getppid", "lstat", "mprotect", "nanosleep", "newfstatat", "openat", "prctl", "read", "rt_sigaction", "statfs", "setgid", "setgroups", "setuid", "stat", "uname", "write" ], "action": "SCMP_ACT_ALLOW" } ] } 

( рд╣рд╛рдп-рдкреЙрдб- seccomp.json )

... рдЗрдирдХреЗ рдмрдЬрд╛рдп:

 { "defaultAction": "SCMP_ACT_ERRNO", "architectures": [ "SCMP_ARCH_X86_64", "SCMP_ARCH_X86", "SCMP_ARCH_X32" ], "syscalls": [ { "names": [ "arch_prctl", "brk", "close", "execve", "exit_group", "futex", "mprotect", "nanosleep", "stat", "write" ], "action": "SCMP_ACT_ALLOW" } ] } 

( рд╣рд╛рдп-рдХрдВрдЯреЗрдирд░- seccomp.json )

рд▓реЗрдХрд┐рди рдлрд┐рд░, рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЛ capset (рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ): capset , set_tid_address , setgid , setgroups рдФрд░ setuid ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдард┐рдирд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╕реЗ рдЬрд┐рдирдХрд╛ рдЖрдк рдкрд░ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИ, рдЖрдк рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ рдмрд╛рдВрдзрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рджрд┐рди рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг (рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╛ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛, рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рджреНрд╡рд╛рд░рд╛) рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХрдВрдЯреЗрдирд░ рдЕрдЪрд╛рдирдХ рдмрдВрдж рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддреЗ рд╣реИрдВред

рдЯрд┐рдк # 1 : AllowPrivilegeEscaltion=false рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдПрдБред рдпрд╣ seccomp рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ рдФрд░ рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдХрдо рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдмрдирд╛ рджреЗрдЧрд╛ред

2. рдХрдВрдЯреЗрдирд░-рд╕реНрддрд░ рд╕реЗрдХрдВрдб рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛


Seccomp рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреЙрдб рд╕реНрддрд░ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 annotations: seccomp.security.alpha.kubernetes.io/pod: "localhost/profile.json" 

... рдпрд╛ рдХрдВрдЯреЗрдирд░ рд╕реНрддрд░ рдкрд░:

 annotations: container.security.alpha.kubernetes.io/<container-name>: "localhost/profile.json" 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реЗрдХреИрдо GA рд╣реЛ рдЬрд╛рдиреЗ рдкрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ (рдЕрдЧрд▓реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдпрд╣ рдШрдЯрдирд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ - 1.18 - рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рджред)ред

рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдПрдХ рдмрдЧ рд╣реЛрддрд╛ рдерд╛, рдЬрд┐рд╕рд╕реЗ рдкреЙрдЬ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕реЗрдХреНрдпреБрд▓рд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред рд░рдирдЯрд╛рдЗрдо рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕ рдЦрд╛рдореА рдХреА рднрд░рдкрд╛рдИ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдВрдЯреЗрдирд░ рдлрд▓реА рд╕реЗ рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдирдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрдВрдЯреЗрдирд░ рд╣рдореЗрд╢рд╛ AllowPrivilegeEscalation=true рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ AllowPrivilegeEscalation=true , рдЬрд┐рд╕рд╕реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл 1 рдореЗрдВ AllowPrivilegeEscalation=true рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг AllowPrivilegeEscalation=true , рдФрд░ рдЗрд╕реЗ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред

рдХрдВрдЯреЗрдирд░ рд╕реНрддрд░ рдкрд░ seccomp рдкреНрд░реЛрдлрд╛рдЗрд▓ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЗрд╕ рдЬрд╛рд▓ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдРрд╕рд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП "рд╢рд╛рд░реНрдк" рд╣реЛрдЧрд╛ред рдпрд╣ рддрдм рддрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдмрдЧ рдХреЛ рдареАрдХ рди рдХрд░реЗрдВ рдФрд░ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг (рд╢рд╛рдпрдж 1.18?) рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рдПред

рдЯрд┐рдк # 2 : рдХрдВрдЯреЗрдирд░ рд╕реНрддрд░ рдкрд░ seccomp рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕реЗрдЯ рдХрд░реЗрдВред

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрд░реНрде рдореЗрдВ, рдпрд╣ рдирд┐рдпрдо рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЙрддреНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ: "рдореЗрд░реА рд╕реЗрдХрдВрдб рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдбреЙрдХ docker run рд╕рд╛рде рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИ?"

3. рдПрдХ рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рд░рдирдЯрд╛рдЗрдо / рдбрд┐рдлреЙрд▓реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: runtime/default рдФрд░ docker/default ред рджреЛрдиреЛрдВ рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рди рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ред рдЗрд╕рд▓рд┐рдП, рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд░рдирдЯрд╛рдЗрдо рдФрд░ рдЗрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

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

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ 1.11 рдХреЗ рдмрд╛рдж рд╕реЗ рдбреЙрдХрдЯрд░ docker/default рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, runtime/default рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЙрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреА рдорд╢реАрдиреЛрдВ рдкрд░ docker run рдЬреБрдбрд╝реЗ рдЬреЛрдЦрд┐рдореЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╣рдо рдХреБрдмреЗрд░рдиреЗрдЯ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдпрд╣ рджрд╛рд╡рд╛ рдХрд░рдиреЗ рдХреА рд╣рд┐рдореНрдордд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдРрд╕реА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдмрд╣реБрдд рдЦреБрд▓реА рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ (рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ) рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЯрд┐рдк # 3 : рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЗрдХрдВрдб рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕реЗ рдирд┐рдкрдЯреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЙрдиреНрдирдд рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЧреЛрд▓рд╛рдВрдЧ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдкреАрдЖрдИ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рд░рдирдЯрд╛рдЗрдо / рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ SecDevOps рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ secccomp рдкреНрд░реЛрдлрд╛рдЗрд▓ рддреИрдпрд╛рд░ рдХрд░реЗрдВ, рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдмрд╣рд╛рдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

4. рдЕрдкреБрд╖реНрдЯ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ


рдкрд╣рд▓реЗ рдХреБрдмреЗрд░рдиреЗрдЯ рд╕реБрд░рдХреНрд╖рд╛ рдСрдбрд┐рдЯ рд╕реЗ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕реЗрдХреНрдпреБрд▓рдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рдерд╛ ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ PodSecurityPolicy рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛, рддреЛ рд╕рднреА рдкреЙрдбреНрд╕ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП seccomp рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, seccomp=unconfined рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

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

рдЯрд┐рдк # 4 : рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХреЛрдИ рднреА рдХрдВрдЯреЗрдирд░ seccomp=unconfined рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВред

5. "рдСрдбрд┐рдЯ рдореЛрдб"


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

рдпрд╣ рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ seccomp рдкреНрд░реЛрдлрд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рдерд╛ рдФрд░ рдпрд╣ рдХрд╛рдлреА рд╣рдж рддрдХ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЖрд╡реЗрджрди рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИред

рд▓рд┐рдирдХреНрд╕ 4.14 рдХрд░реНрдиреЗрд▓ рдХреЗ рдЖрдЧрдорди рдХреЗ рдмрд╛рдж, рдСрдбрд┐рдЯ рдореЛрдб рдореЗрдВ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛, рд╕рд┐рд╕рд▓реЙрдЧ рдореЗрдВ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХреА, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЖрдк SCMT_ACT_LOG рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдореЛрдб рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

SCMP_ACT_LOG : seccomp рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдб рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдпрд╣ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗ рдХрд┐рд╕реА рдирд┐рдпрдо рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд▓реЙрдЧ рдХреА рдЬрд╛рдПрдЧреАред

рдпрд╣рд╛рдБ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдореВрдирд╛ рд░рдгрдиреАрддрд┐ рд╣реИ:

  1. рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдорддрд┐ рджреЗрдВред
  2. рдмреНрд▓реЙрдХ рдХреЙрд▓ рд╕рд┐рд╕реНрдЯрдо рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
  3. рд▓реЙрдЧ рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВред

рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 { "defaultAction": "SCMP_ACT_LOG", "architectures": [ "SCMP_ARCH_X86_64", "SCMP_ARCH_X86", "SCMP_ARCH_X32" ], "syscalls": [ { "names": [ "arch_prctl", "sched_yield", "futex", "write", "mmap", "exit_group", "madvise", "rt_sigprocmask", "getpid", "gettid", "tgkill", "rt_sigaction", "read", "getpgrp" ], "action": "SCMP_ACT_ALLOW" }, { "names": [ "add_key", "keyctl", "ptrace" ], "action": "SCMP_ACT_ERRNO" } ] } 

( рдордзреНрдпрдо-рдорд┐рд╢реНрд░рд┐рдд- seccomp.json )

рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдХреЙрд▓ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдкреНрд░рдпреБрдХреНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЬреЛ рд╕рдВрднрд╡рддрдГ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддреА рд╣реИрдВред рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЖрдзрд╛рд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рд╣реИ ред рдпрд╣ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрд╡рд░реБрджреНрдз рд╣реИрдВ рдФрд░ рдХреНрдпреЛрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдХреИрдЪ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ SCMT_ACT_LOG 2017 рдХреЗ рдЕрдВрдд рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд SCMT_ACT_LOG , рдпрд╣ рдХреЗрд╡рд▓ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓рд┐рдирдХреНрд╕ 4.14 рдХрд░реНрдиреЗрд▓ рдФрд░ рд░рдирдХ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ v1.0.0-рдЖрд░рд╕реА 9 рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реИред

рдЯрд┐рдк # 5 : рдЖрдк рдмреНрд▓реИрдХ рдПрдВрдб рд╡реНрд╣рд╛рдЗрдЯ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдбрд┐рдЯ рдореЛрдб рдкреНрд░реЛрдлрд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

6. рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ


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

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

рдЧреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЯреВрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд┐рдП рдЧрдП рд╕рднреА рдХреЙрд▓ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП:

 package main import "fmt" func main() { fmt.Println("test") } 

... рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛рдПрдВ:

 go install https://github.com/pjbgf/gosystract gosystract --template='{{- range . }}{{printf "\"%s\",\n" .Name}}{{- end}}' application-path 

... рдФрд░ рдирд┐рдореНрди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

 "sched_yield", "futex", "write", "mmap", "exit_group", "madvise", "rt_sigprocmask", "getpid", "gettid", "tgkill", "rt_sigaction", "read", "getpgrp", "arch_prctl", 

рдЕрдм рддрдХ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ - рдЙрдкрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдЖрдЧреЗ рд╣реЛрдЧрд╛ред

рдЯрд┐рдк # 6 : рдХреЗрд╡рд▓ рдЙрди рдХреЙрд▓ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдХреА рд╕рднреА рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВред

7. рдиреАрдВрд╡ рд░рдЦрдирд╛ (рдпрд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдирд╛)


рдХрд░реНрдиреЗрд▓ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдЧрд╛, рдЪрд╛рд╣реЗ рдЖрдкрдиреЗ рдЙрд╕рдореЗрдВ рдЬреЛ рднреА рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реЛред рднрд▓реЗ рд╣реА рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк exit рдпрд╛ exit_group рдЬреИрд╕реА рдХреЙрд▓реНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ exit_group , рддреЛ рдХрдВрдЯреЗрдирд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ рдФрд░ echo hi рдЬреИрд╕реА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдорд╛рдВрдб рднреА рдЗрд╕реЗ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ echo hi ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдкрдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЙрдЪреНрдЪ CPU рдЙрдкрдпреЛрдЧ рдорд┐рд▓реЗрдЧрд╛:



рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, strace рдпреВрдЯрд┐рд▓рд┐рдЯреА рдмрдЪрд╛рд╡ рдореЗрдВ рдЖ рд╕рдХрддреА рд╣реИ - рдпрд╣ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:


sudo strace -c -p 9331

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЪрд╛рд╣рд┐рдПред

рдЯрд┐рдк # 7 : рдЫреЛрдЯреА рдЪреАрдЬрд╝реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╕рдлреЗрдж рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЗрд╕рдХреЗ рд╕рд╛рде, SecDevOps рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ seccomp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧреЛрдВ рдореЗрдВ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдкреА.рдПрд╕.


рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рднреА рдкрдврд╝реЗрдВ:

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


All Articles