25 KiB
Kubernetes SecurityContext(s)
{{#include ../../../banners/hacktricks-training.md}}
PodSecurityContext
जब आप एक Pod के सुरक्षा संदर्भ को निर्दिष्ट करते हैं, तो आप कई विशेषताओं का उपयोग कर सकते हैं। एक रक्षात्मक सुरक्षा दृष्टिकोण से, आपको विचार करना चाहिए:
- runASNonRoot को True रखना
- runAsUser को कॉन्फ़िगर करना
- यदि संभव हो, तो seLinuxOptions और seccompProfile को इंगित करते हुए permissions को सीमित करने पर विचार करें
- runAsGroup और supplementaryGroups के माध्यम से privilege group पहुंच न दें
fsGroup |
एक विशेष सहायक समूह जो pod में सभी कंटेनरों पर लागू होता है। कुछ वॉल्यूम प्रकार Kubelet को उस वॉल्यूम के स्वामित्व को बदलने की अनुमति देते हैं: |
|---|---|
fsGroupChangePolicy |
यह वॉल्यूम के स्वामित्व और अनुमति को बदलने के व्यवहार को परिभाषित करता है, जो Pod के अंदर प्रदर्शित होने से पहले। |
runAsGroup |
कंटेनर प्रक्रिया के एंट्रीपॉइंट को चलाने के लिए GID। यदि सेट नहीं है तो रनटाइम डिफ़ॉल्ट का उपयोग करता है। |
runAsNonRoot |
यह इंगित करता है कि कंटेनर को गैर-रूट उपयोगकर्ता के रूप में चलाना चाहिए। यदि सत्य है, तो Kubelet रनटाइम पर छवि को मान्य करेगा ताकि यह सुनिश्चित किया जा सके कि यह UID 0 (रूट) के रूप में नहीं चल रहा है और यदि ऐसा होता है तो कंटेनर शुरू करने में विफल हो जाएगा। |
runAsUser |
कंटेनर प्रक्रिया के एंट्रीपॉइंट को चलाने के लिए UID। यदि निर्दिष्ट नहीं किया गया है तो छवि मेटाडेटा में निर्दिष्ट उपयोगकर्ता का डिफ़ॉल्ट होता है। |
seLinuxOptions |
सभी कंटेनरों पर लागू होने वाला SELinux संदर्भ। यदि निर्दिष्ट नहीं किया गया है, तो कंटेनर रनटाइम प्रत्येक कंटेनर के लिए एक यादृच्छिक SELinux संदर्भ आवंटित करेगा। |
seccompProfile |
इस pod में कंटेनरों द्वारा उपयोग करने के लिए seccomp विकल्प। |
supplementalGroups |
प्रत्येक कंटेनर में पहले चलाए गए प्रक्रिया पर लागू समूहों की एक सूची, कंटेनर के प्राथमिक GID के अतिरिक्त। |
| Sysctls pod के लिए उपयोग किए जाने वाले namespaced sysctls की एक सूची रखता है। जिन pods में असमर्थित sysctls होते हैं (कंटेनर रनटाइम द्वारा) वे लॉन्च करने में विफल हो सकते हैं। | |
| सभी कंटेनरों पर लागू होने वाले Windows विशिष्ट सेटिंग्स। यदि निर्दिष्ट नहीं किया गया है, तो कंटेनर के SecurityContext के भीतर विकल्पों का उपयोग किया जाएगा। |
SecurityContext
यह संदर्भ कंटेनरों की परिभाषाओं के अंदर सेट किया गया है। एक रक्षात्मक सुरक्षा दृष्टिकोण से, आपको विचार करना चाहिए:
- allowPrivilegeEscalation को False पर सेट करें
- संवेदनशील capabilities न जोड़ें (और जिनकी आपको आवश्यकता नहीं है उन्हें हटा दें)
- privileged को False पर सेट करें
- यदि संभव हो, तो readOnlyFilesystem को True पर सेट करें
- runAsNonRoot को True पर सेट करें और एक runAsUser सेट करें
- यदि संभव हो, तो seLinuxOptions और seccompProfile को इंगित करते हुए permissions को सीमित करने पर विचार करें
- runAsGroup के माध्यम से privilege group पहुंच न दें।
ध्यान दें कि SecurityContext और PodSecurityContext में सेट किए गए गुणों में, SecurityContext में निर्दिष्ट मान प्राथमिकता लेता है।
allowPrivilegeEscalation |
AllowPrivilegeEscalation नियंत्रित करता है कि क्या एक प्रक्रिया अपने माता-पिता प्रक्रिया से अधिक विशेषाधिकार प्राप्त कर सकती है। यह bool सीधे नियंत्रित करता है कि क्या no_new_privs ध्वज कंटेनर प्रक्रिया पर सेट किया जाएगा। AllowPrivilegeEscalation हमेशा सत्य होता है जब कंटेनर Privileged के रूप में चलाया जाता है या CAP_SYS_ADMIN होता है |
|---|---|
capabilities |
कंटेनरों को चलाते समय जोड़ने/हटाने के लिए क्षमताएँ। डिफ़ॉल्ट रूप से क्षमताओं का डिफ़ॉल्ट सेट होता है। |
privileged |
विशेषाधिकार मोड में कंटेनर चलाएँ। विशेषाधिकार वाले कंटेनरों में प्रक्रियाएँ मूल रूप से होस्ट पर रूट के बराबर होती हैं। डिफ़ॉल्ट रूप से false। |
procMount |
procMount कंटेनरों के लिए उपयोग करने के लिए proc माउंट के प्रकार को दर्शाता है। डिफ़ॉल्ट DefaultProcMount है जो केवल-पढ़ने वाले पथों और मास्क किए गए पथों के लिए कंटेनर रनटाइम डिफ़ॉल्ट का उपयोग करता है। |
readOnlyRootFilesystem |
क्या यह कंटेनर के पास एक केवल-पढ़ने वाली रूट फ़ाइल प्रणाली है। डिफ़ॉल्ट रूप से false। |
runAsGroup |
कंटेनर प्रक्रिया के एंट्रीपॉइंट को चलाने के लिए GID। यदि सेट नहीं है तो रनटाइम डिफ़ॉल्ट का उपयोग करता है। |
runAsNonRoot |
यह इंगित करता है कि कंटेनर को गैर-रूट उपयोगकर्ता के रूप में चलाना चाहिए। यदि सत्य है, तो Kubelet रनटाइम पर छवि को मान्य करेगा ताकि यह सुनिश्चित किया जा सके कि यह UID 0 (रूट) के रूप में नहीं चल रहा है और यदि ऐसा होता है तो कंटेनर शुरू करने में विफल हो जाएगा। |
runAsUser |
कंटेनर प्रक्रिया के एंट्रीपॉइंट को चलाने के लिए UID। यदि निर्दिष्ट नहीं किया गया है तो छवि मेटाडेटा में निर्दिष्ट उपयोगकर्ता का डिफ़ॉल्ट होता है। |
seLinuxOptions |
कंटेनर पर लागू होने वाला SELinux संदर्भ। यदि निर्दिष्ट नहीं किया गया है, तो कंटेनर रनटाइम प्रत्येक कंटेनर के लिए एक यादृच्छिक SELinux संदर्भ आवंटित करेगा। |
| इस कंटेनर द्वारा उपयोग करने के लिए seccomp विकल्प। | |
| सभी कंटेनरों पर लागू होने वाले Windows विशिष्ट सेटिंग्स। |
References
- https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core
- https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core
{{#include ../../../banners/hacktricks-training.md}}