ফাইল অনুমতিগুলি কীভাবে সিমলিংকে প্রযোজ্য?


93

ধরা যাক আপনার এই কাঠামো আছে:

+ directory
-- file1
-- file2
-- file3 -> /tmp/file3

file3file3এটি সিস্টেমের অন্য কোথাও একটি লিঙ্ক ।

এবার আসি আমি chmod 777ডিরেক্টরি এবং এর ভিতরে থাকা সমস্ত বিষয়বস্তু বলি । আমার না file3/tmpঐ অনুমতি গ্রহণ? এছাড়াও, আসুন আমরা বলি যে আমাদের একই অবস্থা কিন্তু বিপরীত।

/tmp/file3 -> /directory/file3

যদি আমি লিঙ্কযুক্ত ফাইলে অনুমতিগুলি প্রয়োগ করি, তবে লিঙ্কটি কীভাবে প্রভাব ফেলবে?


অনুমতিগুলি কেবলমাত্র ফাইলটি প্রভাবিত করে, সিমলিংকটি নয়।
বারাবুম

উত্তর:


90

এটি আপনি কীভাবে কল করবেন chmodএবং যে প্ল্যাটফর্মটি আপনি চলছে তার উপর নির্ভর করে।

উদাহরণস্বরূপ, লিনাক্স সিস্টেমে এটি man chmodবলে:

chmod প্রতীকী লিঙ্কগুলির অনুমতিগুলি কখনই পরিবর্তন করে না; chmod সিস্টেম কল তাদের অনুমতি পরিবর্তন করতে পারবে না। প্রতীকী লিঙ্কগুলির অনুমতিগুলি কখনই ব্যবহার করা হয় না বলে এটি কোনও সমস্যা নয়। তবে, কমান্ড লাইনে তালিকাভুক্ত প্রতিটি প্রতীকী লিঙ্কের chmodজন্য, পয়েন্ট-টু ফাইলের অনুমতিগুলি পরিবর্তন করে। বিপরীতে, chmodপুনরাবৃত্ত ডিরেক্টরি ডিরেক্টরি ট্র্যাভারসালের সময় প্রতীকী লিঙ্কগুলি উপেক্ষা করে।

তবে, ম্যাকের ক্ষেত্রে, chmod এই (থেকে man chmod) বিকল্পগুলির সাহায্যে প্রতীকী লিঙ্কের অনুমতিগুলি সংশোধন করতে ব্যবহার করা যেতে পারে :

-h যদি ফাইলটি একটি প্রতীকী লিঙ্ক হয় তবে লিঙ্কটি যে ফাইলটি দেখায় তার চেয়ে লিঙ্কটির মোডটি নিজেই পরিবর্তন করুন।

উদাহরণস্বরূপ, ধরে নেওয়া যাক আপনি এই উত্তরটির বাকি অংশের জন্য একটি লিনাক্স মেশিনে রয়েছেন।

প্রথম ক্ষেত্রে যদি আপনি chmod -R 777 directoryঅনুমতিগুলি পুনরাবৃত্তভাবে পরিবর্তন করতে দৌড়ে যান তবে লিঙ্ক লক্ষ্যটি প্রভাবিত হবে না, তবে আপনি যদি chmod 777 directory/*এটি করেন তবে তা হবে।

আপনি যদি সরাসরি লিঙ্ক টার্গেটে অনুমতিগুলি পরিবর্তন করেন তবে সেই অনুমতিগুলি বহন করবে (যেহেতু ম্যান পেজ এবং বারাবুম যেমন বলে, আসল লিঙ্কের অনুমতিগুলি কোনও কিছুর জন্য ব্যবহৃত হয় না)।


উদাহরণের জন্য পরীক্ষার লগ:

$ mkdir dir && touch dir/file{1,2} /tmp/file3 && ln -s {/tmp,dir}/file3
$ ls -l dir/* /tmp/file3
-rw-r--r-- 1 user group  0 2011-06-27 22:02 /tmp/file3
-rw-r--r-- 1 user group  0 2011-06-27 22:02 dir/file1
-rw-r--r-- 1 user group  0 2011-06-27 22:02 dir/file2
lrwxrwxrwx 1 user group 10 2011-06-27 22:02 dir/file3 -> /tmp/file3

$ chmod -R 777 dir && ls -l dir/* /tmp/file3
-rw-r--r-- 1 user group  0 2011-06-27 22:02 /tmp/file3
-rwxrwxrwx 1 user group  0 2011-06-27 22:02 dir/file1
-rwxrwxrwx 1 user group  0 2011-06-27 22:02 dir/file2
lrwxrwxrwx 1 user group 10 2011-06-27 22:02 dir/file3 -> /tmp/file3

$ chmod 700 dir/* && ls -l dir/* /tmp/file3
-rwx------ 1 user group  0 2011-06-27 22:02 /tmp/file3
-rwx------ 1 user group  0 2011-06-27 22:02 dir/file1
-rwx------ 1 user group  0 2011-06-27 22:02 dir/file2
lrwxrwxrwx 1 user group 10 2011-06-27 22:02 dir/file3 -> /tmp/file3

2
আমার কাছেও তা অবাক হয়েছিল। পরবর্তী প্রশ্ন: সিমলিংকের অনুমতিগুলির অর্থ কে ?
এডওয়ার্ড ফালক

@ অ্যাডওয়ার্ডফাল্ক সিমলিংক অনুমতিগুলি নিষিদ্ধ নয়, কারণ লিঙ্কযুক্ত ফাইল থেকে অনুমতি পেতে সমস্ত কিছু এটি অতিক্রম করতে সক্ষম হতে হবে।
ওয়ালফ

5

বারাবুম এবং পেথের উত্তর উভয়ই সঠিক: প্রতীকী লিঙ্কগুলিতে অনুমতি বিটগুলি অপ্রাসঙ্গিক (ম্যাকোস ব্যতীত; নীচে দেখুন), এবং একটি প্রতীকী লিঙ্কে অনুমতি পরিবর্তন - chmodকমান্ড-লাইন সরঞ্জাম দ্বারা বা chmod()সিস্টেম কল দ্বারা - কেবল হিসাবে কাজ করবে যদি এটি প্রতীকী লিঙ্কের লক্ষ্যটির বিরুদ্ধে করা হয়।

সিমিলিংক () সিস্টেম কলের SUSv4 / POSIX.1-2008 বিবরণ উদ্ধৃত করতে :

নির্মিত প্রতীকী লিঙ্কের জন্য ফাইল মোড বিটের মানগুলি নির্ধারিত। POSIX.1-2-2008 দ্বারা নির্দিষ্ট সমস্ত ইন্টারফেসগুলি এমন আচরণ করবে যে প্রতীকী লিঙ্কগুলির বিষয়বস্তু সর্বদা পড়তে পারে, ব্যতীত স্ট্যাট কাঠামোর st_mode ক্ষেত্রে ফাইল মোড বিটের মান অনির্দিষ্ট না করে except

এখানে, "অনির্ধারিত" প্রতিটি বাস্তবায়নের জন্য ব্যাখ্যাের স্থান ছেড়ে যায়। সুনির্দিষ্ট:

  • লিনাক্সে (ext4fs ব্যবহার করে পরীক্ষিত), stat()প্রত্যাবর্তন করে st_mode=0777, যখন সিমলিংক তৈরি হয়েছিল তখন উমাস্ক কী ছিল তা বিবেচনাধীন নয়; ls -lতাই সর্বদা lrwxrwxrwxপ্রতীকী লিঙ্কগুলির জন্য প্রদর্শন করে ।
  • ম্যাকোস (এইচএফএস) এবং ফ্রিবিএসডি (ইউএফএস এবং জেডএফএস উভয়) তে একটি প্রতীকী লিঙ্কটির নিজস্ব অনুমতি রয়েছে: chmod -hউপরে উল্লিখিত কমান্ডটি এই লিঙ্কের অনুমতিটি পরিবর্তন করতে পারে (যা অভ্যন্তরীণভাবে lchown()এটি অর্জনের জন্য একটি নন-পসিক্স সিস্টেম কল ব্যবহার করে ), এবং stat()সিস্টেমটি কল এই মানটি প্রদান করে st_mode

লিনাক্স এবং ফ্রিবিএসডি-তে প্রতীকী লিঙ্কগুলি সর্বদা অনুসরণ করা যেতে পারে, যেমন পসিক্স দ্বারা নির্দিষ্ট। বিশেষত, ফ্রিবিএসডি-তে, এর অর্থ হ'ল অ্যাক্সেস নিয়ন্ত্রণে একটি প্রতীকী লিঙ্কের ফাইল মোডের কোনও প্রভাব নেই।

অন্যদিকে, ম্যাকোস POSIX কে সামান্য বিরতি দেয়। যদিও একটি প্রতীকী লিঙ্কটি তার পড়ার অনুমতি নির্বিশেষে অনুসরণ করা যেতে পারে তবে ব্যবহারকারীর পড়ার অনুমতি না থাকলে (অনুমতি প্রত্যাখ্যান) readlink()ব্যর্থ হয় EACCES:

$ sudo ln -shf target symlink
$ sudo chmod -h 444 symlink
$ ls -l symlink
lr--r--r--  1 root  staff  1 Mar 14 13:05 symlink -> target
$ sudo chmod -h 000 symlink
$ ls -l symlink

ls: symlink: Permission denied
l---------  1 root  staff  1 Mar 14 13:05 symlink
$ echo kthxbye > target
$ cat symlink
kthxbye

(নোট করুন যে -> targetঅংশটি দ্বিতীয় ls -lকমান্ডের আউটপুট থেকে অনুপস্থিত এবং এটি cat symlinkএখনও সফল হয়েছে এবং targetফাইলটির বিষয়বস্তু মুদ্রিত হয়েছে যদিও ব্যবহারকারীর তাতে পড়ার অনুমতি নেই symlink))

নেটবিএসডি স্পষ্টতই একটি বিশেষ মাউন্ট অপশন প্রস্তাব করে sympermযা সেট করা থাকলে সিম্বলিক লিঙ্কটি পড়ার / চালানোর অনুমতিগুলি নিয়ন্ত্রণ করতে readlink()এবং ট্র্যাভারসালকে লিঙ্ক করার অনুমতি দেয় ।


-1
  1. লিঙ্ক ফাইলটি ফেলে দিন (এটি কোনও প্রক্রিয়া দ্বারা ব্যবহৃত না হয় তা নিশ্চিত করার পরে)
  2. অমাস্ককে এমনভাবে সেট করুন যাতে 777-umask = প্রয়োজনীয় ফাইল অনুমতি
  3. নতুন করে লিঙ্ক ফাইল তৈরি করুন

3
কিভাবে এই প্রশ্নের উত্তর দেয়?
jww 20'16
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.