ভিআই ফাইল কেবল পঠনযোগ্য হওয়া সত্ত্বেও ফাইলটিতে লিখতে পারে


12

কেবলমাত্র পড়ার অনুমতি নিয়ে কোনও ফাইল কীভাবে তৈরি করবেন তা নিম্নলিখিত উদাহরণটি দেখায়। যেমন আমরা দেখতে পাচ্ছি, আমি যখন ইকো কমান্ড পেয়েছি তখন এই ফাইলটিতে লেখার চেষ্টা করি Permission denied,।

কিন্তু কেন, কেস যে আমরা ষষ্ঠ ব্যবহার, আমরা কি না পেতে Permission denied? এখানে যেমন দেখা যায়, কেবল ফাইলটি কেবল পঠনযোগ্য হলেও আমরা ফাইলটিতে লিখতে পারি।

এখানে কি হচ্ছে? এটি কি ভিআই বাগ?

[admin@madona-machine1 ~]$ touch test-file
[admin@madona-machine1 ~]$ ls -ltr
total 0
-rw-r--r-- 1 admin admin 0 Apr 13 07:32 test-file
[admin@madona-machine1 ~]$ chmod -w  test-file
[admin@madona-machine1 ~]$ ls -ltr
total 0
-r--r--r-- 1 admin admin 0 Apr 13 07:32 test-file
[admin@madona-machine1 ~]$ echo try_to_write > test-file
-bash: test-file: Permission denied
[admin@madona-machine1 ~]$ vi test-file

I am good singer,

 ~
 ~
 ~
 ~
 ~
 ~
 ~                                                
   "test-file" 1L, 4C written

1
এফওয়াইআই এর জন্য একটি বিটা এসই সাইট রয়েছে - vi.stackexchange.com
রায়স্টাফেরিয়ান

উত্তর:


27

দ্রষ্টব্য : লিগ্যাসি লাইসেন্সিং কারণে, বেশিরভাগ জিএনইউ / লিনাক্স বিতরণে বিল জয়ের লিখিত মূল vi প্রোগ্রাম অন্তর্ভুক্ত করে না। পরিবর্তে, vi কমান্ডটি ভিআই-সামঞ্জস্যতা মোডে ভিম চালিয়ে সরবরাহ করা হয়। নিম্নলিখিত উত্তরটি তার ভি-সামঞ্জস্যতা মোডের সাথে ভিম চালানোর উপর ভিত্তি করে।

কেবল পঠনযোগ্য ফাইলটি সংশোধন করা হচ্ছে

ভিম ব্যবহারকারীকে সাবধান করে যদি তারা কেবল-পঠনযোগ্য ফাইলের বাফারটি পরিবর্তন করে W10: Warning: Changing a readonly file,। যদি ব্যবহারকারী এই ফাইলটিতে লেখার চেষ্টা করে তবে তারা নিম্নলিখিত ত্রুটি বার্তাটি পান 'readonly' option is set (add ! to override),।

যখন পিতামাতার ডিরেক্টরিটি ভিম ব্যবহারকারীর দ্বারা লিখিত হয়

ভিম, সহায়ক হচ্ছেন, ব্যবহারকারীকে জানতে দিন যে তারা আদেশের সাথে বিস্মৃত চিহ্নটি যুক্ত করে লেখার জন্য জোর দিয়ে জোর করতে !পারে w। যদি রাইট কমান্ডের এই বলিষ্ঠ সংস্করণটি ব্যবহার করা হয়, তবে ভিম মূল ফাইলটি মুছে ফেলবে (যদি ভিম-কেবলমাত্র backupবিকল্প সেটটি দিয়ে উইম ব্যবহার করে থাকে তবে মূল ফাইলটিকে প্রকৃতপক্ষে নামটির নামকরণ করা হবে ব্যাকআপ ফাইলের মতোই)। তখনই প্রর্দশিত (সৃষ্টি) একটি নতুন ফাইল সঙ্গে একই নামের মূল হিসেবে এবং এই নতুন ফাইল তার বাফার বিষয়বস্তু লিখেছেন। এটি ভিম চালানোর আগে এবং পরে ফাইলটির ইনোড পরীক্ষা করে পর্যবেক্ষণ করা যেতে পারে :

$ ls -l --inode t

131529 -r--r--r-- 1 anthony anthony 0 Apr 13 09:23 t

$ vi t
$ ls -l --inode t

131649 -r--r--r-- 1 anthony anthony 4 Apr 13 09:23 t

দ্রষ্টব্য: এটি ফাইলের অনুমতি এবং মালিকানা এবং ব্রেক (প্রতীকী) লিঙ্কগুলিও পরিবর্তন করতে পারে, উদাহরণস্বরূপ, যদি মূল ফাইলটি অন্য কোনও ব্যবহারকারীর মালিকানাধীন থাকে তবে নতুন ফাইলটি ভিম চলমান ব্যবহারকারীর মালিকানাধীন হবে।

কোনও প্রক্রিয়া কেবল তখনই এটি করতে পারে যদি এতে ফাইলের প্যারেন্ট ডিরেক্টরিতে লেখার অনুমতি থাকে। সাধারণভাবে, কোনও প্রোগ্রাম কোনও ফাইল কোনও ফাইল সংশোধন করতে না পারে তা নিশ্চিত করার জন্য, ফাইলটি ও তার মূল ডিরেক্টরি উভয়েরই অনুমতি সুরক্ষিত করা উচিত।

যখন পিতামাতার ডিরেক্টরিটি ভিম ব্যবহারকারীর দ্বারা লিখিত না হয়

যাইহোক, এমনকি এই ক্ষেত্রেও, ভিম এখনও জিদগ্রাহী ব্যবহারকারীকে ফাইলটি ওভার-লিখনে সহায়তা করার জন্য যথাসাধ্য চেষ্টা করে। যদি ভিমের ব্যবহারকারীর ফাইলটির মালিকানা থাকে, অল্পক্ষণের জন্য ফাইলের অনুমতি ( chmodসিস্টেম কল ব্যবহার করে ), ফাইলটিতে বাফার লিখে, ফাইলটি বন্ধ করে এবং তারপরে পরিবর্তন করে ভিমের কেবল পঠনযোগ্য পিতামাতার ডিরেক্টরি সীমাবদ্ধতাটি পাওয়া যাবে অনুমতি ফিরে। স্ট্রেসের মাধ্যমে vi চালানোর সময় করা সিস্টেম কলগুলির একটি সূত্র এখানে রয়েছে strace -o ../vi.trace vi t:

getuid()                                = 501
chmod("t", 0100644)                     = 0
open("t", O_WRONLY|O_CREAT|O_TRUNC, 0644) = 4
write(4, "I am good singer,\n", 18)     = 18
fsync(4)                                = 0
close(4)                                = 0
chmod("t", 0100444)                     = 0

দ্রষ্টব্য: যদি ভিম ব্যবহারকারী কোনও ফাইল সম্পাদনা করেন তবে ভিম ফাইলের অনুমতিগুলি পরিবর্তন করতে পারবেন না বলে তাদের মালিকানা নেই don't

অভিযোজ্য বস্তু

ফাইলটি সংশোধন করা যায় না তা নিশ্চিত হওয়ার জন্য (একটি জিএনইউ / লিনাক্স সিস্টেমে), chattrসুপার-ইউজার হিসাবে কমান্ডটি চালান :

sudo chattr +i filename

থেকে man chattr:

'I' বৈশিষ্ট্যযুক্ত কোনও ফাইল পরিবর্তন করা যায় না: এটি মোছা বা পুনরায় নামকরণ করা যায় না, এই ফাইলটিতে কোনও লিঙ্ক তৈরি করা যায় না এবং ফাইলটিতে কোনও ডেটাও লেখা যায় না। কেবল সুপারইজার বা CAP_LINUX_IMMUTABLE সক্ষমতা সম্বলিত একটি প্রক্রিয়া এই বৈশিষ্ট্যটি সেট বা সাফ করতে পারে।


2
পবিত্র ধোঁয়া, যে পুরো ছিল!
ক্যামিল গৌডেসুন

4
@ ক্যামিলগৌডেসুন আমি আমার উত্তরের প্রথম সংস্করণ পোস্ট করার পরে, আমি কিছু পরীক্ষা-নিরীক্ষা করেছি এবং বিভিন্ন পরিস্থিতিতে পর্দার আড়ালে এটি কী করছে তা দেখার জন্য স্ট্রেসের মাধ্যমে প্রায় এক ঘন্টা ব্যয় করে শেষ করেছি (অনুমতিগুলির পৃথক অনুমতি এবং উভয় ফাইলের মালিকানা এবং মূল নির্দেশিকা). আমি মাঝে মাঝে দূরে সরে যাই তবে একবার উত্তর প্রকাশের পরে আমি নিশ্চিত হয়েছি যে আমি যা বলছিলাম তা সঠিক ছিল।
অ্যান্টনি জিওগেইগান 19

5

সর্বাধিক সব যদি viবাস্তবায়নের করতে প্রতিরোধ করা যদি আপনি একটি নিয়মিত পারেন মত কমান্ড রক্ষা ব্যবহার ফাইলটি লিখতে ZZ, :w, :wqবা :xসঙ্গে, যেমন vim:

:w
E45: 'readonly' option is set (add ! to override)

অন্যদিকে, আপনি যদি viকিছু বলার মতো :x!বা ব্যবহার করে ফাইলটির অনুমতি থাকা সত্ত্বেও ফাইলটি লিখতে বলেন :wq!তবে সম্পাদকটি ফাইলটিকে লেখার অনুমতি দেওয়ার জন্য অনুমতিগুলি সাময়িকভাবে শিথিল করছেন:

...
stat("test-file", {st_mode=S_IFREG|0444, st_size=7, ...}) = 0
getuid()                                = 1000
chmod("test-file", 0100644)             = 0
...
open("test-file", O_WRONLY|O_CREAT|O_TRUNC, 0644) = 4
write(4, "I am good singer,\n", 18)               = 18
fsync(4)                                = 0
close(4)                                = 0
chmod("test-file", 0100444)             = 0
....

সেক্ষেত্রে ইনোড নম্বরটি অপরিবর্তিত রয়েছে।

শেষ পর্যন্ত, এটি কোনও বাগ নয় যেমন আপনাকে ফাইলের অনুমতিগুলি পরিবর্তন করার অনুমতি দেওয়া হয় না, আপনি এটির মাধ্যমে কোনও পরিবর্তন করতে পারবেন না vi


Hah! আমি আমার উত্তর পোস্ট করার পরে, আমি কিছু পরীক্ষা-নিরীক্ষা করেছিলাম এবং স্ট্রিমের মাধ্যমে ভিমে চালিয়ে ঘন্টার পর ঘন্টা ব্যয় করে শেষ করে দেখি যে এটি বিভিন্ন পরিস্থিতিতে পর্দার আড়ালে কী করছে (ফাইলের এবং অনুমতি উভয়ের ডিরেক্টরিগুলির অনুমতিের পৃথক অনুমতি)। আমি আমার পরীক্ষাগুলির ফলাফলগুলির সংক্ষিপ্তসার শেষ করে কেবলমাত্র আপনার উত্তরটি দেখেছি। এটি একটি ভাল শেখার অভিজ্ঞতা ছিল।
অ্যান্টনি জিওগিগান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.