एक पुरानी बैश स्क्रिप्ट rootजिसे मैंने यह देखने के लिए परीक्षण किया है कि क्या कोई उपयोगकर्ता यह देखने के लिए था कि क्या /etc/passwdवह लिखने योग्य है। मैकओएस हाई सिएरा में यह rootकिसी और के लिए सही , और गलत है। लेकिन macOS Mojave में परीक्षण के लिए भी गलत रिटर्न देता है root।
यदि मैं [ -w File ]उसी अनुमतियों और स्वामित्व वाली अन्य फ़ाइलों पर उस परीक्षण को चलाता हूं , जैसे कि /etc/hosts, यह rootMojave और High Sierra दोनों में किसी और के लिए सही और गलत है। मुझे कोई विशेष फ़ाइल फ़्लैग या विस्तारित विशेषताएँ नहीं दिख रही हैं /etc/passwd।
स्क्रिप्ट को ठीक करने के लिए कोई समस्या नहीं है, लेकिन मैं यह जानना चाहूंगा कि यह परीक्षण उस फ़ाइल बनाम अन्य फ़ाइलों पर कैसे और क्यों भिन्न है और यह केवल Mojave में क्यों है। यदि यह SIP के साथ करना है, तो मैं जानना चाहूंगा कि कोई यह देखने के लिए कैसे परीक्षण कर सकता है कि किसी फ़ाइल या निर्देशिका को किसी तरह SIP द्वारा संरक्षित किया गया है।
अद्यतन: मैंने पाया कि SIP को अक्षम करने से चीजें अपेक्षा के अनुरूप काम करती हैं, यानी रूट उपयोगकर्ता के लिए बैश टेस्ट "-w / etc / passwd" सही होगा। सक्षम SIP फिर से और सभी अपेक्षित के रूप में काम कर रहा है। मुझे नहीं पता कि मुझे इस प्रश्न को हटा देना चाहिए, या इसे किसी ऐसी ही समस्या में चलाने की स्थिति में छोड़ देना चाहिए। एक "ls -O / etc / passwd" करना फ़ाइल को प्रतिबंधित के रूप में नहीं दिखाता है।
yesMojave पर मेरे लिए लौटता है , पहले चल रहा है sudo -iयाsudo bash
whoami; [[ -w /etc/passwd ]] && echo "yes"की ओर जाता हैroot yes
[[ -w /etc/passwd ]] && echo "yes"वापस जाएँyes।