टी एल; डॉ: एक प्रणाली है जहाँ में SELinux उपयोग में है, फ़ाइलों को सिस्टम द्वारा प्रयुक्त (यानी: डेमॉन) की नकल की जानी चाहिए या के साथ चारों ओर ले जाया cp -aZऔर mv -Zके बजाय cp -aऔर mv। यदि ऐसा नहीं किया गया था, तो किसी को डिफ़ॉल्ट SELinux संदर्भों को पुनर्स्थापित करने के लिए सिस्टम से पूछने के लिए बस restorecon -v -rया restorecon -v -F -rगंतव्य पर उपयोग करना चाहिए । restoreconस्क्रिप्ट के अंत में उपयोग करने के लिए हमेशा एक अच्छा विचार है जो मुख्य कॉन्फ़िगरेशन फ़ाइलों पर काम करता है।
आरएचईएल और इस प्रकार इसके अधिकांश डेरिवेटिव डिफ़ॉल्ट रूप से SELinux का उपयोग करते हैं ।
तो अपनी समस्या को हल करने के लिए, यदि आपका सिस्टम आरएचईएल आधारित है और mariadb-serverपैकेज का उपयोग कर रहा है, तो फ़ाइल सही जगह पर होने पर बस अंतिम चरण में करें :
# restorecon -v -F /etc/my.cnf.d/server.cnf
Relabeled /etc/my.cnf.d/server.cnf from unconfined_u:object_r:user_home_t:s0 to system_u:object_r:mysqld_etc_t:s0
(ध्यान दें कि इसके बिना कॉन्फ़िगर करने के लिए -Fपरिवर्तित नहीं होगा । यह सामान्य प्रणालियों के लिए कोई फर्क नहीं पड़ेगा। अंतर का मेरा ज्ञान और यह क्यों मायने रखता है यह अभी तक नहीं जाता है)।unconfined_usystem_u
किसी अन्य स्थान पर फ़ाइल पर सही संदर्भ डालना केवल अधिक काम होगा। chconऐसा कर सकते हैं (या तो इसे इसके साथ बताते हुए -u -t, और अधिक संदर्भ को किसी अन्य फ़ाइल से कॉपी करके --reference):
# ls -lZ /home/test/server.cnf.bad
-rw-r--r--. 1 root root unconfined_u:object_r:user_home_t:s0 744 Apr 30 2017 /home/test/server.cnf.bad
# chcon -v -u system_u -t mysqld_etc_t /home/test/server.cnf.bad
changing security context of '/home/test/server.cnf.bad'
# ls -lZ /home/test/server.cnf.bad
-rw-r--r--. 1 root root system_u:object_r:mysqld_etc_t:s0 744 Apr 30 2017 /home/test/server.cnf.bad
यदि आपको SELinux समस्याओं पर संदेह है, तो अपनी प्रक्रिया या फ़ाइल से संबंधित /var/log/audit/audit.logशब्द के साथ प्रविष्टियों की जांच करें denied। आप हमेशा अस्थायी रूप से SELinux को संचालन की अनुमति देने के लिए कह सकते हैं, और फिर उन्हें क्रमशः setenforce Permissiveऔर setenforce Enforcingव्यवहार की तुलना करने के लिए पुनर्स्थापित कर सकते हैं। Permissiveविशेष रूप से उत्पादन के लिए इसे मत छोड़ो ।
निम्नलिखित विभिन्न स्पष्टीकरण ...
कॉन्फ़िगरेशन फ़ाइलों पर काम करते समय उदाहरण और क्या किया जाना चाहिए
विभिन्न cpविकल्पों के साथ और mvएक SELinux सक्षम प्रणाली पर bahaviour का उदाहरण :
$ id
uid=1034(test) gid=1034(test) groups=1034(test)
$ pwd
/home/test
test@glasswalker:~$ ls -lZ foo
-rw-r--r--. 1 test test unconfined_u:object_r:user_home_t:s0 0 Aug 11 11:25 foo
$ cp foo /tmp/foo1
$ cp --preserve=context foo /tmp/foo2
$ cp -a foo /tmp/foo3
$ cp -aZ foo /tmp/foo4
$ mv foo /tmp/foo5
$ ls -lZ /tmp/foo?
-rw-r--r--. 1 test test unconfined_u:object_r:user_tmpfs_t:s0 0 Aug 11 11:25 /tmp/foo1
-rw-r--r--. 1 test test unconfined_u:object_r:user_home_t:s0 0 Aug 11 11:25 /tmp/foo2
-rw-r--r--. 1 test test unconfined_u:object_r:user_home_t:s0 0 Aug 11 11:25 /tmp/foo3
-rw-r--r--. 1 test test unconfined_u:object_r:user_tmpfs_t:s0 0 Aug 11 11:25 /tmp/foo4
-rw-r--r--. 1 test test unconfined_u:object_r:user_home_t:s0 0 Aug 11 11:25 /tmp/foo5
$ touch bar
$ ls -lZ bar
-rw-r--r--. 1 test test unconfined_u:object_r:user_home_t:s0 0 Aug 11 11:49 bar
$ mv -Z bar /tmp
$ ls -lZ /tmp/bar
-rw-r--r--. 1 test test unconfined_u:object_r:user_tmpfs_t:s0 0 Aug 11 11:49 /tmp/bar
इसलिए सुरक्षा संदर्भों का उपयोग करते समय cp -aZया उपयोग mv -Zकरना ठीक रहता है और फिर भी अन्य विशेषताओं को संरक्षित करता है। चारों ओर एक स्क्रिप्ट मूविंग सिस्टम फाइलें हमेशा -Zकिसी भी cpया mvकमांड के लिए विकल्प का उपयोग करना चाहिए , या restoreconअनपेक्षित मुद्दों से बचने के लिए बस अपने अंतिम चरण में उपयोग करें ।
वो मतभेद क्यों?
mvआदेश एक संगत व्यवहार रहता है। यदि यह एक ही फाइल सिस्टम में हुआ है, तो निश्चित रूप से एक फाइल से जुड़ी कुछ भी, इसके सुरक्षा संदर्भ सहित, इसे बदल नहीं दिया जाएगा क्योंकि यह सिर्फ एक "नाम" है। इसलिए दो फाइल सिस्टमों में, जहां यह वास्तव में एक प्रति है, तब हटाएं, यह अपरिवर्तित पर भी कॉपी करता है जो फाइल से जुड़ा हुआ है और यह इसके सुरक्षा संदर्भ सहित, स्थिरता के लिए जानता है।
cpडिफ़ॉल्ट रूप से आदेश सिर्फ बनाता है एक नई फ़ाइल, तो यह फ़ाइल, हमेशा की तरह माता-पिता के SELinux संदर्भ विरासत में जब तक कि बेशक अन्यथा बताया साथ --preserve=contextजो में शामिल है -a। विकल्प --preserve=contextसे susbtracted किया जा सकता है तो सबसे अच्छा शर्त जब पूरे arborescences की नकल है , तो इसके बजाय अगर SELinux कोई फर्क नहीं पड़ता।-a-Z-aZ-a
फ़ाइल बनाते समय डिफ़ॉल्ट रूप से, जो कि सामान्य मामला है, यह नई फ़ाइल अपनी निर्देशिका SELinux संदर्भ को इनहेरिट करती है, यही कारण है कि सब कुछ ठीक काम करता है (ऑफ-टॉपिक: दुर्लभ स्थिति में फ़ाइल का संदर्भ केवल एक निर्देशिका के संदर्भ से भिन्न होना चाहिए क्योंकि इसके नाम पर शासन, कर्नेल परवाह नहीं करेगा, restorecondइसे संभालने के लिए डेमॉन जैसे कार्यक्रमों की आवश्यकता होगी)।
SELinux क्या है
SELinux एक अनिवार्य एक्सेस कंट्रोल मैकेनिज्म (उर्फ मैक ) है जो अन्य सभी मैकेनिज्म (यूनिक्स परमिशन उर्फ डीएसी , एक्सेस कंट्रोल उर्फ एसीएल इत्यादि) के अलावा उपयोग किया जाता है । जब कोई प्रक्रिया प्रक्रिया सुरक्षा संदर्भ में चलती है, तो यह जाँचने के लिए "नियम मैट्रिक्स" है कि क्या यह प्रक्रिया संदर्भ फ़ाइल के संदर्भ में पूछे गए ऑपरेशन (ओपन, रीड, राइट, एमएमएपी, ...) कर सकता है।
ओपी के मामले के लिए उदाहरण: यदि mysqldकेवल प्रक्रिया संदर्भ को ही कुछ फ़ाइल संदर्भ प्रकारों को एक्सेस करने की अनुमति दी जाती है, mysqld_etc_tलेकिन user_home_tतब शुरू mysqldकरना विफल रहेगा क्योंकि यह गलत user_home_tप्रकार के साथ इसकी कॉन्फ़िगरेशन फ़ाइल को नहीं पढ़ सकता है ।
सामान्य प्रणालियों पर, यह इंटरैक्टिव / लॉग-इन उपयोगकर्ता के लिए कोई मायने नहीं रखता है, क्योंकि इसकी सामान्य प्रक्रिया संदर्भ अपुष्ट है, जिसका अर्थ है कोई SELinux नियम लागू नहीं होगा। हर डेमॉन द्वारा शुरू systemdया अन्य इसी तरह तंत्र होगा एक प्रक्रिया संदर्भ, जिसके साथ जाँच की जा सकती प्राप्त psकी -Zविकल्प। SELinux पर चल रहे एक डेबियन सिस्टम पर उदाहरण:
# ps -Z -p $$
LABEL PID TTY TIME CMD
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 22498 pts/7 00:00:00 bash
# ps -Z -p $(pidof /sbin/getty)
LABEL PID TTY STAT TIME COMMAND
system_u:system_r:getty_t:s0 6158 tty1 Ss+ 0:00 /sbin/getty 38400 tty1
system_u:system_r:getty_t:s0 6159 tty2 Ss+ 0:00 /sbin/getty 38400 tty2
system_u:system_r:getty_t:s0 6160 tty3 Ss+ 0:00 /sbin/getty 38400 tty3
system_u:system_r:getty_t:s0 6161 tty4 Ss+ 0:00 /sbin/getty 38400 tty4
system_u:system_r:getty_t:s0 6162 tty5 Ss+ 0:00 /sbin/getty 38400 tty5
system_u:system_r:getty_t:s0 6163 tty6 Ss+ 0:00 /sbin/getty 38400 tty6