সেটুইড এক্সিকিউটেবলের কাজ করে না কেন?


9

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

তবে এটি চালানোর আগে এবং পরে উভয়ই একই ইউআইডি (1000) প্রদান করে sudo chmod +s ./setuid-test। আমি মনে করি এর অর্থ হ'ল সেটুইডের আমার এক্সিকিউটেবলের উপর কোনও প্রভাব নেই, কেন এবং কীভাবে সমাধান করবেন?

উত্স কোড:

#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
    printf("%d", geteuid());
    return 0;
}

নির্মিত এবং চালানো

$ gcc -o setuid-test setuid-test.c
$ ./setuid-test
1000
$ sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
$ ./setuid-test
1000

দৌড়ানোর সময় ls -la, আমি এটিই পাই:

me@me:~$ ls -la setuid-test
-rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test

2
আপনি যেমন চালাচ্ছেন এটি ছাড়া কোনও ব্যবহারকারীর মালিকানা কি কার্যকর? (সেটুয়েডের অর্থ রুটে পরিবর্তিত হওয়ার অর্থ নয়; এর অর্থ এক্সিকিউটেবলের মালিকানাধীন ব্যবহারকারীকে পরিবর্তন করা উচিত))
সিজেএম

পিএইচপিয়ারার আমি মনে করি কোনও ফাইলের
এসইউইডি

@ সিজেএম me@me:~$ ls -la setuid-test---- ফিরে আসে -----rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
পিএইচপি

7
আপনার প্রোগ্রামটি আমার উবুন্টু ১৪.০৪ সিস্টেমে প্রত্যাশার মতো কাজ করে যদি এটি আমার হোম ডিরেক্টরিতে থাকে তবে এটি / টেম্পে থাকা অবস্থায় নয়, কারণ পরামিতিগুলি সেটাময়েড প্রোগ্রামগুলি মাউন্ট / টিএমপি নিষিদ্ধ করে। আপনার প্রোগ্রাম কোথায় অবস্থিত?
মার্ক প্লটনিক

2
টাইপ করুন df .ডিরেক্টরির মধ্যে তারপর বিন্দু মাউন্ট খোঁজার, mount | grep nameofmountpoint। সেখানে কি কোনও nosuidপতাকা তালিকাভুক্ত রয়েছে?
প্লটনিক নিকট

উত্তর:


10

ইউনিক্স / লিনাক্সের জন্য নকশাকৃত বেশিরভাগ ফাইল nosuidসিস্টেমগুলি একটি অ্যাট্রিবিউটের সাথে মাউন্ট করা যেতে পারে , যা সেই ফাইল সিস্টেমগুলিতে অবস্থিত সেটুইড বা সেটগিড বাইনারিগুলিকে কোনও প্রক্রিয়াটির কার্যকর ইউআইডি বা গিড পরিবর্তন করতে বাধা দেয়। এটি "অবিশ্বস্ত" ফাইল সিস্টেমগুলি মাউন্ট করার সময় প্রায়শই ব্যবহৃত হয়, যেগুলি অ-প্রশাসকের নিয়ন্ত্রণে থাকে।

আপনার ক্ষেত্রে, আপনি যে ফাইল সিস্টেমটি ব্যবহার করছেন তা হ'ল টাইপ ইক্য্রিপ্টফস , যা অ্যাসুবুন্টু অনুসারে : এনক্রিপ্টড হোম ডিরেক্টরি অনুসারে রুট সেটুইডের সাথে বাইনারি চালানোর সময় ত্রুটিটি কয়েক বছর আগের সংস্করণগুলির সাথে শুরু করে স্বয়ংক্রিয়ভাবে নসুইড (এবং নোডেভ) প্রয়োগ করে।

Https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-3409 থেকে পরিবর্তনের কারণ সম্পর্কে এখানে একটি বিবরণ দেওয়া হয়েছে :

ভিনসেন্ট ডেনেন 2012-07-20 11:25:56 ইডিটি
জানা গেছে যে বেসরকারী এক্রিপটিফ মাউন্ট হেল্পার (/sbin/mount.ecryptfs_private), যা সেটুইড-রুট রয়েছে, একটি অনিবদ্ধ স্থানীয় ব্যবহারকারীকে ব্যবহারকারী-নিয়ন্ত্রিত ইক্রিপ্টফেস শেয়ারগুলি মাউন্ট করার অনুমতি দিতে পারে স্থানীয় পদ্ধতিতে। যেহেতু ইক্য্রিপ্টফস সহায়ক সাহায্যকারী "নসুইড" এবং "নোডেভ" পতাকা ব্যবহার করে ফাইল সিস্টেমগুলি মাউন্ট করে না, তাই ব্যবহারকারীদের পক্ষে সেটুইড-রুট বাইনারি এবং / অথবা ডিভাইস ফাইল থাকা ফাইল সিস্টেম মাউন্ট করা সম্ভব হবে যা তাদের সুবিধাগুলি বাড়িয়ে তুলতে পারে। এটি কোনও ইউএসবি ডিভাইসের মাধ্যমে করা যেতে পারে, যদি ব্যবহারকারীর সিস্টেমে শারীরিক অ্যাক্সেস থাকে।
...
জোর করে এমএস_এনওএসইডি এবং এমএস_নোডিভ মাউন্ট ফ্ল্যাগ 99 সংস্করণে যুক্ত করা হয়েছে।


যদি সিস্টেমটি কোনও ব্যবহারকারীকে এমন কোনও ফাইল-সিস্টেম মাউন্ট করার অনুমতি দেয় যা সেটুইডকে মঞ্জুরি দেয় তবে তা রুট হয়ে ওঠা তুচ্ছ হবে। 1) অন্য কোথাও একটি এক্সিকিউটেবল 2 তৈরি করুন chown root, chmod +s3) এটি মাউন্ট করুন 4) এক্সিকিউটেবল রান করুন
ctrl-alt-delor

1

এক্সিকিউটেবলের উপর সেটিউড বিট ফাইলের মালিকের উপর এক্সিকিউটেবল চালানোর অনুমতি দেয় ( সুপারুজার নয়)। রুট হিসাবে এক্সিকিউটেবল চালাতে সক্ষম হতে, কার্যকর করুন:

sudo chown 0:0 ./setuid-test

অবশ্যই, তবে এটি সমস্যা নয়। রুট ব্যতীত অন্য কোনও ব্যবহারকারীর কাছে এমন একটি প্রোগ্রাম থাকা সম্ভব। প্রশ্নের দৃশ্যে, এর ইউআইডি setuid-testপ্রদর্শন করা উচিত nobody
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলস আপনি ঠিক বলেছেন আমি আশা করি যে সেটুইড-পরীক্ষার প্রদর্শনগুলি হয় nobody, নাroot
পিএইচপি লার্নার

"এক্সিকিউটেবলের উপর সেটইউড বিট ফাইলের মালিকের উপর এক্সিকিউটেবল চালানোর অনুমতি দেয়" এবং আমার ফাইলের মালিক হলেন nobody, আমি প্রত্যাশায় 65534এটি প্রত্যাশা করি , তবে আমি দেখি 1000যে যার মালিক হবেন!
পিএইচপি শেখার

2
আপনার টেস্ট প্রোগ্রামটি চালিত ফাইল সিস্টেমের মাউন্ট বিকল্পগুলি পরীক্ষা করে দেখুন। যদি এটি মাউন্ট করা থাকে nosuidতবে আপনার প্রোগ্রামটি সম্ভবত কাজ করতে পারে না।
কাউন্টারমোড

1
@countermode @MarkPlotnick mount | grep /home/meআয় /home/me/.Private on /home/me type ecryptfs (ecryptfs_check_dev_ruid,ecryptfs_cipher=xxx,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs,ecryptfs_sig=0123456789abcdef,ecryptfs_fnek_sig=fedcba9876543210)
পিএইচপি শিক্ষার্থী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.