বাশ স্ক্রিপ্টিং: স্ক্রিপ্টটি রুট হিসাবে চালানো প্রয়োজন (বা সুডো সহ)


26

আমি একটি বাশ স্ক্রিপ্ট লিখতে চেষ্টা করছি (উবুন্টুতে) যা টার্গেট ব্যবহার করে কোনও ডিরেক্টরিকে ব্যাকআপ করবে।

আমি স্ক্রিপ্টে কীভাবে একটি চেক করব যাতে এটি কেবল রুট হিসাবে চালানো যায় (বা সুডো সহ)?

উদাহরণস্বরূপ, যদি কোনও ব্যবহারকারী স্ক্রিপ্টটি চালায় তবে এটির বলা উচিত যে এই স্ক্রিপ্টটি sudo সুবিধাগুলি দিয়ে চালানো উচিত এবং তারপরে প্রস্থান করুন। স্ক্রিপ্টটি রুট হিসাবে কার্যকর করা হলে, এটি চেকের বাইরে চলে যাবে।

আমি জানি একটি সহজ সমাধান থাকতে হবে, গুগল করে আমি এটি সন্ধান করতে পারিনি।

উত্তর:


37

কার্যকর uid টানতে এই আদেশটি ব্যবহার করুন:

id -u

ফলাফল যদি '0' হয় তবে স্ক্রিপ্টটি হয় রুট হিসাবে চলমান, বা sudo ব্যবহার করে। আপনি এই জাতীয় কিছু করে চেকটি চালাতে পারেন:

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi

5
আমি আইডির পথে পুরোপুরি যোগ্যতার প্রস্তাব দিই (যেমন, / usr / bin / id)। অন্যথায় একজন বিভ্রান্ত ব্যবহারকারী তাদের নিজস্ব স্ক্রিপ্ট / বাইনারি লিখতে পারে যা সর্বদা 0 প্রদান করে এবং তারপরে এমন একটি স্থানে স্থাপন করতে পারে যা কার্যকরকারী ব্যবহারকারীদের পথে আগে উপস্থিত থাকে।
কেটওয়ার

একমত। একটি সম্পাদনা সহ স্থির করা হচ্ছে।
স্কট প্যাক

6
স্ক্রিপ্টটি চালানোর চেষ্টা করা যে কোনও 'বিভ্রান্তি' আপনাকে আইডির পুরো পথটি ব্যবহার করে থামিয়ে দেওয়া হবে না।
থিওর রিসিভ করুন

আমি থিয়েটারের সাথে একমত ... এটি একটি বাশ স্ক্রিপ্ট। 'আইডি' বিন্যাসটি যোগ্য করে তোলা যিনি যাই হোক না কেন চেকের আশেপাশে যাওয়ার জন্য গুরুতরভাবে আগ্রহী কাউকে থামিয়ে দেবে না। বহনযোগ্যতার জন্য এটি অযোগ্য রেখে দেওয়া ভাল।
ক্রিস

1
এটি "sudo" প্রয়োজনীয়তার দিকে নজর দেয় না।
গ্রেগবি

17

আমি ধরে নিলাম আপনি জানেন যে মালিকানাটি রুটে পরিণত করে

chown root:root file

এবং অনুমতিগুলি 700 এ সেট করে

chmod 700 file

আপনি একই কাজটি সম্পাদন করবেন - সুডো হিসাবে চালানোর পরামর্শ ছাড়াই।

তবে আমি এই উত্তরটি সম্পূর্ণতার জন্য পোস্ট করব।


3
এটি গৃহীত উত্তরের চেয়ে আরও বেশি অনুমোদিত সমাধান। - আমার $ 0.02
ক্রিস

পার্শ্ব দ্রষ্টব্য: স্ক্রিপ্টটি গিটে পরীক্ষা করা আরও শক্ত হয়ে যায়। ঠিক করার জন্য,sudo git add <file>
চেইম এলিয়াহ

2

এখানে আপনার উদ্দেশ্য কী, ব্যবহারকারীকে অবহিত করার জন্য যে তাদের স্ক্রিপ্টটি মূল হিসাবে বা কোনও ধরণের সুরক্ষা সতর্কতা হিসাবে চালানো উচিত?

আপনি যদি ইউড পরামর্শের কোনও চেয়ে ভাল পরামর্শের চেয়ে যদি কেবল ব্যবহারকারীকে জানাতে চান তবে এটি একটি সুরক্ষার সতর্কতার হিসাবে ঘোড়ার টায়ারের মতো দরকারী - কোনও ব্যবহারকারীকে স্ক্রিপ্ট অনুলিপি করা থেকে বিরত করার মতো কিছুই নেই, যদি বিবৃতিটি প্রকাশ করা হয়, এবং যাইহোক এটি চালানো।

যদি এটি কোনও সুরক্ষা সমস্যা হয় তবে স্ক্রিপ্টটি 700: এ সেট করা উচিত, মূল: রুটের মালিকানাধীন, যাতে এটি অন্য কোনও ব্যবহারকারীর দ্বারা পঠনযোগ্য বা কার্যকর না হয়।


বা, এটি হতে পারে যে স্ক্রিপ্টটির কাজটি চালাতে কেবল
রাইটের

2

আপনি হোয়ামি কমান্ডটিও ব্যবহার করতে পারেন।

if [ ! "`whoami`" = "root" ]
then
    echo "\nPlease run script as root."
    exit 1
fi

প্রকৃতপক্ষে uid 0 হ'ল সম্পূর্ণ অধিকার সহ বিশেষ ব্যবহারকারী অ্যাকাউন্ট। "রুট" হ'ল সেই ইউআইডি-তে ম্যাপযুক্ত সবচেয়ে সাধারণ লেবেল / নাম / এটা না আছে 'রুট' হতে কোনও আক্রমণকারী এই শোষণ চেষ্টা করতে পারেন।
0x শিপডগ

2

বাশ ভেরিয়েবলটি $EUIDকার্যকর ইউআইডি স্ক্রিপ্টটি চলমান দেখায়, আপনি যদি স্ক্রিপ্টটি মূল হিসাবে চালিত হয় তা নিশ্চিত করতে চান, তবে ওয়েথারের $EUIDমান 0 রয়েছে কিনা তা পরীক্ষা করুন :

if [ $EUID -ne 0 ]; then
    echo "$0 is not running as root. Try using sudo."
    exit 2
fi

এটি /usr/bin/id(বাশ স্ক্রিপ্টগুলির জন্য) সমাধানের চেয়ে ভাল কারণ এটির জন্য বাহ্যিক কমান্ডের প্রয়োজন হয় না।


1
শুধু থেকে প্রস্থান করার পরিবর্তে, প্রতিস্থাপন উবুন্টু লগ ইনের জন্য ব্যবহারকারী চটপট পারে echoসঙ্গে সঙ্গতিপূর্ণ sudo "$0" "$@", এবং প্রতিস্থাপন exit 2সঙ্গে exit $?
schumacher574

ভাল ধারণা. তবে প্রশ্নটি এমন একটি স্ক্রিপ্টের জন্য জিজ্ঞাসা করেছিল যা ছেড়ে দেয়, নিজেই দৌড়ে না not
নিউহাউস

0

স্ক্রিপ্টটিকে কেবল রুট দ্বারা চালিত করার সহজ উপায় হ'ল লাইনটি দিয়ে স্ক্রিপ্টটি শুরু করা:
#!/bin/su root


-1

"#! / bin / su রুট" সুপার ব্যবহারকারী মোডে ব্যবহারকারীরা রুট পাসওয়ার্ড ব্যবহার না করে স্ক্রিপ্টটি চালানোর অনুমতি দেয়। আপনি যদি সুপার ব্যবহারকারীদের মূলের ফলাফল সহ স্ক্রিপ্টটি চালাতে চান তবে এটি তা করে।

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