শেল স্ক্রিপ্ট চলাকালীন ব্যবহারকারীকে রুট হিসাবে লগইন করতে অনুরোধ করুন


17

আমি যে সমস্যাটি পাচ্ছি তা হ'ল আমি কমান্ডটি প্রবেশ করার পরে,

su - root

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

অন্য কথায়, আমি স্ক্রিপ্টটি কোনও ব্যবহারকারীর মতো চালাতে চাই তবে স্ক্রিপ্টটি চালানো শুরু হওয়ার সাথে সাথে ব্যবহারকারীকে অবশ্যই রুটে পরিবর্তন করতে হবে এবং এটি না হওয়া পর্যন্ত বাকী স্ক্রিপ্টটি রুট হিসাবে চালিয়ে যেতে হবে। এই কাজ করা যাবে?

উত্তর:


34

এটি সম্পাদন করা খুব সহজ:

#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@"

বর্তমান ব্যবহারকারীর রুট না হলে স্ক্রিপ্টটি পুনরায় প্রয়োগ করুন sudo

আমি sudoএখানে পরিবর্তে ব্যবহার করছি নোট করুন su। এটি আপনাকে যুক্তি সংরক্ষণের অনুমতি দেয় কারণ এটি। আপনি যদি ব্যবহার suকরেন তবে আপনার কমান্ডটি এমন হবে su -c "$0 $@"যা আপনার আর্গুমেন্টগুলিকে ম্যাঙ্গাল করবে যদি তাদের স্পেস বা বিশেষ শেল অক্ষর থাকে।

যদি আপনার শেলটি বাশ হয় তবে আপনি এতে বাহ্যিক কল এড়াতে পারবেন whoami:

(( EUID != 0 )) && exec sudo -- "$0" "$@"

দুঃখিত, আমি ব্যাখ্যায় একটি ত্রুটি করেছি তাই এটি ভুল ব্যাখ্যা করা হতে পারে। এখানে আরও স্পষ্ট ব্যাখ্যা। সাহায্যের জন্য ধন্যবাদ!
রেডসন

@ user68857 আপনার প্রশ্নটি পরিষ্কার ছিল। এই উত্তরটি আপনি যা চান ঠিক তেমন করে।
প্যাট্রিক

আমি এই ত্রুটিটি পেতে
থাকি

আমি টার্মিনালের মাধ্যমে নিয়মিত ব্যবহারকারী হিসাবে স্ক্রিপ্টটি চালাতে চাই তবে স্ক্রিপ্টটির পরে স্ক্রিপ্টটি শেষ না হওয়া পর্যন্ত ব্যবহারকারীকে রুটে স্যুইচ করা উচিত
রেডসন

@ নসকায়ার আপনি যদি পান তবে আপনার সুডোর সাথে sudo: must be setuid rootকিছু ঘটেছে। এটা ঠিক করার জন্য: chmod u+s $(which sudo)। এবং হ্যাঁ, আপনি যা করতে চাইছেন তা সম্পর্কে আমি ভালভাবে জানি, আমি আমার স্ক্রিপ্টগুলিতে সমস্ত সময় একই কাজ করি।
প্যাট্রিক

7

আপনি ইউআইডিও পরীক্ষা করতে পারেন:

 if [ $(id -u) != 0 ]; then
     echo "You're not root"
     # elevate script privileges
 fi

5

আপনি নিজে স্ক্রিপ্ট কল করতে পারেন এবং পরীক্ষা করতে পারেন:

#! /bin/bash

if [ "root" != "$USER" ]; then
  su -c "$0" root
  exit
fi

...

0

আপনি যে স্থানে লগইন করতে চান সেখানে কেবল নীচের কমান্ডটি যুক্ত করুন

sudo su

এটি আমার কোড সহ পুরোপুরি কাজ করছে

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