নীচের ক্ষেত্রে সেই ক্ষেত্রে রয়েছে যেখানে আপনি পাসওয়ার্ড ছাড়াই একটি কমান্ড চালাতে চান কেবলমাত্র যদি এটির একটি নির্দিষ্ট বিকল্পের বিকল্প থাকে, যেখানে বিকল্পগুলির একটি অংশ পরিবর্তনীয় । আফাইক, সুডোরের ঘোষণায় ভেরিয়েবল বা মানের ব্যাপ্তি ব্যবহার করা সম্ভব নয়, অর্থাৎ আপনি স্পষ্টভাবে অ্যাক্সেসের অনুমতি দিতে পারবেন command option1কিন্তু command option2ব্যবহার না করে:
user_name ALL=(root) /usr/bin/command option1
তবে কাঠামোটি যদি command option1 value1যেখানে value1পরিবর্তিত হতে পারে তবে প্রতিটি সম্ভাব্য মানের জন্য আপনার সুস্পষ্ট sudoers লাইন থাকা দরকার value1। শেল স্ক্রিপ্ট এর চারপাশে একটি উপায় সরবরাহ করে।
এই উত্তরটি এম। আহমেদ জাফরের উত্তরে অনুপ্রাণিত হয়েছিল এবং সেখানকার সুরক্ষা সমস্যাটি সমাধান করে।
- শেল স্ক্রিপ্ট তৈরি করুন যেখানে আপনি আদেশ ছাড়াই কল করবেন
sudo।
- স্ক্রিপ্টটি কোনও রুট-বিশেষাধিকারযুক্ত ফোল্ডারে সংরক্ষণ করুন (উদাঃ
/usr/local/bin/), chown root:wheel /usr/local/bin/script_nameঅন্যের জন্য লেখার অ্যাক্সেস ছাড়াই (যেমন ) ফাইলটিকে রুট-মালিকানাধীন (যেমন chmod 755 /usr/local/bin/script_name) করুন।
ভিজুডো ব্যবহার করে সুডোরগুলিতে ব্যতিক্রম যুক্ত করুন:
user_name ALL=(root) NOPASSWD: /usr/local/bin/script_name।
আপনার স্ক্রিপ্ট চালান sudo script_name।
উদাহরণস্বরূপ, আমি ম্যাকস-এ ডিসপ্লে স্লিপ টাইমআউট পরিবর্তন করতে চাই। এটি ব্যবহার করে করা হয়:
sudo pmset displaysleep time_in_minutes
আমি স্লিপ টাইমআউটকে একটি নিরীহ ক্রিয়াটি পরিবর্তন হিসাবে বিবেচনা করি যা পাসওয়ার্ড টাইপিংয়ের ঝামেলা ন্যায়সঙ্গত করে না, তবে pmsetঅনেক কিছুই করতে পারে এবং আমি এই অন্যান্য জিনিসগুলি সুডো পাসওয়ার্ডের পিছনে রাখতে চাই।
সুতরাং আমার এখানে নিম্নলিখিত স্ক্রিপ্ট রয়েছে /usr/local/bin/ds:
#!/bin/bash
if [ $# -eq 0 ]; then
echo 'To set displaysleep time, run "sudo ds [sleep_time_in_minutes]"'
else
if [[ $1 =~ ^([0-9]|[1-9][0-9]|1[0-7][0-9]|180)$ ]]; then
pmset displaysleep $1
else
echo 'Time must be 0..180, where 0 = never, 1..180 = number of minutes'
fi
fi
sudoersফাইলের শেষে আমার নীচের লাইনটি রয়েছে:
user_name ALL=(root) NOPASSWD: /usr/local/bin/ds
3 মিনিটে টাইমআউট সেট করতে, আমি আমার ব্যবহারকারীর সাধারণ অ্যাকাউন্ট থেকে আমার স্ক্রিপ্টটি চালাই user_name:
sudo ds 3
পিএস আমার বেশিরভাগ স্ক্রিপ্ট হ'ল ইনপুট বৈধতা যা বাধ্যতামূলক নয় তাই নিম্নলিখিতগুলিও কাজ করবে:
#!/bin/bash
pmset displaysleep $1
/path/to/my/programঅজগর লিপিটি কি এটি এখনও কাজ করবে ?