আমি কীভাবে ক্যাপশ ব্যবহার করব: আমি ন্যূনতম ক্ষমতা সহ একটি অনিবদ্ধ পিং চালানোর চেষ্টা করছি


13

আমি ডেবিয়ান গ্নু / লিনাক্স-এ, ক্ষমতা নিয়ে পরীক্ষা-নিরীক্ষা করছি।

আমি আমার বর্তমান ওয়ার্কিং ডিরেক্টরিতে অনুলিপি / বিন / পিং করেছি। প্রত্যাশিত হিসাবে এটি কাজ করে না, এটি মূলত নির্ধারিত মূল root

আমি তারপরে আমার পিংকে সর্বনিম্ন ক্ষমতাগুলি (রুট নয়) sudo /sbin/setcap cap_net_raw=ep ./pingদিয়েছি এবং আমার পিং প্রত্যাশা অনুযায়ী কাজ করে।

তারপরে sudo /sbin/setcap -r ./pingসেই সামর্থ্য প্রত্যাহার করা। এটি এখন আশানুরূপভাবে কাজ করছে না।

আমি এখন পিং ব্যবহার করে কাজ করার চেষ্টা করি capsh

capsh কোনও সুবিধা নেই, সুতরাং এটির মূল হিসাবে চালানো দরকার, তবে তারপরে রুটটি ফেলে দিন এবং অন্য সমস্ত সুযোগ-সুবিধা রয়েছে।

আমি মনে করি আমারও এটি দরকার secure-keep-caps, এটি নথিবদ্ধ নয় capsh, তবে ক্ষমতা ম্যানুয়ালটিতে রয়েছে। আমি বিট নম্বর পেয়েছি /usr/include/linux/securebits.h। এগুলি সঠিক বলে মনে হচ্ছে, আউটপুট --printএই বিটগুলি সঠিক হতে দেখায়।

আমি কয়েক ঘন্টা ধরে ফিড করছি, এখনও পর্যন্ত আমার কাছে এটি আছে।

sudo /sbin/capsh --keep=1 --secbits=0x10 --caps="cap_net_raw+epi" == --secbits=0x10 --user=${USER} --print -- -c "./ping localhost"

যাইহোক pingত্রুটিগুলি সহ ping: icmp open socket: Operation not permitted, এর সক্ষমতা না থাকলে এটি ঘটে। এছাড়াও --printশো Current: =p cap_net_raw+i, এটি আমাদের প্রয়োজন যথেষ্ট নয় e

sudo /sbin/capsh --caps="cap_net_raw+epi" --print -- -c "./ping localhost"এটির জন্য ক্ষমতাটি Current: = cap_net_raw+eipসঠিক সেট করবে তবে এটি আমাদের ছেড়ে দেয় root

সম্পাদনা করুন -1

আমি এখন চেষ্টা করেছি sudo /sbin/capsh --keep=1 --secbits=0x11 --caps=cap_net_raw+epi --print -- -c "touch zz; ./ping -c1 localhost;"

এটি উত্পাদন করে:

touch: cannot touch `zz': Permission denied
ping: icmp open socket: Operation not permitted

প্রথম ত্রুটি যেমনটি প্রত্যাশিত secure-noroot: yes তবে দ্বিতীয়টি তা নয়Current: = cap_net_raw+eip

সম্পাদনা করুন-2

যদি আমি এটির ==আগে রাখি --print, এটি এখন প্রদর্শিত হয় Current: = cap_net_raw+i, যাতে এটি পূর্ববর্তী ত্রুটিটি ব্যাখ্যা করে তবে মূল থেকে বেরিয়ে আসার সময় কেন আমরা সামর্থ্য হারাতে পারি না, যদিও আমি এটি secure-keep-capsঠিক করেছিলাম ।

সম্পাদনা করুন -3

আমি যা দেখতে পাচ্ছি সেগুলি থেকে আমি কার্যকর (ই), এবং অনুমোদিত (পি) হারাচ্ছি, যখন এক্সেকে বলা হয়। এটি প্রত্যাশিত, তবে আমি ভেবেছিলাম যে সুরক্ষিত-ক্যাপ-ক্যাপগুলি তাদের হারিয়ে যাওয়া উচিত। আমি কিছু অনুপস্থিত করছি.

সম্পাদনা -4

আমি আরও গবেষণা করছি, এবং ম্যানুয়ালটি আবার পড়ছি। মনে হয় সাধারণত eএবং pক্ষমতাগুলি হ'ল : যখন আপনি ব্যবহারকারীর কাছ থেকে স্যুইচ করেন root(বা প্রয়োগ করুন secure-noroot, এইভাবে একটি সাধারণ ব্যবহারকারীকে রুট করে তোলেন), এটিকে ওভাররাইড করা যেতে পারে secure-keep-caps; আপনি যখন ফোন করবেন exec, আমি যতদূর বলতে পারি এটি একটি আক্রমণকারী।

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

সুতরাং এখন আমার প্রশ্ন আমি কি অনুপস্থিত, কি capshজন্য।

সম্পাদনা -5

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


সংস্করণ:

  • capshপ্যাকেজ libcap2-binসংস্করণ থেকে1:2.22-1.2
  • সামনে সম্পাদন করা -3 আমি সর্বশেষ ধরলাম capshথেকে git://git.debian.org/collab-maint/libcap2.gitএবং এটি ব্যবহার শুরু করেন।
  • uname -a Linux richard-laptop 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux ব্যবহারকারীর জমি 32 বিট।

1
আপনি পরবর্তী প্রবাহে প্রকাশের সাথে লেকেনস্টেইনের উদাহরণটি চেষ্টা করেছেন ? পথ capshসহযোগিতা-maint রেপো থেকে দেওয়া যেত "সর্বশেষ" capsh, ডেবিয়ান প্যাকেজ এখনো পরিবেষ্টনকারী ক্ষমতা সমর্থন করে না। প্রবাহ 2.27 করে।
স্টিফেন কিট

1
@ স্টেফেনকিট জেনে রাখা ভাল, তবে আসল প্রশ্নটি capshঅ্যাম্বিয়েন্টের অনুপস্থিতিতে (যেমন এটি মূলত ছিল) ব্যবহার কী। আমি কী মিস করছি এটি অবশ্যই ব্যবহার করা উচিত।
ctrl-alt-delor

উত্তর:


11

ক্ষমতাগুলি প্রক্রিয়াগুলির বৈশিষ্ট্য। Ditionতিহ্যগতভাবে তিনটি সেট রয়েছে:

  • অনুমোদিত ক্ষমতা ( পি ): সক্ষমতা যা বর্তমান প্রক্রিয়াতে "সক্রিয়" হতে পারে।
  • কার্যকর ক্ষমতা ( ): সক্ষমতা যা বর্তমানে বর্তমান প্রক্রিয়াটিতে ব্যবহারযোগ্য।
  • উত্তরাধিকারযোগ্য ক্ষমতা ( i ): উত্তরাধিকার সূত্রে প্রাপ্ত ফাইলের ক্ষমতা।

রুট হিসাবে চালিত প্রোগ্রামগুলির সর্বদা সম্পূর্ণ অনুমোদিত এবং কার্যকর ক্ষমতা থাকে, সুতরাং "আরও" সক্ষমতা যুক্ত করার কোনও প্রভাব লক্ষ্য করা যায় না। (উত্তরাধিকারসূত্রে ক্ষমতা সেট স্বাভাবিকভাবে খালি।) সঙ্গে setcap cap_net_raw+ep pingআপনি এই প্রোগ্রাম চলমান কোনো ব্যবহারকারীর জন্য ডিফল্টরূপে এই দক্ষতা সক্ষম করুন।

দুর্ভাগ্যক্রমে এই ক্ষমতাগুলি কার্যকর করা ফাইলের সাথে আবদ্ধ এবং একটি নতুন শিশু প্রক্রিয়া চালানোর পরে ধরে রাখা হয় না। লিনাক্স ৪.৩ প্রবর্তিত দক্ষতা প্রবর্তন করেছে যা দক্ষতাগুলি শিশু প্রক্রিয়া দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হতে দেয়। ( ক্ষমতা (7)এক্সিকিউট করার সময় সক্ষমতা রূপান্তরকরণও দেখুন ) )

ক্ষমতা সহ খেলতে গিয়ে, এই সমস্যাগুলি নোট করুন:

  • তখন কার্যকর অ রুট রুট থেকে ব্যবহারকারী পরিবর্তন এবং ক্ষমতা অনুমতি সরিয়ে ফেলা হয় (দেখুন ক্ষমতা উপর ব্যবহারকারী আইডি পরিবর্তনের প্রভাব মধ্যে ক্ষমতা (7) )। আপনি সেটগুলি সাফ করা এড়াতে --keep=1বিকল্পটি ব্যবহার করতে পারেন capsh
  • ব্যবহারকারীর দক্ষতা সেটগুলি ব্যবহারকারী বা গোষ্ঠী আইডি পরিবর্তন করার সময় সাফ হয়ে যায়। সমাধান: ব্যবহারকারীর আইডি পরিবর্তন করার পরে , তবে একটি শিশু প্রক্রিয়া চালানোর আগে পরিবেষ্টনের দক্ষতা যুক্ত করুন ।
  • অনুমতি এবং উত্তরাধিকারসূত্রে উভয় সক্ষমতার সেটটিতে ইতিমধ্যে যদি থাকে তবে একটি সক্ষমতা কেবলমাত্র পারিপার্শ্বিক সক্ষমতায় সেট করা যাবে।

capshLibcap 2.25 থেকে প্রোগ্রামটি এখনো পরিবেষ্টনকারী ক্ষমতা পরিবর্তন করার ক্ষমতা আছে না, কিন্তু মুক্তিপ্রাপ্ত নতুন বিকল্প যোগ করুন। নোট করুন বিকল্পগুলির অর্ডারটি তাৎপর্যপূর্ণ। ব্যবহারের উদাহরণ:

sudo capsh --caps="cap_net_raw+eip cap_setpcap,cap_setuid,cap_setgid+ep" \
    --keep=1 --user=nobody --addamb=cap_net_raw -- \
    -c "./ping -c1 127.0.0.1"

টিপ: আপনি কমান্ড লাইনের --printযে কোনও জায়গায় বিকল্পটি যুক্ত করতে পারেন capshএবং এর বর্তমান ক্ষমতাগুলির অবস্থা দেখতে পারেন।

দ্রষ্টব্য: বিকল্পের cap_setpcapজন্য --addambযখন cap_setuid,cap_setgidপ্রয়োজন তখন প্রয়োজন --user


6

লেকেনস্টেইনের উত্তরটি নির্ভুল এবং সম্পূর্ণ বলে মনে হচ্ছে তবে আমি একটি ভিন্ন কোণ থেকে আরেকটি ব্যাখ্যা দেওয়ার চেষ্টা করব যা পরিবেষ্টিত দক্ষতা নির্ধারিত সমস্যার সমাধান করার সমস্যাটিতে জোর দেওয়ার চেষ্টা করবে।

আপনি যখন চালনা করেন sudo capsh --user=<some_user> --সেখানে 2 টি সিস্টেম কলের আগ্রহ রয়েছে যার ফলে ক্ষমতাগুলি পুনরায় গণনা করা হয় (এবং সম্ভাব্যভাবে নামিয়ে দেওয়া হয়):

  1. setuid: অনুসারে man capabilities:

SECBIT_KEEP_CAPS এই পতাকাটি সেট করার ফলে একটি থ্রেডের এক বা একাধিক 0 টি ইউআইডি থাকে যখন তার সমস্ত ইউআইডি একটি ননজারো মানটিতে স্যুইচ করে its যদি এই পতাকাটি সেট না করা থাকে, তবে এই জাতীয় ইউআইডিউইচ থ্রেডটির সমস্ত ক্ষমতা হারাতে পারে।

অন্য কথায়, capshউপরের আমাদের কমান্ডে, আমাদের নিশ্চিত করতে হবে যে setuidসিস্টেম কল চলাকালীন SECBIT_KEEP_CAPS সেট করা আছে । অন্যথায় সমস্ত ক্ষমতা হারিয়ে যায়। এই কি --keep=1করে। সুতরাং এখন কমান্ড হয়ে যায়sudo capsh --user=<some_user> --keep=1 --

  1. execve: আমরা ব্যবহার করেন তাহলে --keep=1বিকল্প, সমস্ত সামর্থ্য সেট (কার্যকর, অনুমতি উত্তরাধিকারসূত্রে) সংরক্ষণ করা হয় পর্যন্তexecve সিস্টেম কল অবশ্য execveক্ষমতা পুনঃগণনা করা (অ-রুট ব্যবহারকারীদের জন্য) পাশাপাশি ঘটায়, এবং একটি যাতে সুস্পষ্ট না ভাবে। সংক্ষেপে, পরিবেষ্টনের দক্ষতা সংযোজনের পূর্বেexecve , কোনও কল করার পরে কোনও থ্রেডের "অনুমোদিত" সেটটিতে থাকা সক্ষমতাটি:

    • ফাইলটির অবশ্যই তার "অনুমোদিত" সেটে সেই ক্ষমতা থাকতে হবে । এটি দিয়ে করা যেতে পারে setcap cap_net_raw+p /bin/bash। থ্রেডের সক্ষমতা সেটগুলি (বাউন্ডিং সেট ব্যতীত) এর ফলে আর কোনও প্রভাব নেই বলে এটি করা পুরো ব্যায়ামকে অকেজো করে।
    • ফাইল এবং থ্রেড উভয়েরই তাদের "উত্তরাধিকারসূত্রে" সেটগুলিতে সেই ক্ষমতা থাকতে হবে । আপনি ভাবতে পারেন যে setcap cap_net_raw+iএটি কৌশলটি করবে কিন্তু এটি অন্বেষণ করে যাতে execveকোনও থ্রিজির অন্তর্নিহিত অনুমতিগুলি অপ্রত্যাশিত ব্যবহারকারীদের দ্বারা ডেকে আনা হয় (যার জন্য আমরা বর্তমানে ধন্যবাদ জানাই setuid)। সুতরাং একটি অনিবদ্ধ ব্যবহারকারী হিসাবে এই শর্তটি পূরণ করার কোনও উপায় নেই।

লিনাক্স 4.3 চালু বায়ুমণ্ডলের ক্ষমতা এটা সম্ভব একটি থ্রেড একটি পরও তার ক্ষমতা ধরে রাখা জন্য setuidএকটি দ্বারা অনুসরণ একটি সমাজের নিচুতলার বাসিন্দা ব্যবহারকারীকে execve, ফাইল ক্ষমতা উপর নির্ভর না করেও।


2

কার্নেলের মধ্যে একটি বাগ / বৈশিষ্ট্য থাকতে পারে। কিছু আলোচনা হয়েছে:

কিছু ঠিক করা হয়েছে কিনা তা ঠিক করার জন্য আমার কোনও ধারণা নেই।

আমাকে ভুল করবেন না - বর্তমান আচরণটি সুরক্ষিত। তবে এটি এতটাই সুরক্ষিত যে এটি কাজের মতো হয়ে ওঠে which

সম্পাদনা করুন: http://man7.org/linux/man-pages/man7/capables.7.html অনুসারে একটি নতুন সামর্থ্য সেট এম্বিয়েন্ট রয়েছে (লিনাক্স ৪.৩ থেকে)। দেখে মনে হচ্ছে এটি যা প্রয়োজন তার অনুমতি দেবে।

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