সুরক্ষিতভাবে sudo সহ ফাইন্ড ব্যবহার করুন


10

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

সার্ভারে, ফাইলের নাম সংবেদনশীল নয়, তবে ফাইলের বিষয়বস্তু হতে পারে।

ব্যবহারকারীদের সার্ভারের যে কোনও জায়গায় ফাইল অনুসন্ধান করার অনুমতি দেওয়ার জন্য আমি sudo ব্যবহার করতে চাই। "ফাইন্ড" ইউটিলিটি দুর্দান্ত তবে এটি সমস্ত ধরণের পার্শ্ব প্রতিক্রিয়া যেমন: "-exec" ব্যবহার করে স্বেচ্ছাসেবী কমান্ড সঞ্চার করতে পারে।

আমি কি findআমার বিধিনিষেধ নিয়ে কাজ করতে পারি?


14
সাধারণত আপনি চান না যে ফাইলের নামের ধরণগুলির জন্য অনুসন্ধানের ফলাফলগুলিতে এমন ফাইল রয়েছে যা আপনি অ্যাক্সেস করতে পারবেন না। সে ক্ষেত্রে আপনার প্রয়োজনীয়তা কিছুটা বিজোড়।
এইচবিউইজন

2
নুন আপনাকে প্রশ্নে জড়াতে বাধ্য করে। আমি মনে করি সার্ভার ফল্টের অন্যতম উদ্দেশ্য হ'ল বিজোড় পরিস্থিতির জন্য ফোরাম হিসাবে পরিবেশন করা।
Troels আরভিন

2
সার্ভার ফল্ট কোনও ফোরাম নয় এবং বিপরীত মনোবিজ্ঞানের চেষ্টাগুলি এইচবি ব্রিজেনের পর্যবেক্ষণের বৈধতা পরিবর্তন করে না (যা আমি নিশ্চিত, আপনাকে সাহায্যের প্রয়াসে ডেকে আনা হয়েছিল)।
অরবিটে মেঘের হালকাতা রেস

উত্তর:


19

সম্পর্কে কি সনাক্ত ?

আপডেটডেডবি (8) দ্বারা প্রস্তুত এক বা একাধিক ডাটাবেস পাঠ করে এবং পিটার্টার্নগুলির কমপক্ষে একটিকে স্ট্যান্ডার্ড আউটপুটে মিলিয়ে ফাইলের নাম লেখায়, প্রতি লাইনে একটি করে। --Regex নির্দিষ্ট না করা থাকলে, PATTERN- এ গ্লোববিং অক্ষর থাকতে পারে। যদি কোনও PATTERN তে কোনও গ্লোববিং অক্ষর না থাকে তবে চিহ্নিত করুন যে প্যাটার্নটি PATTERN ছিল ।

ডিফল্টরূপে, সনাক্ত করুন ডাটাবেসে পাওয়া ফাইলগুলি এখনও বিদ্যমান কিনা তা পরীক্ষা করে না। সন্ধান করুন প্রাসঙ্গিক ডাটাবেসের সর্বশেষতম আপডেটের পরে তৈরি ফাইলগুলির প্রতিবেদন করতে পারে না।

অথবা এমনকি স্লট :

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

এই ম্যানুয়াল পৃষ্ঠাটি স্লোকটির জিএনইউ সংস্করণ নথি করে। স্লোক সিস্টেম ব্যবহারকারীদের অননুমোদিত ফাইলগুলি প্রদর্শন না করে পুরো ফাইল সিস্টেম অনুসন্ধান করতে সক্ষম করে।


ভাল ধারণা. কেন আমি এই ভেবে দেখিনি জানি না। তবে আমি আশঙ্কা করছি যে "-d" প্যারামিটারটি কোনওভাবে নির্বিচারে ফাইলগুলিতে পড়তে ব্যবহৃত হতে পারে, যদি সুডোর নিয়ম ব্যবহারকারীর কোনও "চিহ্নিত" কমান্ড চালাতে দেয়?
Troels আরভিন

2
@ ট্রোলস আরভিন: locateদরকার নেই sudo; শুধুমাত্র এটির updatedbকাজের জন্য বিশেষ সুযোগ-সুবিধা দরকার। আপনার ব্যবহারকারীদের এভাবে চলমান বা চালাতে সক্ষম হওয়া উচিত নয় sudo locate
jwodder

1
@jwodder: একটি RHEL 7 সার্ভারে: ধরা যাক ব্যবহারকারী / ডেটা / ফু-তে আপনার অ্যাক্সেস নেই। ইন / ডেটা / ফু, একটি ফাইল আছে "somefile.csv"। এখন, যখন আপনি "সনাক্তকৃত কিছুফিল.সিএসভি" সঞ্চালন করেন, "সনাক্ত" থেকে আউটপুটটিতে /data/foo/somefile.csv অন্তর্ভুক্ত থাকে না - যদি না আপনি ব্যবহারকারী সুডোর মাধ্যমে "সনাক্ত" করেন না। ("--নাফলো" যুক্তি ব্যবহার করা কোনও উপকারে আসে না))
আরভিন

1
@ ট্রয়েলআরভিন কিন্তু -dপতাকাটি কেবল ডাটাবেসের পথ নির্ধারণ করে? আমি আপনাকে ভুল বুঝেছি।
লেনি

21

অনুসারে man 7 capabilities

   CAP_DAC_READ_SEARCH
          * Bypass file read permission checks and directory read and execute permission checks;
          * Invoke open_by_handle_at(2).

এটি আমার পক্ষে কাজ করেছে। ('#' দিয়ে শুরু হওয়া লাইনগুলি রুট, '$' এর সাথে মূলগুলি নন-রুট) এই ক্ষেত্রে নন-রুট ব্যবহারকারী wheelগোষ্ঠীতে রয়েছে।

# cp /usr/bin/find /usr/bin/sudofind
# chmod 710 /usr/bin/sudofind
# chown root:wheel /usr/bin/sudofind
# setcap cap_dac_read_search+ep /usr/bin/sudofind
# exit
$ find /root 
find: ‘/root’: Permission denied
$ sudofind /root
/root /root 
/root/Testbed 
...
... 
$ sudofind /root -exec cat {} \;
cat: /root: Permission denied 
cat: /root/Testbed: Permission denied
$ sudofind /root -printf "%u %g %m %c %p\n"
root root 644 Mon Apr 20 09:20:48.0457518493 2015 /root
root root 755 Fri Dec  4 02:34:03.0016294644 2015 /root/Testbed
...
...
$ # Capability inheritance test..
$ sudofind /root -exec /bin/sleep 10 \; &
[1] 17017
$ getpcaps $(pgrep find)
Capabilities for `17017': = cap_dac_read_search+ep
$ getpcaps $(pgrep sleep)
Capabilities for `17019': =

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

মনে রাখবেন যে আপনি যা করতে চান তা অস্থায়ী ফাইল তৈরি বা অ্যাক্সেস সম্পর্কিত গোপনীয়তা সম্পর্কিত উদ্বেগকে উত্থাপন করে এবং প্রোগ্রামটি রেস শর্ত / সুবিধাবঞ্চিতকরণের প্রয়াসকে মাউন্ট করার জন্য ভিত্তি হিসাবে ব্যবহার করা যেতে পারে (যে প্রোগ্রামগুলি সুপরিচিত ফাইলের নাম তৈরি করে তাদের বিরুদ্ধে) তবে সঠিক সুরক্ষা চেক করবেন না)।

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

অতএব, সাবধানতা অবলম্বন করুন এবং এটি করার বিষয়ে সতর্ক থাকুন এবং বুঝতে পারেন যে সুস্পষ্ট জিনিসগুলি কাজ না করলেও এটির সাথে এখনও ঝুঁকি রয়েছে।

ওহ, এবং আমি কারও কাছে ধারণা আক্রমণের প্রমাণ রয়েছে যা মন্তব্যগুলিতে অধিকার বর্ধনের ভিত্তি হিসাবে এই প্রক্রিয়াটি ব্যবহার করে কিনা তা দেখতে আগ্রহী!


5
এটি সত্যিই বেশ আকর্ষণীয় দেখায়!
সোভেন

এটার মত? ওয়েল, কোনও পিওসি নয় তবে তা আকর্ষণীয়: forums.grsecurity.net/…
লেনি

আমি এই ধারণাটি পছন্দ করি তবে এটির একটি উল্লেখযোগ্য ব্যর্থতা রয়েছে: সুডোফাইন্ড এখন একটি বাইনারি যা সিস্টেমের কোনও সফ্টওয়্যার (যেমন RPM) প্যাকেজের অংশ নয়। সুতরাং বিতরণ যদি "সন্ধান" এর জন্য কোনও প্যাচ প্রেরণ করে তবে সুডোফিন্ড আপডেট করা হবে না।
Troels আরভিন

2
পছন্দ করুন যদি আপনি কোনও বিদ্যমান ইউটিলিটিতে সেটুইড-জাতীয় ক্ষমতা যুক্ত করেন যা সেই ক্ষমতাগুলির জন্য ডিজাইন করা হয়নি তবে আপডেট ইউটিলিটিটি আপনার অ-স্ট্যান্ডার্ডের সাথে নিরাপদে ব্যবহার করা যেতে পারে যাচাই করার আগে আপনি অন্তর্নিহিত ইউটিলিটিতে কোনও আপডেট চান না ক্ষমতা। findএক্ষেত্রে কল্পনা করুন যদি কোনও আপডেটের মাধ্যমে কিছু ব্যবহারকারীর সরবরাহকৃত কোড সরাসরি কার্যকর করতে পারে, যা awkকরতে পারে তার অনুরূপ ।
অ্যান্ড্রু হেনেল

4
সবচেয়ে বড় সমস্যা আমি এটির সাথে দেখতে পাচ্ছি হ'ল অনুসন্ধানযোগ্য অযোগ্য ডিরেক্টরিগুলির নীচে থাকা বিশ্ব-লিখনযোগ্য ডিরেক্টরিগুলি হঠাৎ লিখে যেতে পারে।
তাভিয়ান বার্নস

2

আমি ব্যবহারকারীদের যথাযথ অনুমতি দেব।

ডিফল্টরূপে, যদি উমাস্ক হয় 022, ডিরেক্টরিগুলি তৈরি করা হয় যাতে প্রত্যেকে সেগুলির মধ্যে ফাইলগুলি তালিকাবদ্ধ এবং স্থিত করতে পারে। যদি তা না হয় তবে আপনি নিজেই ডিরেক্টরিটির অনুমতিটিকে বিটওয়াইস বা এর পুরানো অনুমতিগুলির জন্য ম্যানুয়ালি পরিবর্তন করতে পারেন এবং 0555:

chmod +0555 foo

এবং যদি সেই ব্যবহারকারীর সেই ডিরেক্টরিটির সমস্ত পিতামাতার (যেমন উদাহরণস্বরূপ, অন্য কোনও ব্যবহারকারীর হোম ডিরেক্টরি) এর অনুমতি কার্যকর না করে থাকে, সম্ভবত এর অর্থ আপনার প্রথম ডিরেক্টরিটি অন্য কোথাও রাখা উচিত।

আপনি যদি কেবল কিছু ব্যবহারকারীকে সেই ডিরেক্টরিটি পড়তে এবং চালিত করতে চান তবে আপনি তার মোডটি পরিবর্তন করতে পারেন 0750, সেই ব্যবহারকারীদের একটি গোষ্ঠীতে রাখতে পারেন, এবং ডিরেক্টরিতে থাকা গ্রুপের মালিককে সেই গোষ্ঠীতে পরিবর্তন করতে পারেন:

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