कैसे एक कस्टम SELinux लेबल बनाने के लिए


11

मैंने एक सेवा / एकल बाइनरी ऐप लिखा है जिसे मैं फेडोरा 24 पर चलाने की कोशिश कर रहा हूं, यह सिस्टमड का उपयोग करके चलाता है, बाइनरी को तैनात किया जाता है। /srv/bot

इस सेवा / एप्लिकेशन को मैंने लिखा है इस निर्देशिका में फ़ाइलों को बनाने / खोलने / पढ़ने और नाम बदलने की आवश्यकता है।

मैंने पहली बार SELinux पर आधारित एक नई नीति बनाना शुरू किया : एक प्रक्रिया को एक निश्चित निर्देशिका में किसी भी फ़ाइल को बनाने की अनुमति दें

लेकिन जब मेरे ऐप का नाम बदलने की ज़रूरत हुई, तो आउटपुट में चेतावनी थी:

#!!!! WARNING: 'var_t' is a base type.
allow init_t var_t:file rename;

मैं चारों ओर घूम गया और मुझे पता चला कि मुझे आधार प्रकार की तुलना में अधिक विशिष्ट SELinux लेबल का उपयोग करना चाहिए, लेकिन सभी उदाहरण आपको httpd / nginx / etc से मौजूदा लेबल दिखाते हैं।

क्या कोई ऐसा तरीका है जिससे मैं अपने स्वयं के ऐप के लिए एक कस्टम लेबल बना सकता हूं?

मेरा विचार myapp_var_t, उपयोग की तरह कुछ बनाना है

semanage fcontext -a -t my_app_var_t '/srv/bot(/.*)?'
restorecon -R -v /srv/bot

और एक कस्टम .ppफ़ाइल जो इस कस्टम प्रकार का उपयोग करेगी

यदि इसे हल करने के लिए एक बेहतर तरीका है, तो वह भी काम करता है।

धन्यवाद

अपडेट करें

अधिक खोज करने के बाद, मुझे लगता है कि जो मैं करना चाहता हूं उसके लिए उचित शब्द है नया बनाने के लिए typesजिसने मुझे https://docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/india.html#id3036916 पर ले लिया

जो मूल रूप से कहता है, भागो

sepolgen /path/to/binary

और मैं एक टेम्पलेट प्राप्त करने में सक्षम था जिसे मैं एक पीपी फ़ाइल और लोड में संकलित कर सकता हूं, फिर भी कुछ त्रुटियां मिल सकती हैं लेकिन ऐसा लगता है कि मैं जो करना चाहता हूं उसके करीब हूं।

अगर मुझे यह काम करने के लिए मिलता है, तो मैं इस पोस्ट को अपडेट करूंगा

जवाबों:


11

दौड़ने के शुरुआती बिंदु के साथ

sepolgen /path/to/binary

जो आपको देता है:

app.fc
app.sh
app.if
app.spec
app.te

SELinux file contextअपने प्रोग्राम / डेमॉन को संशोधित करने वाली फ़ाइलों को रखने वाली मूल निर्देशिका पर लागू करने के लिए एक नया बनाने के लिए, आप app.te फ़ाइल को संपादित करते हैं और जोड़ते हैं:

type app_var_t;
files_type(app_var_t)

पहली पंक्ति नए प्रकार की घोषणा करती है और दूसरी पंक्ति एक मैक्रो को कॉल करती है जो कुछ जादू करती है और इसे एक फ़ाइल प्रकार बनाती है (पता चलता है कि आप किसी फ़ाइल या निर्देशिका पर प्रक्रिया संदर्भ लाइन app_exec_t का उपयोग नहीं कर सकते हैं), "SELinux Types Revisation " को और देखें विभिन्न प्रकारों पर जानकारी

आपके द्वारा घोषित किए जाने के बाद, आपको SELinux को यह बताना होगा कि आपके ऐप को इसका उपयोग करने की अनुमति है, मेरे मामले में मैंने इसे जोड़ा था

allow app_t app_var_t:dir { add_name remove_name write search};
allow app_t app_var_t:file { unlink create open rename write read };

वे दो पंक्तियाँ मूल रूप से कहती हैं, app_t टाइप करें जो मेरे ऐप का डोमेन है, संदर्भ के साथ / खोज / आदि निर्देशिकाओं को लिखने के लिए app_var_tऔर इसे संदर्भ app_var_t के साथ फ़ाइलें बनाने / खोलने / हटाने / आदि की अनुमति दें

पहेली का आखिरी हिस्सा किसी तरह SELinux को बताना है कि किस फ़ोल्डर (ओं) और फ़ाइल (ओं) को प्रत्येक प्रकार मिलना चाहिए, आप app.fcफ़ाइल (fc => फ़ाइल संदर्भ) को संपादित करके ऐसा करते हैं

इस फ़ाइल में मेरे मामले में केवल दो लाइनें हैं:

/srv/bot/app        --  gen_context(system_u:object_r:app_exec_t,s0)
/srv/bot(/.*)?          gen_context(system_u:object_r:app_var_t,s0)

पहली पंक्ति द्विआधारी के रूप में सीधे मेरे सर्वर पर तैनात की ओर इशारा करती है, इसलिए इसे app_exec_t संदर्भ मिलता है।

दूसरी पंक्ति का अर्थ है:

App_var_t को निर्देशिका / srv / bot पर लागू करें और dir / srv / bot के अंदर सभी फाइलों पर भी लागू करें

ध्यान दें कि --पथ और कॉल के बीच की पहली पंक्ति कैसी है gen_context--इसका मतलब है, इसे केवल फाइलों पर लागू करें। दूसरे मामले में हमारे पास कुछ भी नहीं है (बस रिक्त स्थान), जिसका अर्थ है, सभी मिलान निर्देशिकाओं और फ़ाइलों पर लागू होता है, जो कि मैं चाहता था, एक और विकल्प -dसिर्फ निर्देशिकाओं को लागू करना है।

अब मेरे पास एक कार्य नीति है, मैं अपने ऐप को एक कस्टम नीति के साथ तैनात कर सकता हूं और यह सभी काम करता है। (मेरी नीति में .teफ़ाइल में बहुत अधिक प्रविष्टियाँ हैं लेकिन यह इस प्रश्न के दायरे से बाहर है।)

अतिरिक्त पठन सामग्री जिसने मुझे इस समाधान में लाने में मदद की:

सेपोलियन के साथ चीजों को आसान बनाना

इससे पहले कि आप आँख बंद करके ऑडिट करें 2-एमएम mydomain सोचें

लाल टोपी विकासकों के लिए SELinux (लंबी PDF)

एक सेलाइनक्स मॉड्यूल (1): प्रकार और नियम

नमूना नीति (विशेषकर पोस्टग्रैस्कल)

फ़ाइल संदर्भ फ़ाइलों को समझना


या
बजे

sepolgen /path/to/binaryमेरे लिए एक सिंटैक्स त्रुटि है। मैं आरएचईएल 7.6 पर हूं। मुझे लगता sepolgen --application /path/to/binaryहै कि उचित सिंटैक्स है यदि आपका लक्ष्य किसी विशेष एप्लिकेशन के लिए पॉलिसी लिखना है ??
जयेन्ड्रीन

.teमॉड्यूल को संकलित करते समय आपकी फ़ाइल मेरे लिए एक सिंटैक्स त्रुटि भी देती है app.te:5:ERROR 'This block has no require section.' at token 'files_type' on line 5::। और अगर मैं एक requireखंड जोड़ूं तो मुझे मिलता है:ERROR 'syntax error' at token 'files_type' on line 13:
jayhendren

क्षमा करें, मेरे पास अब परीक्षण करने के लिए फेडोरा मशीन तक पहुंच नहीं है, लेकिन यह हो सकता है कि संस्करण 24 के बाद से, उन्होंने सिंटैक्स को बदल दिया।
fmpwizard
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.