আমি যে ফাইলটি নিজের কাছে রাখি না কেন তা সরানোর পরেও কেন আমি হার্ডলিঙ্ক করতে পারি না?


2

উদাহরণ লিপি:

#!/bin/sh -e 
sudo useradd -m user_a
sudo useradd -m user_b -g user_a
sudo chmod g+w /home/user_a

set +e
sudo su user_a <<EOF
cd
umask 027
>> file_a 
>> file_b
>> file_c
ls -l file_*
EOF

sudo su user_b <<EOF
cd
umask 000
rm -f file_*
ls -l ~user_a/
set -x
mv ~user_a/file_a .
cp ~user_a/file_b .
ln ~user_a/file_c .
set +x
ls -l ~/
EOF
sudo userdel  -r user_b
sudo userdel  -r user_a

আউটপুট:

-rw-r----- 1 user_a user_a 0 Jul 11 12:26 file_a
-rw-r----- 1 user_a user_a 0 Jul 11 12:26 file_b
-rw-r----- 1 user_a user_a 0 Jul 11 12:26 file_c
total 0
-rw-r----- 1 user_a user_a 0 Jul 11 12:26 file_a
-rw-r----- 1 user_a user_a 0 Jul 11 12:26 file_b
-rw-r----- 1 user_a user_a 0 Jul 11 12:26 file_c
+ mv /home/user_a/file_a .
+ cp /home/user_a/file_b .
+ ln /home/user_a/file_c .
ln: failed to create hard link ‘./file_c’ => ‘/home/user_a/file_c’: Operation not permitted
+ set +x
total 0
-rw-r----- 1 user_a user_a 0 Jul 11 12:26 file_a
-rw-r----- 1 user_b user_a 0 Jul 11 12:26 file_b
userdel: user_b mail spool (/var/mail/user_b) not found
userdel: user_a mail spool (/var/mail/user_a) not found

এটি নির্দিষ্ট কিছু সিস্টেমের জন্য নির্দিষ্ট বা সাধারণভাবে?
ইলক্কাচু

উত্তর:


5

আপনি কোন সিস্টেম চালাচ্ছেন? লিনাক্সে, /proc/sys/fs/protected_hardlinks(বা sysctl fs.protected_hardlinks) মাধ্যমে, আচরণটি কনফিগারযোগ্য ।

আচরণের বর্ণনা দেওয়া আছে proc(5):

/proc/sys/fs/protected_hardlinks(যেহেতু লিনাক্স ৩.6)
এই ফাইলটির মান 0 থাকে, তখন হার্ড লিঙ্কগুলি তৈরি করার ক্ষেত্রে কোনও বিধিনিষেধ স্থাপন করা হয় না (যেমন লিনাক্স ৩.6 এর আগে এটি theতিহাসিক আচরণ)। এই ফাইলে মানটি যখন 1 হয় তবে নিম্নলিখিত লিঙ্কগুলির মধ্যে একটি সত্য হলেই একটি হার্ড লিঙ্ক একটি টার্গেট ফাইলে তৈরি করা যেতে পারে:

  • কলিং প্রক্রিয়াটিতে CAP_FOWNER ক্ষমতা রয়েছে ...
  • এই লিঙ্কটি তৈরি করা প্রক্রিয়াটির ফাইল সিস্টেম ইউআইডি লক্ষ্য ফাইলের মালিকের (ইউআইডি) সাথে মেলে ...
  • নিম্নলিখিত সমস্ত শর্ত সত্য:
    • লক্ষ্যটি একটি নিয়মিত ফাইল;
    • লক্ষ্য ফাইলটিতে তার সেট-ব্যবহারকারী-আইডি মোড বিট সক্ষম নেই;
    • টার্গেট ফাইলটিতে তার সেট-গ্রুপ-আইডি এবং গ্রুপ-এক্সিকিউটেবল মোড বিট উভয় সক্ষম নেই; এবং
    • কলারের কাছে লক্ষ্য ফাইলটি পড়ার এবং লেখার অনুমতি রয়েছে (হয় ফাইলের অনুমতিগুলির মুখোশের মাধ্যমে বা এটির উপযুক্ত ক্ষমতা রয়েছে বলে)।

এবং এর জন্য যুক্তিটি পরিষ্কার হওয়া উচিত:

এই ফাইলে ডিফল্ট মান 0 হয় 0. মান সেট করা হার্ড-লিঙ্ক-ভিত্তিক চেক, সময় ব্যবহারের দৌড়ের কারণে সৃষ্ট সুরক্ষার সমস্যার দীর্ঘকালীন শ্রেণিকে বাধা দেয়, যা সাধারণত বিশ্ব লিখনযোগ্য ডিরেক্টরিতে দেখা যায় যেমন as / tmp

ডেবিয়ান সিস্টেমে protected_hardlinksএবং এর সাথে একই protected_symlinksডিফল্ট, সুতরাং ফাইলটিতে লিখিত অ্যাক্সেস ছাড়াই লিঙ্ক তৈরি করা কার্যকর হয় না:

$ ls -ld . ./foo
drwxrwxr-x 2 root itvirta 4096 Jul 11 16:43 ./
-rw-r--r-- 1 root root       4 Jul 11 16:43 ./foo
$ mv foo bar
$ ln bar bar2
ln: failed to create hard link 'bar2' => 'bar': Operation not permitted

protected_hardlinksশূন্যে সেট করা সীমাবদ্ধতাটি সরিয়ে দেয়:

# echo 0 >  /proc/sys/fs/protected_hardlinks 
$ ln bar bar2
$ ls -l bar bar2
-rw-r--r-- 2 root root 4 Jul 11 16:43 bar
-rw-r--r-- 2 root root 4 Jul 11 16:43 bar2

উত্তরের জন্য ধন্যবাদ. lwn.net/Articles/503671 বলছে "ব্যবহারকারী যখনই ইতিমধ্যে বিদ্যমান ফাইলের মালিক, বা যদি তারা ইতিমধ্যে বিদ্যমান ফাইলটিতে পঠন / লেখার অ্যাক্সেস পেয়ে থাকে তবে কেবলমাত্র হার্ডলিঙ্কগুলি তৈরি করার অনুমতি দেওয়া হয়" " পড়ার অনুমতি থাকার সাথে প্রয়োজনীয়তাটি পূরণ হয় না। আমি যে ফাইলটিতে অনুমতি পড়েছি তার লিঙ্ক তৈরি করার সুরক্ষা বিষয়গুলি কী কী?
পিএসকোকিক

@PSKocik: আমি কঠিন লিঙ্ক তৈরি করতে পারেন /tmpযে ফাইল আমি মালিক না, তারপর আমি হার্ড কোনো সর্বজনীনভাবে পাঠযোগ্য মালিকানাধীন ফাইল লিঙ্ক করতে পারেন rootমধ্যে /tmp, এবং যে ফাইল আমার পছন্দের নাম দিন। সম্ভবত এটি কোনওভাবে কাজে লাগানো যেতে পারে? [অন্যদিকে: বিমূর্তভাবে চিন্তাভাবনা করা, সম্ভবত ফাইল সিস্টেমের মালিকানা ধারণার সাথে অধিকারের সংযোগের ধারণাটি অন্তর্ভুক্ত করা উচিত ?]
এমপিবি

-1

সাধারণত, প্রতিটি ফাইলের একটি ডিরেক্টরি এন্ট্রি থাকে (ব্যতিক্রম রয়েছে, তবে এটিতে যাওয়ার দরকার নেই)।

ডিরেক্টরি এন্ট্রি মূলত একটি নাম + সংখ্যা জুটি; ফাইলের নাম এবং আই-নাম্বার নামক একটি নম্বর। এটি আই-তালিকা নামক কোনও কিছুর মধ্যে একটি সূচক যা আই-নোড নামে কাঠামোতে প্রতিটি ফাইল সম্পর্কে সমস্ত আসল বিবরণ যুক্ত করে

আই-নোডে অন্যান্য জিনিসগুলির মধ্যে রয়েছে ফাইলটির মালিকানা সম্পর্কিত বিশদ। ফাইলের মালিক এটি কার্যকরভাবে 'মালিকানাধীন' ' এর ক্ষেত্রগুলির একটি হ'ল ব্যবহারের গণনা যা সাধারণত 1 তে সেট থাকে।

যখন একটি হার্ড লিঙ্ক তৈরি করা হয়, এটি কেবলমাত্র অন্য নাম + সংখ্যা জুটি, প্রথম থেকে পৃথক পৃথক। সেই সময়ে ব্যবহারের সংখ্যা 1 দ্বারা বৃদ্ধি করা হয়; যখন হার্ড লিঙ্কটি (বা মূল ডিরেক্টরি এন্ট্রি, কারণ তাদের উভয়ের সমান মর্যাদা রয়েছে) সরিয়ে ফেলা হয়, তখন ব্যবহারের সংখ্যা 1 টি হ্রাস পায় যখন এটি শূন্য হয়, ফাইলটি অদৃশ্য হয়ে যায়। আপনি এ থেকে দেখতে পাচ্ছেন যে একটি হার্ড লিঙ্ক তৈরি করার অর্থ হ'ল আপনি যখন আই-নোডের মালিক ছিলেন না তখন আপনাকে পরিবর্তন করতে সক্ষম হবেন।

ইউএনআইএক্স-এ বেশ কয়েক বছর ধরে এটি একটি সমস্যা ছিল এবং এটি প্রতীকী লিঙ্ক (বা সিমলিংক , যা কখনও কখনও নরম লিঙ্ক নামে পরিচিত ) প্রবর্তনের অন্যতম কারণ ছিল। এটি একটি নাম + নামের জুটি, মূলত কেবলমাত্র মূল ফাইলটির জন্য একটি উপনাম সরবরাহ করে। আই-নোডে কিছুই পরিবর্তন হয় না; এটি কেবল একটি পুনঃনির্দেশ। খারাপ দিকটি হ'ল মূল ফাইলটি সিমলিংকটি অদৃশ্য না করে মোছা যায় এবং এটি অস্তিত্বহীন ফাইলটির দিকে ইশারা করে শেষ হয়।


1
গল্পটি এর চেয়ে জটিল। হ্যাঁ এটি সত্য যে আপনি যদি ফাইলের মালিক না হন তবে আপনি ফাইলটিতে মেটাডেটা পরিবর্তন করতে পারবেন না, তবে traditionতিহ্যগতভাবে এটি লিঙ্ক কাউন্টে প্রযোজ্য নয়। সঠিক উত্তরের জন্য ইলক্কাছুর উত্তর দেখুন।
জোহান ম্যারেইন

-1

থেকে man 2 link: "... উভয় নামই একই ফাইলটিকে বোঝায় (এবং একই অনুমতি এবং মালিকানা রয়েছে)"

আপনার কাছে ফাইলটি পড়ার / অনুলিপি / সরানোর অনুমতি থাকলেও আপনি বিভিন্ন অনুমতি বা মালিকানা সহ একই ফাইলের দুটি লিঙ্ক তৈরি করতে পারবেন না , যে মোড , ইউইডি এবং জিড আপনি যে ইনড থেকে লিঙ্ক তৈরি করছেন সেখানে সংরক্ষণ করা হবে দুটি পৃথক ডিরেক্টরি, ডিরেক্টরি এন্ট্রি নিজেই নয়।

বিবেচনা:

$ touch file_a
$ touch file_b
$ ln file_a file_A
$ ls -iln
total 0
1310731 -rw-rw-r-- 2 1000 1000 0 Jul 11 08:45 file_a
1310731 -rw-rw-r-- 2 1000 1000 0 Jul 11 08:45 file_A
1320710 -rw-rw-r-- 1 1000 1000 0 Jul 11 08:45 file_b

======= ===================================== ======
^       ^                                     ^
|       |                                     \-- names, stored in directory
|       \-- file metadata, stored in inode
\-- inode number, stored in directory and pointing to inode

এই উদাহরণে, file_aএবং file_Aএকই ইনোড নম্বর রয়েছে, সুতরাং অগত্যা একটি ইনোডে সমস্ত একই বৈশিষ্ট্য সঞ্চিত থাকতে হবে।


1
ওপি বিভিন্ন অনুমতি বা মালিকানার সাথে একটি লিঙ্ক তৈরি করার চেষ্টা করছে না, কেবল ফাইলটির একটি লিঙ্ক। সঠিক ব্যাখ্যার জন্য @ ইলক্কাচুর উত্তর দেখুন।
জোহান ম্যারিএন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.