मैं एक फ़ाइल को कैसे संशोधित नहीं कर सकता हूँ?


35

लॉग इन करते समय, मैं निम्नलिखित कर सकता हूं:

mkdir foo
touch foo/bar
chmod 400 foo/bar 
chmod 500 foo

फिर मैं vim (जैसा नहीं root) खोल सकता हूं , संपादित कर सकता हूं bar, एक राइट को मजबूर कर सकता हूं w!, और फाइल को संशोधित किया जा सकता है।

मैं किसी भी फ़ाइल संशोधन को ऑपरेटिंग सिस्टम को कैसे बंद कर सकता हूं?

UPDATE Mar 02 2017

  1. chmod 500 fooएक लाल हेरिंग है: एक निर्देशिका पर लिखने की अनुमति का फ़ाइल की सामग्री को संशोधित करने की क्षमता से कोई लेना-देना नहीं है - केवल फ़ाइलों को बनाने और हटाने की क्षमता।

  2. chmod 400 foo/barवास्तव में फ़ाइल की सामग्री को बदले जाने से रोकता है। लेकिन , यह फ़ाइल की अनुमतियों को बदलने से नहीं रोकता है - एक फ़ाइल का स्वामी हमेशा अपनी फ़ाइल की अनुमतियों को बदल सकता है (यह मानते हुए कि वे फ़ाइल तक पहुँच सकते हैं अर्थात सभी पूर्वजों निर्देशिकाओं पर अनुमति निष्पादित करते हैं)। वास्तव में, स्ट्रेस (1) से पता चलता है कि यह वही है जो विम (7.4.576 डेबियन जेसी) कर रहा है - विम कॉल chmod (2) को अस्थायी रूप से फ़ाइल के मालिक के लिए लेखन अनुमति जोड़ने के लिए, फ़ाइल को संशोधित करता है, और फिर chmod ( 2) फिर से लिखने की अनुमति को हटाने के लिए। इसीलिए chattr +iकार्यों का उपयोग करते हुए - केवल रूट कॉल कर सकते हैं chattr -i। सैद्धांतिक रूप से, vim (या कोई भी प्रोग्राम) चटट्रों के साथ वैसा ही कर सकता है जैसा कि रूट पर चलने पर किसी अपरिवर्तनीय फ़ाइल पर chmod के साथ होता है।


3
मेरा मानना ​​है कि हुड के तहत, vimवास्तव में अनुमतियों को बदल रहा है और फिर इसे वापस डाल रहा है।
जोर्डनम

आप के रूप में नहीं चल रहे हैं root?
एल्विन वोंग

एल्विन, मैं इसे एक गैर-रूट उपयोगकर्ता के रूप में करता हूं। मैंने स्पष्ट करने के लिए पोस्ट को संपादित किया है।
user2141130

जवाबों:


49

आप लिनक्स में अधिकांश फाइल सिस्टम के साथ "अपरिवर्तनीय" विशेषता सेट कर सकते हैं।

chattr +i foo/bar

अपरिवर्तनीय विशेषता को हटाने के लिए, आप -इसके बजाय का उपयोग करते हैं +:

chattr -i foo/bar

किसी फ़ाइल की वर्तमान विशेषताओं को देखने के लिए, आप lsattr का उपयोग कर सकते हैं:

lsattr foo/bar

Chattr (1) मैनपेज सभी उपलब्ध विशेषताओं का एक विवरण प्रदान करता है। यहाँ के लिए विवरण है i:

   A  file with the `i' attribute cannot be modified: it cannot be deleted
   or renamed, no link can be created to this file  and  no  data  can  be
   written  to  the  file.  Only the superuser or a process possessing the
   CAP_LINUX_IMMUTABLE capability can set or clear this attribute.

3
लिनक्स पर, वह अपरिवर्तनीय ध्वज कई फ़ाइल सिस्टमों पर उपलब्ध है जो न केवल ext2 / 3/4 (कम से कम btrfs, hfsplus, jfs, nilfs2, xfs, ocfs2, ubifs, gfs2, reiserfs AFAICT को कोड के माध्यम से त्वरित रूप से देखते हैं)
Stéphane चेज़लस

@StephaneChazelas मैंने देखा कि chattrकमांड e2fsprogsमेरे सिस्टम पर पैकेज का हिस्सा था । इसीलिए मैंने वह बयान दिया। मैंने आपकी टिप्पणी के आधार पर उत्तर को अपडेट कर दिया है।
जोर्डम

यह सिम्लिंक के लिए काम नहीं करता है :-(। यह समाधान बहुत अच्छा होगा, क्योंकि मैं इससे बचना चाहता हूं कि किसी भी उपयोगकर्ता द्वारा रूट सहित
सिंप्लिन को

अपरिवर्तनीय एक इनकोड ध्वज सही है, एक xattr नहीं है? ioctl ध्वज सटीक होना चाहिए?
ytpillai

1

आप ऐसा कर सकते हैं:

  1. फ़ाइल स्वामी rootया डमी नव निर्मित उपयोगकर्ता को बदलें
  2. सही समूह रखें।
  3. chmod 440समूह द्वारा पढ़ने की अनुमति देने के लिए उपयोग करें (जो आप हैं)।

यदि सही उपयोगकर्ता इस समूह में एकमात्र नहीं है, तो आपको एक नया समूह बनाना चाहिए और उसमें केवल उसे जोड़ना चाहिए, और इसके लिए इस समूह का उपयोग करना चाहिए। हालाँकि, आप viफ़ाइल के स्वामी नहीं हैं , इसलिए आपका फ़ाइल स्वामी नहीं बदल सकता है।


3
यदि आप मूल निर्देशिका में लिख सकते हैं, तो विम फ़ाइल को हटा सकता है और एक नया बना सकता है (और यह तब होता है जब आप ऐसा करते हैं :w!)। vim निर्देशिका की अनुमतियों को अस्थायी रूप से बदलते हुए भी नहीं जाता है। इसलिए डायरेक्टरी को गैर-लेखन योग्य बनाए रखना सुरक्षित होना चाहिए।
स्टीफन चेज़लस

0

एक पूरी निर्देशिका ट्री को केवल पढ़ने के लिए:

cd <directory>
find ./ -print0 | sudo xargs -I {} -0 chattr +i {}

इसे फिर से पठनीय बनाने के लिए, इसमें बदलाव +iकरें -i

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.