এমভি বনাম সিপি: ফলাফল ফাইলটি সম্পর্কে কী আলাদা?


3

আমার একটি ত্রুটি ছিল যেখানে কিছু অ্যাপ্লিকেশনের জন্য একটি কনফিগারেশন ফাইল সঠিকভাবে অন্তর্ভুক্ত করা হচ্ছিল না, সুতরাং ফাইলটির সমস্যাযুক্ত লাইনটি আলাদা করার চেষ্টা করার জন্য আমি পুরানো বিষয়বস্তুগুলিকে একবারে কয়েক লাইনে অনুলিপি করেছিলাম।

শেষ পর্যন্ত, আমি ফাইলটির সঠিক নকল তৈরি করে দিয়েছিলাম তবে পুরানোটি এখনও কাজ করবে না যেখানে নতুনটি পুরোপুরি ভাল কাজ করেছে worked

আরও উল্লেখযোগ্য বিষয়, আমি যদি mvফাইলটি এটি সরিয়ে রাখতে চাইলে যে জায়গাটি সঞ্চিত করেছি সেখান থেকে ফাইলটি সরিয়ে নিতে আমি যদি কমান্ডটি ব্যবহার করি তবে এটি ত্রুটি ঘটায়। আমি যদি cpফাইলটি যেখানে রাখতে চান সেখানে কপি করতে ব্যবহার করি তবে কোনও ত্রুটি নেই।

স্পষ্টতই, পছন্দ মতো diff, fileবা ls -l, দুটি ফাইলের মধ্যে কোনও পার্থক্য প্রকাশ করে না কারণ একটি অপরটির অনুলিপি , ইনসোফার হিসাবে cpফাইলটির একটি অনুলিপি তৈরি করে

আমি ফাইল সম্পর্কে খুব বেশি তথ্য ভাগ করতে পারি না কারণ এটি একটি কাজের জিনিস। নীচের লাইনটি হ'ল কমান্ডগুলি cp fileA fileBএবং mv fileA fileBএকটি "পৃথক" ফাইলবি উত্পাদন করে। আমার সেরা অনুমানটি ফাইলবি থেকে কিছু সুপার নিম্ন-স্তরের বৈশিষ্ট্যটি পিছনে রেখে গেছে cp(এমনকি cp -pএকই আচরণ তৈরি করে)।

ফলাফলের ফাইলটির সঠিক বিষয়বস্তুর সাথে সম্পর্কিত, এমভি সিপির চেয়ে আলাদা কী করে?

সম্পাদনা: এর সাথে ls -l:

-rw-r--r--. 1 root root 3389 Aug  8 22:53 fileA
-rw-r--r--. 1 root root 3389 Aug  8 23:03 fileB

সম্পাদনা: অ্যাপ্লিকেশনটি মাইএসকিএল এবং ফাইলটি একটি .cnf ফাইল এবং এই কনফিগারেশন ফাইলের আইটেমটি বিশেষভাবে আগ্রহী ছিল মাস্টার-স্লেভ ডাটাবেসের প্রতিরূপে ব্যবহৃত বাইনারি লগের নাম। "ত্রুটি "টি হ'ল" আপনি বাইনারি লগিং ব্যবহার করছেন না "কারণ কোনও বাইনারি লগ নেই কারণ আইটেমটি মাইএসকিএল দ্বারা" পড়া হয়নি "।

আমার প্রাথমিক ধারণাটি ছিল কনফিগারেশনের ফাইলটিতে একটি সিনট্যাক্স ত্রুটি ছিল যা পুরো জিনিসটি পড়তে না পেরেছিল, এটিই আমাকে পাঠ্যের ব্লকগুলি অনুলিপি করে ম্যানুয়ালি এটি পুনরায় তৈরি করতে পরিচালিত করেছিল

সম্পাদনা: কোথাও পাচ্ছেন ... পরিশেষে ফাইলগুলি সম্পর্কে কিছু আলাদা।

ls -lZ

-rw-r--r--. root root unconfined_u:object_r:user_home_t:s0 server.cnf.bad
-rw-r--r--. root root unconfined_u:object_r:mysqld_etc_t:s0 server.cnf.good

আপনি কি ফাইলটির মালিকানা পরীক্ষা করেছেন?
আর্ট গার্টনার

আপনি কি cp -pনিয়মিত ব্যবহারকারী হিসাবে চালান ? দেখুন কেন একজন সাধারণ ব্যবহারকারী chownকোনও ফাইল করতে পারেন না ? সাধারণভাবে, আপনি মূল cp -pনা থাকলে মালিকানা রক্ষা করবেন না; mvইচ্ছাশক্তি.
কামিল ম্যাকিয়েরোভস্কি

1
এর cp -aবদলে কী হবে cp -p?
কামিল ম্যাকিয়েরোভস্কি

1
"সঠিকভাবে অন্তর্ভুক্ত করা হচ্ছে না" এর অর্থ কী? আপনি যদি আসলটির সাথে ঠিক কী ভুল হয় ঠিকঠাক করে বলেন তা সাহায্য করতে পারে।
স্টিভ স্মিথ

1
সেলিনাক্সের সাথে (বেশিরভাগই আরএইচইল এবং ডেরিভেটিভসে ডিফল্ট), এমনকি প্রসঙ্গটিও পরীক্ষা করে দেখতে হবে:ls -lZ
এবি

উত্তর:


3

টি এল; ডিআর: একটি সিস্টেম যেখানে SELinux- র ব্যবহার করা হচ্ছে, ফাইল সিস্টেম দ্বারা ব্যবহৃত (যেমন: ডেমন) অনুলিপি করা বা নিয়ে সরানো cp -aZএবং mv -Zপরিবর্তে cp -aএবং mv। যদি এটি না করা হয়, তবে সিস্টেমটিকে ডিফল্ট SELinux প্রসঙ্গে পুনরুদ্ধার করতে বলার জন্য কেবল একটি restorecon -v -rবা restorecon -v -F -rগন্তব্যস্থলে ব্যবহার করা উচিত । restoreconকী কনফিগারেশন ফাইলগুলিতে কাজ করে এমন স্ক্রিপ্টের শেষে ব্যবহার করা সর্বদা একটি ভাল ধারণা ।

আরএইচইএল এবং সুতরাং এর বেশিরভাগ ডেরাইভেটিভস ডিফল্টরূপে সেলইনাক্স ব্যবহার করে

সুতরাং আপনার সমস্যা সমাধানের জন্য, যদি আপনার সিস্টেমটি আরএইচইল ভিত্তিক এবং mariadb-serverপ্যাকেজটি ব্যবহার করে থাকে তবে ফাইলটি সঠিক জায়গায় উপস্থিত থাকলে কেবল চূড়ান্ত পদক্ষেপে করুন :

# restorecon -v -F /etc/my.cnf.d/server.cnf
Relabeled /etc/my.cnf.d/server.cnf from unconfined_u:object_r:user_home_t:s0 to system_u:object_r:mysqld_etc_t:s0

(দ্রষ্টব্য যে এটি ছাড়া কনফিগার হওয়াতে -Fপরিবর্তন হবে না common সাধারণ সিস্টেমগুলির জন্য এটি কোনও ব্যাপার নয় the পার্থক্য সম্পর্কে আমার জ্ঞান এবং কেন এটি গুরুত্বপূর্ণ নয়) এটি এতদূর যায় না)।unconfined_usystem_u

অন্য জায়গায় ফাইলের উপর সঠিক প্রসঙ্গ স্থাপন করা আরও কাজ হবে । chconএটি করতে পারে (হয় -u -tইত্যাদি দিয়ে তা উল্লেখ করে , আরও সহজেই অন্য ফাইল থেকে প্রসঙ্গটি অনুলিপি করে --reference):

# ls -lZ /home/test/server.cnf.bad
-rw-r--r--. 1 root root unconfined_u:object_r:user_home_t:s0 744 Apr 30  2017 /home/test/server.cnf.bad
# chcon -v -u system_u -t mysqld_etc_t /home/test/server.cnf.bad 
changing security context of '/home/test/server.cnf.bad'
# ls -lZ /home/test/server.cnf.bad
-rw-r--r--. 1 root root system_u:object_r:mysqld_etc_t:s0 744 Apr 30  2017 /home/test/server.cnf.bad

আপনার যদি SELinux সমস্যা সন্দেহ হয় তবে আপনার প্রক্রিয়া বা ফাইল সম্পর্কিত /var/log/audit/audit.logশব্দটি দিয়ে প্রবেশের জন্য পরীক্ষা deniedকরুন। আপনি সর্বদা অস্থায়ীভাবে SELinux কে ক্রিয়াকলাপের অনুমতি দিতে বলুন এবং তারপরে যথাক্রমে setenforce Permissiveএবং setenforce Enforcingআচরণের তুলনা করার জন্য এগুলি পুনরুদ্ধার করতে পারেন। Permissiveবিশেষত উত্পাদন জন্য এটি ছেড়ে না ।

বিভিন্ন ব্যাখ্যা নিম্নলিখিত ...

উদাহরণ এবং কনফিগারেশন ফাইলগুলিতে কাজ করার সময় কী করা উচিত

বিভিন্ন cpবিকল্পের সাথে এবং mvসেলইনাক্স সক্ষম সিস্টেমে বাহাওয়ের উদাহরণ :

$ id
uid=1034(test) gid=1034(test) groups=1034(test)
$ pwd
/home/test
test@glasswalker:~$ ls -lZ foo
-rw-r--r--. 1 test test unconfined_u:object_r:user_home_t:s0 0 Aug 11 11:25 foo
$ cp foo /tmp/foo1
$ cp --preserve=context foo /tmp/foo2
$ cp -a foo /tmp/foo3
$ cp -aZ foo /tmp/foo4
$ mv foo /tmp/foo5
$ ls -lZ /tmp/foo?
-rw-r--r--. 1 test test unconfined_u:object_r:user_tmpfs_t:s0 0 Aug 11 11:25 /tmp/foo1
-rw-r--r--. 1 test test unconfined_u:object_r:user_home_t:s0  0 Aug 11 11:25 /tmp/foo2
-rw-r--r--. 1 test test unconfined_u:object_r:user_home_t:s0  0 Aug 11 11:25 /tmp/foo3
-rw-r--r--. 1 test test unconfined_u:object_r:user_tmpfs_t:s0 0 Aug 11 11:25 /tmp/foo4
-rw-r--r--. 1 test test unconfined_u:object_r:user_home_t:s0  0 Aug 11 11:25 /tmp/foo5
$ touch bar
$ ls -lZ bar
-rw-r--r--. 1 test test unconfined_u:object_r:user_home_t:s0 0 Aug 11 11:49 bar
$ mv -Z bar /tmp
$ ls -lZ /tmp/bar
-rw-r--r--. 1 test test unconfined_u:object_r:user_tmpfs_t:s0 0 Aug 11 11:49 /tmp/bar

সুতরাং যখন সুরক্ষা প্রসঙ্গটি গুরুত্বপূর্ণ এবং এখনও অন্য বৈশিষ্ট্যগুলি সংরক্ষণ করে তখন ব্যবহার cp -aZবা mv -Zসূক্ষ্মভাবে কাজ করে । একটি স্ক্রিপ্ট মুভিং সিস্টেম ফাইলগুলি সর্বদা যে -Zকোনও cpবা mvকমান্ডের জন্য বিকল্পটি ব্যবহার করা উচিত , অন্যথায় restoreconঅপ্রত্যাশিত সমস্যাগুলি এড়াতে কেবল তার চূড়ান্ত পদক্ষেপে ব্যবহার করা উচিত।

কেন এই পার্থক্য?

mvকমান্ড সঙ্গতিপূর্ণ আচরণ রাখে। যদি এটি একই ফাইল সিস্টেমে ঘটে থাকে তবে অবশ্যই কোনও সুরক্ষার প্রসঙ্গ সহ কোনও ফাইলের সাথে সংযুক্ত কোনও কিছু পরিবর্তিত হবে না কারণ এটি কেবলমাত্র একটি "নামকরণ"। সুতরাং দুটি ফাইল সিস্টেমে যেখানে এটি আসলে একটি অনুলিপি মুছে ফেলা হয় সেখানে এটি ফাইলের সাথে যা কিছু সংযুক্ত থাকে সেগুলি অপরিবর্তিত রাখার জন্য অনুলিপি করে এবং এটি ধারাবাহিকতার জন্য এটির সুরক্ষা প্রসঙ্গে সহ জানে।

cpডিফল্টরূপে কমান্ড মাত্র সৃষ্টি একটি নতুন ফাইল, তাই এই ফাইল, যথারীতি বাবা-মার SELinux কনটেক্সট উত্তরাধিকারী যদি না অবশ্যই অন্যথায় বলেন সঙ্গে --preserve=contextযা অন্তর্ভুক্ত করা হয় -a। অপশনটি দিয়ে --preserve=contextসংক্রামিত হতে পারে তাই পুরো বাজেটি অনুলিপি করার সময় সেরা বেটটি যদি সেলইনাক্সের কোনও ব্যাপার না হয় তার পরিবর্তে ব্যবহার করা উচিত।-a-Z-aZ-a

ডিফল্টরূপে কোনও ফাইল তৈরি করার সময়, যা সাধারণ ঘটনা, এই নতুন ফাইলটি ডিরেক্টরিটি SELinux প্রসঙ্গটি উত্তরাধিকার সূত্রে প্রাপ্ত হয়, এ কারণেই সবকিছু ঠিকঠাকভাবে কাজ করে (অফ-টপিক: বিরল ক্ষেত্রে ফাইলের প্রসঙ্গটি কেবলমাত্র তার কারণ হিসাবে ডিরেক্টরিটির প্রসঙ্গ থেকে পৃথক হওয়া উচিত) এর নামে নিয়ম করুন, কার্নেল পাত্তা দিবে না, ডেমনের মতো প্রোগ্রাম restorecondএটি পরিচালনা করতে হবে)।

সেলইনাক্স কী

সেলইনাক্স হ'ল একটি বাধ্যতামূলক অ্যাক্সেস কন্ট্রোল মেকানিজম (ওরফে ম্যাক ) অন্যান্য সমস্ত প্রক্রিয়া ছাড়াও ব্যবহৃত হয় (ইউনিক্স অনুমতিগুলি ওরফে ডিএসি , অ্যাক্সেস নিয়ন্ত্রণের তালিকা ওরফে এসিএল ইত্যাদি)। যখন কোনও প্রক্রিয়া কোনও প্রক্রিয়া সুরক্ষার প্রসঙ্গে চলে, তখন এই ফাইলের প্রসঙ্গে কাজ করার চেষ্টা করা প্রক্রিয়ায় জিজ্ঞাসিত ক্রিয়াকলাপটি (ওপেন, পড়ুন, লিখুন, এমএম্যাপ, ...) করতে পারবেন কিনা তা পরীক্ষা করার জন্য একটি "বিধি ম্যাট্রিক্স" রয়েছে।

ওপি-র ক্ষেত্রে উদাহরণ: যদি mysqldএর প্রক্রিয়া প্রসঙ্গে কেবল কয়েকটি ফাইলের প্রসঙ্গের প্রকারের অ্যাক্সেসের অনুমতি দেওয়া হয় mysqld_etc_tতবে এতে নাও user_home_tশুরু mysqldকরা ব্যর্থ হবে কারণ এটি ভুল কনফিগারেশন সহ এটির কনফিগারেশন ফাইলটি পড়তে পারে না user_home_t

সাধারণ সিস্টেমে, ইন্টারেক্টিভ / লগ-ইন করা ব্যবহারকারীর পক্ষে এটি কোনও ব্যাপার নয়, কারণ এটির স্বাভাবিক প্রক্রিয়া প্রসঙ্গটি নির্ধারিত নয়, যার অর্থ কোনও সেলইনক্স বিধি প্রযোজ্য হবে না। প্রতিটি ডেমন শুরু systemdবা অন্যান্য অনুরূপ প্রক্রিয়া হবে একটি প্রক্রিয়া কনটেক্সট, যা দিয়ে চেক করা যাবে গ্রহণ psএর -Zবিকল্প। SELinux চলমান একটি দেবিয়ান সিস্টেমের উদাহরণ:

# ps -Z -p $$
LABEL                             PID TTY          TIME CMD
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 22498 pts/7 00:00:00 bash
# ps -Z -p $(pidof /sbin/getty)
LABEL                             PID TTY      STAT   TIME COMMAND
system_u:system_r:getty_t:s0     6158 tty1     Ss+    0:00 /sbin/getty 38400 tty1
system_u:system_r:getty_t:s0     6159 tty2     Ss+    0:00 /sbin/getty 38400 tty2
system_u:system_r:getty_t:s0     6160 tty3     Ss+    0:00 /sbin/getty 38400 tty3
system_u:system_r:getty_t:s0     6161 tty4     Ss+    0:00 /sbin/getty 38400 tty4
system_u:system_r:getty_t:s0     6162 tty5     Ss+    0:00 /sbin/getty 38400 tty5
system_u:system_r:getty_t:s0     6163 tty6     Ss+    0:00 /sbin/getty 38400 tty6

3

হ্যাঁ, মূল পার্থক্য রয়েছে:

  • সিপি ফাইলের একটি অনুলিপি তৈরি করে
  • এমভি (যদি আপনি ফাইল সিস্টেমের মধ্যে থাকেন) কেবলমাত্র ডিস্কে কিছু পয়েন্টার সরিয়ে দেয়।

নিম্নলিখিত চেষ্টা করুন:

touch a
ls -i a
cp a b
ls -i a b
mv a c
ls -i b c

আপনি দেখতে পাবেন যে খ একটি নতুন ইনোড নম্বর সহ একটি নতুন ফাইল, যেখানে সি হিসাবে পুরানো একটি এর ইনোড নম্বর সহ একই ফাইল।

তবুও, এটি আপনার অদ্ভুত আচরণ ব্যাখ্যা করে না।


আমি ইনোড পয়েন্টারগুলি সম্পর্কেও ভেবেছিলাম, তবে সেখানে যদি কোনও কিছু দূষিত cpহয় তবে তা সঠিকভাবে কাজ করা উচিত নয়, বা ভাঙা জিনিসগুলিও অনুলিপি করা উচিত।
অ্যান্ড্রু পিয়ার্স

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

3

এই কি হতে পারে (যদি আপনি অ্যাপ্লিকেশন অথবা এই ত্রুটিগুলি সম্পর্কে খুব সামান্য তথ্য ভাগ, তাই আমি কেবল অনুমান করতে পারেন) ঘটতে চলেছে।

লিনাক্সে বাধ্যতামূলক ফাইল লক করা অস্বাভাবিকপরামর্শকৃত লকগুলি flock(2)পরিচালনা করার মতো কল । এর অর্থ কার্নেল লকগুলি নজর রাখে কিন্তু তাদের প্রয়োগ করে না, এটি মান্য করার জন্য অ্যাপ্লিকেশনগুলির উপর নির্ভর করে।

যদি fileAকোনও কিছু লক হয় এবং আপনার অ্যাপ্লিকেশন লকটি মান্য করে তবে এটি পরিষেবাটি প্রত্যাখ্যান করতে পারে। আসুন ধরে নেওয়া যাক এটিই ঘটেছিল।

লকটি পথ বা নামের পরিবর্তে ইনোডকে প্রভাবিত করে। একক ফাইল সিস্টেমের মধ্যে লক fileAকরা সরানো (পুনঃনামকরণ) fileBইনোডের কিছুই করে না, ফাইলটি এখনও লকড রয়েছে, অ্যাপ্লিকেশনটি এখনও এটি দিয়ে কাজ করতে অস্বীকার করে। ফাইলটি অনুলিপি fileBকরা তার নিজস্ব ইনোডের সাথে একটি পৃথক তৈরি করে যা লক করা হয়নি, অ্যাপ্লিকেশনটি কাজ করে।

(দ্রষ্টব্য: অন্য কোনও ফাইল সিস্টেমে কোনও ফাইল সরিয়ে নেওয়া আসলে + মুছে ফেলা অনুলিপি করা, সুতরাং এটি লকটি ভেঙে দেওয়া উচিত, যদি থাকে)।


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