রুট দ্বারা লেখার জন্য 400 টি অনুমতি সহ একটি ফাইল কেন ব্যবহারকারীর দ্বারা কেবল পঠনযোগ্য?


10

যদি আমি একটি অনিবদ্ধ ব্যবহারকারী হিসাবে কোনও ফাইল তৈরি করি এবং অনুমতিগুলির মোডটি এতে পরিবর্তন করি তবে 400এটি ব্যবহারকারীর দ্বারা কেবল পঠনযোগ্য হিসাবে দেখা হবে, সঠিকভাবে:

$ touch somefile
$ chmod 400 somefile
$ [ -w somefile ] && echo rw || echo ro
ro

সবকিছু ঠিক আছে.

তবে এরপরে রুটটি উপস্থিত হয়:

# [ -w somefile ] && echo rw || echo ro
rw

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

আমি অনুমান করি যে কেন এটি হচ্ছে, আমি উভয়ই বুঝতে চাই এবং লেখার বিট সেট নেই এমন কোনও ফাইলের পরীক্ষা করার সময় আমি কীভাবে একটি মিথ্যা রিটার্ন কোড পেতে পারি ?


বিটিডব্লিউ আমি RHEL6 ( 4.1.2(1)-release) এবং RHEL7 ( 4.2.46(2)-release) উভয়ই ব্যবহার করছি ।
ধনী

16
"সেরা অনুশীলন হুকুম দেয় যে লেখার অনুমতি বিটের জন্য আমার পরীক্ষা করা উচিত, এবং যদি তা না হয়, তবে এটি কোনও কারণের জন্য সেট করা হয়েছিল।" - আসলে, সেরা অনুশীলন হ'ল "রুট হিসাবে স্টাফ চালাবেন না"। আপনি যদি রুট হিসাবে চলমান থাকেন তবে আপনি ইতিমধ্যে অনুমতি চেকগুলি বাইপাস করার সিদ্ধান্ত নিয়েছেন। ইউজার স্পেসে সেই অনুমতি চেকগুলি ম্যানুয়ালি পুনরায় প্রয়োগ করা দুর্যোগের একটি রেসিপি ।
কেভিন

@ কেভিন আপনার পক্ষে ভাল যদি আপনি কোনও সুবিধাবঞ্চিত জিনিস চালাতে পারেন। এটি কারসাজির জন্য /etc/dhcp/dhcpd.conf, যা মূলের মালিকানাধীন। আমি সরবরাহকারী সরবরাহ করা ব্যবহার করছি dhcpd। মোট বিপর্যয়, হাহ? ফাইল RCS মধ্যে পরীক্ষা করা হয়, আমি ব্যবহার স্বয়ংক্রিয় করছি rcsdiff, ciএবং coকারণ আমরা আছে অপারেটার যে প্রয়োজন ... কাজ করে। অনুমতি বিট চেক ( -wযেমন হিসাবে বিশদভাবে test(1)) ব্যর্থতার প্রথম লাইন হতে চলেছে, সেই ভিত্তিতে কাজ করে যা ci -uকেবল একটি ফাইলকে পঠনযোগ্য করে দেয় leaves আমি এটি খনন করছি এবং সরাসরি যাচ্ছি rcsdiff -qএবং চেক করছি $?। নির্বিঘ্ন dhcpd? এটি মালিকানাধীন হবে dhcpd
ধনী

1
এটি একটি সম্ভাব্য বিপর্যয় কারণ এখন আপনার কাছে অনুমতি যাচাইয়ের দুটি পৃথক বাস্তবায়ন রয়েছে: একটি কার্নেলের এবং একটি ব্যবহারকারীক্ষেত্রের মধ্যে। সবচেয়ে খারাপ, এই বাস্তবায়নগুলি এমনকি অভিন্ন ফলাফলগুলি তৈরি করার উদ্দেশ্যে নয়, তাই আপনি একে অপরের বিরুদ্ধে কেবল পরীক্ষা ফাজ করতে পারবেন না। সুতরাং এখন আপনার অ্যাক্সেসের দুটি পথ রয়েছে যা একে একে একে একে একে একে লকডাউন করে এবং স্বাধীনভাবে সুরক্ষিত রাখতে হবে।
কেভিন

@ কেভিন শিওর, তারা অভিন্ন ফলাফল তৈরি করে না এবং তাদের উদ্দেশ্য ছিল না (ম্যানাপেজে বিশদতা থাকা সত্ত্বেও), তবে আমি স্পষ্টভাবে লেখার-অনুমতি বিটটি পরীক্ষা করতে চাই ; এবং জন্য manpages bashএবং testযে কি বিশ্বাস করতে আমাকে নেতৃত্বে [ -wজন্য।
ধনী

উত্তর:


26

test -wওরফে [ -wফাইল মোড চেক করে না। এটি লিখনযোগ্য কিনা তা পরীক্ষা করে। মূলের জন্য, এটি হয়।

$ help test | grep '\-w'
  -w FILE        True if the file is writable by you.

আমি যেভাবে পরীক্ষা করব তা হ'ল আউটপুটটির stat(1)(" %a অ্যাক্টলে অধিকার অ্যাক্সেস") এর তুলনায় কিছুটা তুলনা করা ।

(( 0$(stat -c %a somefile) & 0200 )) && echo rw || echo ro

নোট করুন সাবসেলের $(...)একটি 0প্রিফিক্স করা দরকার যাতে আউটপুটকে statঅষ্টাল দ্বারা ব্যাখ্যা করা হয় (( ... ))


সংক্ষিপ্ত হওয়ার জন্য ধন্যবাদ এর ভাল ব্যবহার (( ... & ... ))। একটি টাইপো সংশোধন করেছে :-)
সমৃদ্ধ

এটি 3 করুন ... কোনও ifপ্রয়োজন নেই , অষ্টাল অনুমতিগুলির আউটপুট %aনয় %dএবং (( ... ))আষ্টাল হিসাবে 0আউটপুটটি ব্যাখ্যা করার জন্য একটি উপসর্গের প্রয়োজন stat
ধনী

@ পেট্রিক আমার man stat"দশমিক%% ডিভাইস নম্বর" বলেছে, তবে আমরা কী "অ্যাক্সেস রাইটস" চাই না? 0 উপসর্গটির বিষয়ে আপনার বক্তব্যটি ভালভাবে তৈরি করা হয়েছে তবে আমি অনুমান করি যে আমাদের কেবল এটির মধ্যে এটি করতে হবে :)।
সোর্সজেডি

2
stat -c 0%a...
সোর্সজেডি

@ সোর্সজেদি এসি, আপনি ঠিক বলেছেন কিছু কারণে আমি ভাবছিলাম যে% d হ'ল দশমিক access সম্পাদনাটি পুনরুদ্ধার করা হয়েছে। ধন্যবাদ :-)
প্যাট্রিক

30

আমি মনে করি আপনি কি ভুল বুঝেছেন -w। ফাইলটির "লেখার অনুমতি আছে" আছে কিনা তা যাচাই করে না, এটি অনুরোধকারী ব্যবহারকারীর দ্বারা ফাইলটি লেখার যোগ্য কিনা তা পরীক্ষা করে che

আরও নির্দিষ্টভাবে, এটি কল access(2)বা অনুরূপ।

উদাহরণস্বরূপ, যদি কোনও স্ক্রিপ্ট থাকে if [ -w /etc/shadow ]তবে আপনি straceস্ক্রিপ্টটিতে চালিত হলে আপনি এর মতো একটি লাইন দেখতে পাবেন

faccessat(AT_FDCWD, "/etc/shadow", W_OK)

যেহেতু rootফাইলটিতে লিখতে পারেন তখন এটি 0 ফেরত দেয়।

যেমন একটি সাধারণ ব্যবহারকারী হিসাবে:

faccessat(AT_FDCWD, "/etc/shadow", W_OK) = -1 EACCES (Permission denied)

মূল হিসাবে

faccessat(AT_FDCWD, "/etc/shadow", W_OK) = 0

এটি আমার মেশিনে /etc/shadowঅনুমতি থাকা সত্ত্বেও এটি 000

---------- 1 root root 4599 Jan 29 20:08 /etc/shadow

এখন আপনি যা করতে চান তা আকর্ষণীয় হয়ে ওঠে এবং এত সহজ নয়।

আপনি যদি সহজ অনুমতিগুলি পরীক্ষা করতে চান তবে lsআউটপুট, বা কল statবা অনুরূপটি পরীক্ষা করুন । তবে বুঝতে পারেন যে এসিএলগুলি এই অনুমতিগুলি ওভার রাইড করতে পারে। কোনও ফাইলের অনুমতি হওয়ায় 400 এটিকে লিখনযোগ্য হতে বাধা দেয় না ...


না, "ভুল বুঝা" জন্য manpages ভুল পড়া হবে -w: test(1)স্পষ্ট হল: "ফাইল বিদ্যমান এবং লেখার অনুমতি প্রদান করা হয়", নয় " ফাইল বর্তমান ব্যবহারকারীর দ্বারা লিখিত হতে পারে "। ওভাররাইডিং অনুমতিগুলি বা এসিএলগুলি সম্পর্কে কিছুই নেই। bash(1)কেজি: "যদি ফাইল বিদ্যমান থাকে এবং লিখিত হয় তবে সত্য " ksh(1)শেননিগানগুলির প্রতি সূক্ষ্ম ইঙ্গিত দেয়: "-w ফাইল // সত্য, যদি ফাইল বিদ্যমান থাকে এবং বর্তমান প্রক্রিয়া দ্বারা লিখিত হয় ।" zsh(1)অবকাশ থেকে test(1), zshmisc(1)যেমন ভাষায় হয় ksh(1), এবং zshexpn(1)কিছু মজার অনুমতি ভিত্তিক বিস্তারিত globbing। csh(1)হাস্যকরভাবে সংক্ষিপ্ত: "অ্যাক্সেস লিখুন"।

বিটিডব্লু: আমি প্যাট্রিকের উত্তরটি গ্রহণ করেছি, ১. কারণ আপনি লিড-অন প্রশ্নের যথাযথ উত্তর দেননি: লেখার বিট সেট নেই এমন একটি ফাইল পরীক্ষা করার সময় আমি কীভাবে একটি মিথ্যা রিটার্ন কোড পেতে পারি? এবং ২. স্নিগ্ধ লিড-ইন অনুমান করার কারণে আমি ম্যানেজগুলি ভুল বুঝি।
ধনী

3
@ সমৃদ্ধ আমি এটি যেভাবে পড়েছি, আমি মনে করি আপনার মন্তব্যগুলিও কিছুটা স্পর্শকাতর হয়ে উঠছে। আমি বলছি না যে আপনি যা লিখেছেন তা ভুল ছিল, কেবলমাত্র আরও নম্রভাবে প্রকাশ করা গেলে এটি সম্ভবত আরও ভাল হয়ে যায়।
ডেভিড জেড 21

3
"আমি মনে করি আপনি ভুল বুঝেছেন ..." চটজলদি নয়। আপনার প্রতিক্রিয়া যাইহোক, 100% চতুর।
বারবিকিউ

@ রিচ এছাড়াও, যদিও ম্যানাপেজগুলি ক্রিস্টাল স্পষ্ট ছিল না, স্টিফেন বলেছে যে আপনি "আমরা কী করে - " কী বোঝায় সে সম্পর্কে ভুল ধারণা থাকতে পারে , এবং ম্যানপেজগুলি কী বলে না, যেখানে প্রাক্তন ঘটনাটি মনে হয়, তাই প্রশ্ন
সেবি

1

রুট ব্যবহারকারী তার ইচ্ছামতো করতে পারে, "সাধারণ" ফাইল অনুমতিগুলির কোনও সীমাবদ্ধতা নেই। এটি কেবলমাত্র কোনও পায়ের লক্ষ্য অনুশীলনের বিরুদ্ধে কিছুটা বীমা করার জন্য কোনও এক্সেক্সট অনুমতি ছাড়াই একটি সরল ফাইল সরাসরি চালায় না।

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