Linux рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ (рдХреНрд╖рдорддрд╛рдУрдВ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ

рд▓реЗрдЦ рдХрд╛ рдПрдХ рдЕрдиреБрд╡рд╛рдж рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдкреНрд░рд╢рд╛рд╕рдХ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


SystemD, Docker, рдФрд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░ рдЬреИрд╕реЗ Kuberneses рдХреЗ рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдзрдиреНрдпрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдкреНрд░рд▓реЗрдЦрди рдХреЛ рд╕рдордЭрдирд╛ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рд▓реЗрдЦ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рдЬреНрдЮрд╛рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред



рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд▓рд┐рдВрдХ рдХреНрд╖рдорддрд╛рдУрдВ (7) рдореИрди рдкреЗрдЬ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╣ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдХреНрд╖рдорддрд╛


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

рд░реВрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, POSIX (POSIX рдХреНрд╖рдорддрд╛рдПрдВ) рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╕рд┐рд╕реНрдЯрдо рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рдореВрд╣реЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ рдЬреЛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╡реЗ рд╕рднреА "рдореВрд▓" рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рдЪрд╛рд░ 1997 рдореЗрдВ POSIX 1003.1e рдХреЗ рдорд╕реМрджреЗ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд▓рд┐рдирдХреНрд╕ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдХрд╛рд░реНрдп) рдореЗрдВ рдкрд╛рдВрдЪ 64-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ (рд╕реЗрдЯ) рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрдорддрд┐ рдмрд┐рдЯреНрд╕ рд╣реЛрддреА рд╣реИрдВ (рд▓рд┐рдирдХреНрд╕ 2.6.25 рд╕реЗ рдкрд╣рд▓реЗ рд╡реЗ 32-рдмрд┐рдЯ рдереЗ), рдЬрд┐рд╕реЗ рдЕрдВрджрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  / proc / <pid> / рд╕реНрдерд┐рддрд┐ 
ред

CapInh: 00000000000004c0 CapPrm: 00000000000004c0 CapEff: 00000000000004c0 CapBnd: 00000000000004c0 CapAmb: 0000000000000000 

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

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

рдпрджрд┐ рдХрд╛рд░реНрдп рдПрдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдСрдкрд░реЗрд╢рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреЛрд░реНрдЯ <1024) рд╕реЗ рдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ , рддреЛ рдХрд░реНрдиреЗрд▓ CAP_NET_BIND_SERVICE рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рд╕реЗрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ рдСрдкрд░реЗрд╢рди рдЬрд╛рд░реА рд╣реИред рдЕрдиреНрдпрдерд╛, рдСрдкрд░реЗрд╢рди EPERM (рдСрдкрд░реЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ) рдХреЗ рд╕рд╛рде рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпреЗ CAP_ рдХрд░реНрдиреЗрд▓ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ CAP_ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЧрд┐рдиреЗ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП CAP_NET_BIND_SERVICE , 10 рдХреЗ рдмрд░рд╛рдмрд░, рдХрд╛ рдЕрд░реНрде рд╣реИ рдмрд┐рдЯ 1 << 10 = 0x400 (рдпрд╣ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдЕрдВрдХ "4" рд╣реИ)ред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рдкреВрд░реА рдорд╛рдирд╡-рдкрдардиреАрдп рд╕реВрдЪреА рд╡рд░реНрддрдорд╛рди рдХреНрд╖рдорддрд╛рдУрдВ (7) рдореИрди рдкреЗрдЬ (рдХреЗрд╡рд▓ рдпрд╣рд╛рдВ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рд╣реИ ) рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред

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

 # capsh --print Current: = cap_setgid,cap_setuid,cap_net_bind_service+eip Bounding set = cap_setgid,cap_setuid,cap_net_bind_service Ambient set = Securebits: 00/0x0/1'b0 secure-noroot: no (unlocked) secure-no-suid-fixup: no (unlocked) secure-keep-caps: no (unlocked) secure-no-ambient-raise: no (unlocked) uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video) 

рдпрд╣рд╛рдБ рдХреБрдЫ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдВрджреБ рд╣реИрдВ:

  • рд╡рд░реНрддрдорд╛рди - рдкреНрд░рд╛рд░реВрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ cap_to_text (3) рдореЗрдВ capsh рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреНрд░рднрд╛рд╡реА, рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдФрд░ рдЙрдкрд▓рдмреНрдз рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ, рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рд╕рдореВрд╣реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ тАЬcapability[,capabilityтАж]+(e|i|p)тАЭ , рдЬрд╣рд╛рдВ тАЬeтАЭ рдЕрд░реНрде рдкреНрд░рднрд╛рд╡реА рд╣реИ, тАЬiтАЭ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ тАЬpтАЭ рдЙрдкрд▓рдмреНрдз рд╣реИред рд╕реВрдЪреА рдХреЛ тАЬ,тАЭ рдкреНрд░рддреАрдХ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛ (cap_setgid+eip, cap_setuid+eip) ред рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╕рдореВрд╣ рдореЗрдВ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕рдореВрд╣реЛрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реВрдЪреА рдХреЛ рддрдм рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреЛ рдПрдХреНрд╢рди рдЧреНрд░реБрдк рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг тАЬ= cap_sys_chroot+ep cap_net_bind_service+eipтАЭ ред рдФрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рд╕рдореВрд╣ тАЬ= cap_net_bind_service+e cap_net_bind_service+ipтАЭ рд╕рдорд╛рди рдорд╛рди рдХреЛ рдПрдХ тАЬcap_net_bind_service+eipтАЭ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░реЗрдВрдЧреЗред
  • рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рд╕реЗрдЯ / рдПрдореНрдмрд┐рдПрдВрдЯ рд╕реЗрдЯ ред рдЖрдЧреЗ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрди рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдЗрди рд╕реЗрдЯреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдпрд╣рд╛рдВ cap_to_text рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЙрдкрд▓рдмреНрдз, рдкреНрд░рднрд╛рд╡реА рдФрд░ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ (рд╕реАрдорд╛ / рдкрд░рд┐рд╡реЗрд╢) рд╕реЗрдЯ рд╣реИред
  • рд╕рд┐рдХреНрдпреЛрд░рдмрд┐рдЯреНрд╕ : рдЯрд╛рд╕реНрдХ рдХреЗ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдлреНрд▓реИрдЧреНрд╕ рдХреЛ рджрд╢рдорд▓рд╡ / рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ / рд╡реЗрд░рд┐рд▓реЙрдЧ рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рдБ, рд╣рд░ рдХреЛрдИ рдЗрд╕реЗ рдпрд╣рд╛рдБ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЗрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рд╕реНрдЯрдо рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрдЯрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ FPGA рдФрд░ ASIC рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддрд╛ рд╣реИ)ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд╛рдЬреНрдп рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЭрдВрдбреЗ рдХреЛ SECBIT_* рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред SECBIT_* рдореЗрдВ, рдФрд░ рдХреНрд╖рдорддрд╛рдУрдВ (7) рдореЗрдВ рднреА рд╡рд░реНрдгрд┐рдд рд╣реИред
  • рдЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореЗрдВ "NoNewPrivs" рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рдЬрд┐рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
      / proc / <pid> / рд╕реНрдерд┐рддрд┐ 
    ред рдпрд╣ рдХреЗрд╡рд▓ prctl (2) рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рдпреЛрдВ (рдиреАрдЪреЗ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ) рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╕реАрдзреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред NoNewPrivs рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: тАЬ no_new_privs рд╕рд╛рде 1 рдкрд░ no_new_privs рдХрд░реЗрдВ, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (2) рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдЕрдиреБрджрд╛рди рдирд╣реАрдВ рджреЗрдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рдереЗ (2) (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, set-user-ID , set-group-ID рдмрд┐рдЯреНрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ set-group-ID рдФрд░ рдЕрдХреНрд╖рдо рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг) ред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, no_new_privs рд╡рд┐рд╢реЗрд╖рддрд╛ рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреАред рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдореВрд▓реНрдп рдХрд╛рдВрдЯреЗ (2) рдФрд░ рдХреНрд▓реЛрди (2) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╡рдВрд╢реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд (2) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред " Kubernetes рдЗрд╕ рдзреНрд╡рдЬ рдХреЛ 1 рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрдм allowPrivilegeEscalation рдлрд▓реА рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рдЧрд▓рдд рд╣реИред


рдирд┐рд╖реНрдкрд╛рджрд┐рдд (2) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: (7)

 P'(ambient) = (file is privileged) ? 0 : P(ambient) P'(permitted) = (P(inheritable) & F(inheritable)) | (F(permitted) & P(bounding)) | P'(ambient) P'(effective) = F(effective) ? P'(permitted) : P'(ambient) P'(inheritable) = P(inheritable) [ie, unchanged] P'(bounding) = P(bounding) [ie, unchanged] where: P() denotes the value of a thread capability set before the execve(2) -      execve(2) P'() denotes the value of a thread capability set after the execve(2) -      execve(2) F() denotes a file capability set -   


рдпреЗ рдирд┐рдпрдо рд╕рднреА рдЕрдиреБрдорддрд┐ рд╕реЗрдЯреЛрдВ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ (рдкрд░рд┐рд╡реЗрд╢ / рдЕрдиреБрдорддрд┐ / рдкреНрд░рднрд╛рд╡реА / рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд / рд╕реАрдорд╛)ред рдорд╛рдирдХ C рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░ - рддрд╛рд░реНрдХрд┐рдХ AND; рдХреЗ рд▓рд┐рдП - рддрд╛рд░реНрдХрд┐рдХ OR рдХреЗ рд▓рд┐рдП)ред P 'рдПрдХ рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред P рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд (2) рдХрд╣рддрд╛ рд╣реИред рдПрдл рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреА рддрдерд╛рдХрдерд┐рдд "рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐" рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА, рд╕реБрд▓рдн рдФрд░ рдХреБрд╢рд▓ рд╕реЗрдЯреЛрдВ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рд╕реА рднреА рд╕рдордп рдореЗрдВ рдмрджрд▓ рд╕рдХрддреА рд╣реИ:

  • рдпрджрд┐ рдХреЙрд▓рд░ рдХреЗ рдкрд╛рд╕ CAP_SETPCAP рдирд╣реАрдВ рд╣реИ, рддреЛ рдирдП рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджрд┐рдП рдЧрдП рд╕реЗрдЯ рдореЗрдВ P (рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛) рдФрд░ P (рдЙрдкрд▓рдмреНрдз) рдХрд╛ рдПрдХ рдЙрдкрд╕рдореВрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  • (рд▓рд┐рдирдХреНрд╕ 2.6.25 рдХреЗ рд╕рд╛рде) рдирдпрд╛ рд╡рд┐рд░рд╛рд╕рдд рд╡рд╛рд▓рд╛ рд╕реЗрдЯ рдкреА (рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛) рдФрд░ рдкреА (рд╕реАрдорд┐рдд) рдХрд╛ рд╕рдмрд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  • рдирдпрд╛ рдЙрдкрд▓рдмреНрдз рд╕реЗрдЯ P рдХрд╛ рдЙрдкрд╕рдореВрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрдкрд▓рдмреНрдз)
  • рдирдпрд╛ рдХреБрд╢рд▓ рд╕реЗрдЯ рдкреА рдХрд╛ рд╕рдмрд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдкреНрд░рднрд╛рд╡реА)


рдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдиреБрдорддрд┐


рдХрднреА-рдХрднреА рд╕реАрдорд┐рдд рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ chmod + s ./executable рдмрд┐рдЯ ( chmod + s ./executable ) рд╕реЗрдЯ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдРрд╕реА рдлрд╛рдЗрд▓, рдпрджрд┐ рдпрд╣ рд░реВрдЯ рдХреА рд╣реИ, рддреЛ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдкреВрд░реНрдг рд░реВрдЯ рдЕрдзрд┐рдХрд╛рд░ рд╣реЛрдВрдЧреЗред

рд▓реЗрдХрд┐рди рдпрд╣ рддрдВрддреНрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП POSIX рдЕрдиреБрдорддрд┐рдпреЛрдВ рдиреЗ "рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рдпрд╛рдБ" рдирд╛рдордХ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ "Security.capability" рдирд╛рдордХ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рдЬреИрд╕реЗ *, XFS, Raiserfs, Brtfs, overlay2, ...) рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, CAP_SETFCAP рдЕрдиреБрдорддрд┐ CAP_SETFCAP (рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдЙрдкрд▓рдмреНрдз рд╕реЗрдЯ рдореЗрдВ)ред

 $ getfattr -m - -d `which ping` # file: usr/bin/ping security.capability=0sAQAAAgAgAAAAAAAAAAAAAAAAAAA= $ getcap `which ping` /usr/bin/ping = cap_net_raw+ep 


рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ


рдмреЗрд╢рдХ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХреНрд╖рдорддрд╛рдУрдВ (7) рдореИрди рдкреЗрдЬ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрдИ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рд╣реИрдВред рд╕рдВрднрд╡рддрдГ рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ:

  • рдпрджрд┐ NoNewPrivs рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ nosuid рдХреЗ рд╕рд╛рде рдЖрд░реЛрд╣рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рд╕реЗрдЯ-рдХреЙрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ ptrace рджреНрд╡рд╛рд░рд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рднреА рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрд░реНрдиреЗрд▓ no_file_caps рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде no_file_caps рд╣реЛрддрд╛ рд╣реИред
  • рдПрдХ "рдбрдВрдм" рдлрд╝рд╛рдЗрд▓ (рдХреНрд╖рдорддрд╛-рдбрдВрдм) рдПрдХ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдПрдХ рд╕реЗрддреБ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ред рдРрд╕реА рдлрд╛рдЗрд▓реЗрдВ рдЕрдХреНрд╕рд░ рдЙрди рдкрд░ + ep рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, тАЬsetcap cap_net_bind_service+ep ./binaryтАЭ ред рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ "рдИ" рд╣реИ - рдкреНрд░рднрд╛рд╡реАред рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпреЗ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдЙрдкрд▓рдмреНрдз рдФрд░ рдореМрдЬреВрджрд╛ рджреЛрдиреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛рдПрдВрдЧреА, рдЗрд╕рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ "рдХреНрд╖рдорддрд╛-рд╕реНрдорд╛рд░реНрдЯ" рдлрд╝рд╛рдЗрд▓ рдЬреЛ libcap рдпрд╛ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ , рдХрд┐рд╕реА рднреА рд╕рдордп "рдкреНрд░рднрд╛рд╡реА" рдпрд╛ "рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ" рдмрд┐рдЯреНрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП cap_set_proc (3) (рдпрд╛ capset ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рд╡рд╣ рдЕрдиреБрдорддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ рд╕рд╕реНрддреА тАЭрдХрд┐рдЯред рдЗрд╕рд▓рд┐рдП, " setcap cap_net_bind_service+p ./binaryтАЭ рдПрдХ "рд╕реНрдорд╛рд░реНрдЯ" рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдСрдкрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдкреНрд░рднрд╛рд╡реА рд╕реЗрдЯ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдирдореВрдирд╛ рдХреЛрдб рджреЗрдЦреЗрдВред
  • рд╕реЗрддреБ-рд░реВрдЯ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреА рд╣реИрдВ, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧреИрд░-рд░реВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рднреА рд░реВрдЯ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐ рд╕реЗрдЯ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рд╣реА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдПрдЧреАред рдЖрдк рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдЦрд╛рд▓реА рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрдЯрд┐рдб рдлрд╝рд╛рдЗрд▓ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдиреБрдорддрд┐ рдХреЗ рдпреВрдЖрдИрдбреА 0 рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдЧрд╛ред рд░реВрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрдм рдХреЛрдИ рдлрд╛рдЗрд▓ рд╕реЗрдЯреБрдпрдб-рд░реВрдЯ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣реА рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реБрд░рдХреНрд╖рд╛ рдЭрдВрдбреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣реА рд╣реИ (рдЖрджрдореА рджреЗрдЦреЗрдВ)ред
  • рдПрдХ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рд╕реЗрдЯ рдорд╛рд╕реНрдХ рдЙрдкрд▓рдмреНрдз рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИрдВред рдкреА '(рдЙрдкрд▓рдмреНрдз) = рдПрдл (рдЙрдкрд▓рдмреНрдз) рдФрд░ рдкреА (рд╕реАрдорд┐рдд) рдпрд╛рдж рд░рдЦреЗрдВред рдпрджрд┐ рдХрд┐рд╕реА рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЙрд╕рдХреЗ рд╡рд┐рд░рд╛рд╕рдд рд╡рд╛рд▓реЗ рд╕реЗрдЯ рдореЗрдВ рдЕрдиреБрдорддрд┐ рд╣реИ рдЬреЛ рдЙрд╕рдХреЗ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рд╕реЗрдЯ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд╣ рдЕрднреА рднреА рдЕрдкрдиреЗ рдЙрдкрд▓рдмреНрдз рд╕реЗрдЯ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдХрд░ рдпрд╣ рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЕрдиреБрдорддрд┐ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджрд┐рдП рдЧрдП рд╕реЗрдЯ рдореЗрдВ рд╣реИ - P '(рдЙрдкрд▓рдмреНрдз) = P ( рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА) рдФрд░ рдПрдл (рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА)ред
  • рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЬреЛ рд╕реЗрдЯ-рдпреВрдЬрд╝рд░-рдЖрдИрдбреА, рд╕реЗрдЯ-рдЧреНрд░реБрдк-рдЖрдИрдбреА рдмрд┐рдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпреВрдЖрдИрдбреА рдпрд╛ рдЬреАрдЖрдИрдбреА тАЛтАЛрдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВ , рдкрд░рд┐рд╡реЗрд╢ рд╕реЗрдЯ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░ рджреЗрдЧрд╛ ред рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдЖрд╕рдкрд╛рд╕ рдХреЗ рд╕реЗрдЯ рдореЗрдВ PR_CAP_AMBIENT prctl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ PR_CAP_AMBIENT рдЬрд╛рддреА рд╣реИрдВ ред рдЗрди рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реБрд▓рдн рдФрд░ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдпрджрд┐ рдпреВрдЖрдИрдбреА рдХреЗ рд╕рд╛рде 0 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд (2) рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИ , рддреЛ рдЗрд╕рдХреЗ рдЙрдкрд▓рдмреНрдз рдФрд░ рд╕рдХреНрд░рд┐рдп рд╕реЗрдЯ рдХреЗ рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
  • рдпрджрд┐ SECBIT_KEEP_CAPS (рдпрд╛ рд╡реНрдпрд╛рдкрдХ SECBIT_NO_SETUID_FIXUP ) рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ, рдФрд░ UID рдХреЛ 0 рд╕реЗ рдмрджрд▓рдХрд░ SECBIT_NO_SETUID_FIXUP рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА, рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рдФрд░ рдкреНрд░рднрд╛рд╡реА рд╕реЗрдЯ рд╕реЗ рд╕рднреА рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИрдВ ред


рдЗрд╕рд▓рд┐рдП ...


рдпрджрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ nginx рдХрдВрдЯреЗрдирд░, ingress-nginx рдпрд╛ рдЖрдкрдХреА рд╕реНрд╡рдпрдВ рдХреА рд░реЛрдХ рдпрд╛ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИ:

bind() to 0.0.0.0:80 failed (13: Permission denied)

... рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдкреЛрд░реНрдЯ 80 рдкрд░ рдПрдХ рдЕрдирдкреНрд░реАрд╡рд┐рд▓рд╛рдЗрдЬреНрдб (0 рдирд╣реАрдВ) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдирдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдерд╛, рдФрд░ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрдорддрд┐ CAP_NET_BIND_SERVICE рдореЗрдВ рдХреЛрдИ CAP_NET_BIND_SERVICE рдирд╣реАрдВ рдереАред рдЗрди рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо cap_net_bind_service+ie nginx рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐ рдХреЗ рд▓рд┐рдП xattr рдФрд░ рд╕реЗрдЯ ( setcap рдХрд╛ рдЙрдкрдпреЛрдЧ setcap ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдиреБрдорддрд┐ рдХреЛ рд▓реАрдЧреЗрд╕реА рд╕реЗрдЯ (рдкреЙрдб рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреАрдХреЙрдиреНрдЯреЗрдХреНрд╕ / рдХреНрд╖рдорддрд╛ / рдРрдб / NET_BIND_SERVICE рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ) рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рднреА рдЙрдкрд▓рдмреНрдз рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░рд┐рдгрд╛рдо cap_net_bind_service+pie ред

рдпрд╣ рд╕рдм рддрдм рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ SecurityContext / allowPrivilegeEscalation рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ docker / rkt рд╕реНрдЯреЛрд░реЗрдЬ рдбреНрд░рд╛рдЗрд╡рд░ (docker рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВ) xattrs рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ nginx рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕реНрдорд╛рд░реНрдЯ рдереЗ, рддреЛ cap_net_bind_service+i рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рддрдм рд╡рд╣ рдЙрдкрд▓рдмреНрдз рд╕реЗрдЯ рд╕реЗ рдкреНрд░рднрд╛рд╡реА рддрдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП libcap рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж cap_net_bind_service+pie ред

Xattr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЧреИрд░-рд░реВрдЯ рдХрдВрдЯреЗрдирд░ рдореЗрдВ cap_net_bind_service рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ cap_net_bind_service рдХреЛ рдЕрдкрдиреА рдмрд╛рд╣рд░реА рдХреНрд╖рдорддрд╛рдУрдВ (рдкрд░рд┐рд╡реЗрд╢ рдХреНрд╖рдорддрд╛рдУрдВ) рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рджреЗрдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдкреНрд░реИрд▓ 2019 рддрдХ, рдпрд╣ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рдХреЛрдб рдЙрджрд╛рд╣рд░рдг


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

рд╕рдВрджрд░реНрдн (рд╕рдВрд▓рдЧреНрди):

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


All Articles