কীভাবে সর্বদা নির্দিষ্ট কমান্ডের জন্য sudo পাসওয়ার্ড প্রয়োগ করা যায়?


12

অন্য দিন আমি আমার ওয়েব সার্ভারে কিছু রক্ষণাবেক্ষণের কাজ করছিলাম। আমি তাড়াহুড়ো করেছিলাম এবং ঘুমিয়ে পড়েছি, তাই sudoকমান্ডটি ব্যবহার করে সবকিছু করেছি ।

এবং তারপরে, আমি ঘটনাক্রমে Ctrl+ চাপলাম V, আমার ওয়েব সার্ভারে এই আদেশটি পাঠিয়েছি:

sudo rm -rf /*

তাদের উপরের কমান্ডটি কী করে তা ভাবছেন: এটি আমার পুরো ওয়েব সার্ভারটি মুছে ফেলে

ভাগ্যক্রমে, আমার ব্যাকআপ ছিল এবং দুঃখের বিষয়, এই দুর্দান্ত ত্রুটিটি ঠিক করতে আমাকে আরও দুটি ঘন্টা জেগে থাকতে হয়েছিল। তবে তার পর থেকে আমি ভাবছিলাম:

নির্দিষ্ট কমান্ডের জন্য সর্বদা sudo পাসওয়ার্ড প্রয়োগ করার কোনও উপায় আছে কি?

সার্ভার যদি আমাকে একটি পাসওয়ার্ড জিজ্ঞাসা করে তবে আমি নিজেকে অনেক ঝামেলা থেকে বাঁচাতে পারি। এটি হয়নি, কারণ আমি sudoএই মহিমান্বিত ত্রুটির আগে প্রায় 5 টি কমান্ড দৌড়েছিলাম ।

সুতরাং, এটি করার কোন উপায় আছে? rmসর্বদা প্রয়োগ করার জন্য আমার কেবল কমান্ডের সাথে পাসওয়ার্ড দরকার । অন্যান্য কমান্ডগুলি আমি ব্যবহার করছি যা সাধারণত nanoবা cpযা উভয়ই (কিছুটা পরিমাণে) পরিবর্তনযোগ্য।



2
আরএম কমান্ডে /*যাওয়ার আগে @ সোলসটিসি সম্প্রসারণ করা হবে। সুতরাং কমান্ডটি একটি একক যুক্তি দেখতে পাচ্ছে না, তবে যুক্তিগুলির তালিকা ( /bin /boot /cdrom /dev /etc /home...)
ড্যান

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


2
@ WinEunuuchs2Unix এটি কোনও সদৃশ প্রশ্ন নয়, এখানে অপারেশন rmকমান্ডটির পাসওয়ার্ড রাখতে চায় না । sudoআরএম কমান্ডটি ব্যবহৃত হওয়ার সাথে সাথে তারা কেবল একবারের জন্য অনুরোধ করতে চায় । আপনার সংযুক্ত প্রশ্নের সমাধান যখন আপনার প্রথম আদেশটি হবে তখন কিছুটা বিরক্তিকর হয়ে উঠবে sudo rm। এটিকে দুটি পাসওয়ার্ড, এক করার জন্য আপনাকে জিজ্ঞাসা করবে হিসাবে sudoজন্য এক rm
ড্যান

উত্তর:


17

আপনি সেট করতে পারেন timestamp_timeoutথেকে 0বিশেষ কমান্ডের জন্য /etc/sudoersvisudo -f /etc/sudoers.d/pduckনিম্নলিখিত বিষয়বস্তু সহ একটি ফাইল তৈরি করুন :

Cmnd_Alias DANGEROUS = /bin/rm

Defaults!DANGEROUS timestamp_timeout=0

pduck ALL = (ALL:ALL) DANGEROUS

ব্যবহারকারী pduckযখন গ্রুপের sudo rmসদস্য হয় sudoএবং sudoঅন্যান্য কমান্ডের জন্য তার পাসওয়ার্ড মনে রাখে তখন চলমান অবস্থায় ব্যবহারকারীকে সর্বদা একটি পাসওয়ার্ড জিজ্ঞাসা করা হয় (অতিরিক্ত পরামিতিগুলি দেওয়া হোক না কেন) ।

খারাপ দিকটি হ'ল এটি /bin/rmআরও সীমাবদ্ধ করতে আপনি সহজেই ফাইলের লাইনে প্যারামিটার যুক্ত করতে পারবেন না । ভাল ... আপনি যেমন করতে পারেন:

Cmnd_Alias DANGEROUS = /bin/rm -f

তবে তারপরে আপনাকে ঠিক অনুরোধ করা হবে sudo rm -fএবং sudo rm -rfউদাহরণস্বরূপ (আবার) নয় ।


9

একটি পদ্ধতি সেফ-আরএম ব্যবহার করা হবে । এটি কেবলমাত্র "আরএম" ব্যবহার এবং "আরএম" এর নির্দিষ্ট সংস্করণগুলি চালানো থেকে বিরত রাখবে। এর মধ্যে আপনার মূল সিস্টেমটি মুছে ফেলা অন্তর্ভুক্ত রয়েছে তবে "/ usr /" বা "/ var /" এর মতো সিস্টেম সম্পর্কিত ডিরেক্টরিগুলি অপসারণ রোধ করতেও এটি ব্যবহার করা যেতে পারে। লিঙ্ক থেকে:

গুরুত্বপূর্ণ ফাইলগুলির দুর্ঘটনা মোছার জন্য পুনরুদ্ধার করা

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

ব্যবহারকারীরা এই সুরক্ষিত ফাইল বা ডিরেক্টরিগুলির মধ্যে একটি মুছতে চেষ্টা করেছেন তারা তা করতে পারবেন না এবং পরিবর্তে একটি সতর্কতা বার্তা প্রদর্শিত হবে:

$ rm -rf /usr   
Skipping /usr

(সুরক্ষিত পাথগুলি সাইট এবং ব্যবহারকারী উভয় স্তরেই সেট করা যেতে পারে))

ভুলক্রমে আপনি মুছে ফেলা গুরুত্বপূর্ণ ফাইলগুলি পুনরুদ্ধার করা বেশ শক্ত হতে পারে। নিরাপদ-আরএম ইনস্টল করে আজ নিজেকে রক্ষা করুন এবং আপনাকে কোনও তথ্য পুনরুদ্ধারের পরিষেবাতে যোগাযোগ করতে হবে এমন সম্ভাবনা হ্রাস করুন!

এখানে চিত্র বর্ণনা লিখুন


সেফেকোর পক্ষে উন্নীত
মাইকেল ফুলটন

3

sudoএকটি বিকল্প সরবরাহ করে -k, --reset-timestampদেখুন man sudo:

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

sudoপরীক্ষা করার জন্য rm -rf /*এবং চালানোর জন্য আপনি একটি সাধারণ মোড়ক লিখতে পারেন

sudo -k rm -rf /*

পরিবর্তে, যেমন:

sudo ()                                                                                                                                                 
{ 
    [[ "$*" == "rm -rf /*" ]] && opt="-k";
    /usr/bin/sudo $opt "$@"
}

ব্যবহারের উদাহরণ

echo aএখানে পরীক্ষা করা হচ্ছে।

$ sudo echo
[sudo] password for dessert: 

$ sudo echo

$ sudo echo a
[sudo] password for dessert: 
a
$ sudo echo a
[sudo] password for dessert: 
a

আপনি যখন সাধারণভাবে চালান প্রতিবার আপনাকে জিজ্ঞাসা করতে চাইলে আপনি rmউপরের ফাংশনটি নীচের মত মানিয়ে নিতে পারেন:

sudo () 
{ 
    [[ "$1" == "rm" ]] && opt="-k";
    /usr/bin/sudo $opt "$@"
}

যদি আপনি উভয় জেনারেল কমান্ড কল এবং নির্দিষ্ট কমান্ড লাইনগুলিকে একত্রিত করতে চান তবে আমি ব্যবহার করার পরামর্শ দিই case, যেমন:

sudo () 
{ 
    case "$*" in 
        rm*)            opt="-k" ;;
        "mv /home"*)    opt="-k" ;;
        "ln -s /usr/bin/fish /bin/sh") opt="-k" && echo "Don't you dare!" ;;
        *)              opt="" ;;
    esac;
    /usr/bin/sudo $opt "$@"
}

নোট এই পন্থা যদি আপনি চালাতে কাজ করবে না যে sudoঅপশন সঙ্গে - সম্ভাব্য সমাধান হয় [[ "$*" =~ " rm " ]]STRING "RM" শূণ্যস্থান দ্বারা বা বেষ্টিত জন্য চেক করতে *" rm "*)সঙ্গে case"RM" ধারণকারী কোনো কমান্ড লাইন ধরতে।


[[ "$1" == "rm" ]] && opt="-k";এবং কিভাবে /bin/rm?
রিঞ্জউইন্ড

@ রিনজুইন্ড আমি মনে করি ফাংশনটি নির্দিষ্ট প্রয়োজনগুলির, বিশেষত caseপদ্ধতির সাথে সহজেই মানিয়ে যায়।
মিষ্টান্ন

1

এই উত্তরটি sudoআপনার প্রশ্নের অংশটিকে সম্বোধন করে না তবে অন্যদিকে এটি কোনও ব্যবহারকারীর rmজন্য দুর্ঘটনাক্রমে আহরণের ঝুঁকি হ্রাস করার একটি উপায়কে সম্বোধন করে ।

আপনি যা উপন্যাস rmকরতে পারেনrm -I

  • এটি ডিরেক্টরি বা 3 টিরও বেশি ফাইল মুছবে না কেন তা নিশ্চিত হওয়ার জন্য জিজ্ঞাসা করে
  • যতক্ষণ আপনি ছেড়ে যান যতক্ষণ না-f পূর্ববর্তী -Iবিকল্পগুলিকে ওভাররাইড করে ।

--one-file-systemআমি আমার rmওরফে ব্যবহার করি নিরবচ্ছিন্ন মুছে ফেলার বিরুদ্ধে আরেকটি সম্ভাব্য সুরক্ষার ব্যবস্থা ।

সেট-আপ

এই ধরনের একটি উপনাম তৈরি করতে কমান্ডটি ব্যবহার করুন:

alias rm='rm -I --one-file-system'

আপনি এটি আপনার ~/.bashrcবা এমনকি এটিতে রাখতে পারেন /etc/bash.bashrc

ব্যবহার

$ sudo rm -r /etc/apt/sources.list.d /*
rm: remove all arguments?

নিশ্চিত টাইপ করতে yesঅথবা আপনার লোকেল মধ্যে নিজের অনুবাদ বা পারেন শব্দ এবং প্রেস প্রথম অক্ষর Enter। কারও সাথে অন্য কোনও ইনপুট অপারেশনটি বাতিল করে দেয়।

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