আমি সম্প্রতি এই কারণে সমস্যার মধ্যে পড়েছিলাম।
$sudo vim /etc/motd
[sudo] password for bruce:
bruce is not in the sudoers file. This incident will be reported.
আমার কি সুডো অ্যাক্সেস আছে কিনা তা যাচাই করার কোনও উপায় আছে?
আমি সম্প্রতি এই কারণে সমস্যার মধ্যে পড়েছিলাম।
$sudo vim /etc/motd
[sudo] password for bruce:
bruce is not in the sudoers file. This incident will be reported.
আমার কি সুডো অ্যাক্সেস আছে কিনা তা যাচাই করার কোনও উপায় আছে?
উত্তর:
চালান sudo -v
। এটি সাধারণত আপনার সুডো পাসওয়ার্ডের মেয়াদ বাড়ানোর জন্য ব্যবহৃত হয় তবে আপনার কোনও sudo
সুযোগ-সুবিধা রয়েছে কিনা তা নির্ধারণের জন্য ব্যবহার করা যেতে পারে ।
$ sudo -v
Sorry, user [username] may not run sudo on [hostname].
ম্যান পৃষ্ঠা অংশ:
যদি -v (যাচাইকরণ) বিকল্পটি দেওয়া হয়, sudo ব্যবহারকারীর টাইম স্ট্যাম্প আপডেট করবে, প্রয়োজনে ব্যবহারকারীর পাসওয়ার্ডের জন্য অনুরোধ করবে। এটি সুডোর সময়সীমা আরও 5 মিনিটের জন্য প্রসারিত করে (বা সুডোরগুলিতে টাইমআউট নির্ধারণ করা যাই হোক না কেন) তবে কমান্ড চালায় না।
যদি আপনার ব্যবহারকারীকে কেবল নির্দিষ্ট কমান্ডগুলি চালানোর অনুমতি দেওয়া হয় তবে এই কমান্ডটি কার্যকর হবে, এটি নির্দেশ করে যে আপনাকে বিভিন্ন সুযোগ-সুবিধা দিয়ে কিছু চালানোর অনুমতি দেওয়া হয়েছে । এই ক্ষেত্রে আপনাকে অনুমতি দেওয়া হচ্ছে না এমন কোনও কমান্ড কার্যকর করার চেষ্টা করার সময় বার্তাটি অন্যরকম দেখাচ্ছে (এবং কোনও মেল রুট করার জন্য প্রেরণ করা হয়নি ), প্রশাসকরা পড়লে আপনি সমস্যার মধ্যে পড়তে পারবেন এটি এখনও সম্ভব /var/log/secure
।
$ sudo ls
[sudo] password for [username]:
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].
বিভিন্ন সুযোগ-সুবিধা দিয়ে আপনাকে কী চালানোর অনুমতি দেওয়া হয়েছে তা জানতে , আপনি ব্যবহার করতে পারেন sudo -l
। নোট করুন যে এই কমান্ডটির জন্য আপনাকে আপনার পাসওয়ার্ড প্রবেশ করানো দরকার।
patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>
? আমি আমার পাসওয়ার্ড প্রবেশ করিয়েছি এবং অননুমোদিত সম্পর্কে কিছুই পাইনি। আমি জানি যে আমি sudo
অন্যান্য কমান্ডগুলি সফলভাবে চালানো থেকে পেয়েছি , কিন্তু এই unable to resolve host
বার্তাটি আমাকে উদ্বিগ্ন করেছে যে হোস্টটিতে অন্য কিছু হতে পারে।
sudoers
ফাইলটি নিয়ে সমস্যা মনে হচ্ছে । সেখানে আপনি নির্দিষ্ট করতে পারবেন যে কোন হোস্টে কোনও ব্যবহারকারী নির্দিষ্ট কমান্ড চালানোর জন্য অনুমোদিত ( sudoers
একাধিক মেশিনে একই ফাইলটি ব্যবহার করার সময় এটি কার্যকর )। সম্ভবত এই ফাইলটিতে নির্দিষ্ট করা হোস্টনাম সমাধান করা যায়নি। host
উদাহরণস্বরূপ কমান্ড দিয়ে এটি পরীক্ষা করে দেখুন ।
sudo -v
দিয়েছে "এক্সএক্স স্যুডার্স ফাইলে নেই This এই ঘটনার খবর দেওয়া হবে।"
এটি খুব সহজ। চালান sudo -l
। এটি আপনার যে কোনও সুডোর সুবিধাগুলি তালিকাবদ্ধ করবে।
sudo -l
কিনা , একটি পাসওয়ার্ড চেয়েছেন। sudo -v
আপনি যদি পারেন তবেই "$(whoami)" != "root"
জিজ্ঞাসা করে এবং কোনও লিনাক্সে কখনই জিজ্ঞাসা করবে না।
sudo
ছদ্মবেশ ধারণ করেছিল।
এখানে স্ক্রিপ্ট-বান্ধব সংস্করণ:
timeout 2 sudo id && echo Access granted || echo Access denied
আপনার sudo
অ্যাক্সেস না থাকলে এটি পাসওয়ার্ড ইনপুটটিতে আটকে থাকবে না ।
আপনি এটিকে একটি চলকতেও সেট করতে পারেন:
timeout 2 sudo id && sudo="true" || sudo="false"
echo "$sudo"
দ্রষ্টব্য: ম্যাকোজে, আপনার ইনস্টল করা প্রয়োজন coreutils
, যেমন brew install coreutils
।
timeout
ডিফল্টরূপে যেমন উপলভ্য নয় এমন কোনও বিকল্প , যেমন ওএস এক্সে?
coreutils
, যেমন brew install coreutils
।
জেরাল্ড স্ক্যাডের উত্তর এখানে , এখনও উন্নত করা যেতে পারে!
ব্যবহার
prompt=$(sudo -nv 2>&1)
if [ $? -eq 0 ]; then
# exit code of sudo-command is 0
echo "has_sudo__pass_set"
elif echo $prompt | grep -q '^sudo:'; then
echo "has_sudo__needs_pass"
else
echo "no_sudo"
fi
এখানে স্ক্রিপ্টে ব্যবহারের সম্পূর্ণ উদাহরণ রয়েছে :
#!/usr/bin/env bash
is_root () {
return $(id -u)
}
has_sudo() {
local prompt
prompt=$(sudo -nv 2>&1)
if [ $? -eq 0 ]; then
echo "has_sudo__pass_set"
elif echo $prompt | grep -q '^sudo:'; then
echo "has_sudo__needs_pass"
else
echo "no_sudo"
fi
}
elevate_cmd () {
local cmd=$@
HAS_SUDO=$(has_sudo)
case "$HAS_SUDO" in
has_sudo__pass_set)
sudo $cmd
;;
has_sudo__needs_pass)
echo "Please supply sudo password for the following command: sudo $cmd"
sudo $cmd
;;
*)
echo "Please supply root password for the following command: su -c \"$cmd\""
su -c "$cmd"
;;
esac
}
if is_root; then
echo "Error: need to call this script as a normal user, not as root!"
exit 1
fi
elevate_cmd which adduser
আমার জন্য, ' sudo -v
' এবং ' sudo -l
' কোনও স্ক্রিপ্টে কাজ করেনি কারণ মাঝে মাঝে ইন্টারেক্টিভ (আমাকে উপরে বর্ণিত পাসওয়ার্ডের জন্য জিজ্ঞাসা করে)। ' sudo -n -l
' এছাড়াও কাজ করে নি, পাসওয়ার্ড হারিয়ে যাওয়ার কারণে এটি আমার কাছে সুডো অনুমতি থাকলেও প্রস্থান কোডটি '1' দিয়েছে। তবে আদেশটি প্রসারিত করে:
A=$(sudo -n -v 2>&1);test -z "$A" || echo $A|grep -q asswor
স্ক্রিপ্টের জন্য আমার জন্য সফল ছিল। এই অভিব্যক্তিটি দেয় 0
যদি বর্তমান ব্যবহারকারী 'সুডো' কল করতে পারে এবং 1
যদি না করে।
ব্যাখ্যা:
অতিরিক্ত প্যারামিটার -n
করার sudo
ইন্ট্যার্যাক্টিভিটির বাধা দেয়। কমান্ডের
আউটপুট হতে পারে:
- খালি (এই ক্ষেত্রে, সুডো বর্তমান ব্যবহারকারী দ্বারা কল করা যেতে পারে), বা:
- একটি নোট যে বর্তমান ব্যবহারকারী সুডোর জন্য অনুমোদিত নয়, বা:
- একটি প্রশ্নের পাঠ্য পাসওয়ার্ড (এই ক্ষেত্রে, ব্যবহারকারী অনুমোদিত)।
("অ্যাসওয়ার" কোনও ইংরেজি "পাসওয়ার্ড" এবং পাশাপাশি একটি জার্মান "পাসওয়ার্ট" এর জন্য উপযুক্ত হবে)।$A
sudo -n -v 2>&1
আমি ভোট দেওয়ার এবং মন্তব্য করার মতো নিম্ন পদ পেয়েছি তবে আমি জেরাল্ড স্ক্যাডের উত্তরটিকে অগ্রাহ্য করতে চেয়েছিলাম, যেমনটি আমি খুঁজে পেয়েছি যে একমাত্র উপায় আগে, এবং ভেবেছিল যে নো 1 এটি জানে - এখন পর্যন্ত: ডি
আমার সমাধান বিটিডব্লিউ:
[[ "$(whereis sudo)" == *'/'* && "$(sudo -nv 2>&1)" != 'Sorry, user'* ]]
(২০১৫ সালের শেষের দিকে মাওয়াহাহা)
"সুডো অ্যাক্সেস" স্বাদে আসে। দুটি প্রাথমিক স্বাদ: প্রথমে আপনি বা আপনার গ্রুপের একটি সদস্য / / etc / sudoers ফাইলটিতে সুডো অ্যাক্সেসের জন্য সেটআপ করা দরকার।
দ্বিতীয়ত আপনার নিজের পাসওয়ার্ড জানতে হবে, অথবা আপনাকে সম্প্রতি একটি sudo কমান্ড করা উচিত। সময়সীমা অতিক্রান্ত হয়নি যে সম্প্রতি যথেষ্ট। (মজার ঘটনা: আপনি নিজের সুডোরের ফাইলে খুব বেশি সময় দিতে পারবেন))
আমি প্রায়শই কোনও স্ক্রিপ্টের প্রলগে দ্বিতীয় ধরণের অ্যাক্সেসের জন্য পরীক্ষা করতে চাই যা কিছু পদক্ষেপের জন্য প্রয়োজন। যখন এই চেকটি ব্যর্থ হয় আমি স্ক্রিপ্টটি চালানোর আগে তার ব্যবহারকারীর 2 য় ধরণের অ্যাক্সেস সক্ষম করতে পরামর্শ দিতে পারি।
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is enabled.
bash-3.2$ sudo -K
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is not enabled
-S sudo কে স্টিডিনের কাছ থেকে পাসওয়ার্ড পড়তে বলে। -P একটি খালি প্রম্পট সেট করে। -K অ্যাক্সেসের দ্বিতীয়বার সাফ করে।
যেহেতু এটি স্টাডারকে / dev / নালকে প্রেরণ করে, এটি ব্যবহারকারীর প্রথম ধরণের সুডো অ্যাক্সেস আছে কিনা তাও পরীক্ষা করে দেখবে।
Sudoers ফাইল দেখতে এই পদক্ষেপগুলি অনুসরণ করুন। আপনি যদি সেখানে থাকেন তবে আপনার সুডো আছে। যদি তা না হয় তবে আপনি নিজেকে যুক্ত করতে পারেন।
su
visudo
your_username_here ALL=(ALL) ALL
:wq
exit
sudo
sudo
, তাই সে সম্ভবত নয় সিস্টেম প্রশাসক, কিংবা অভিজাত সিস্টেম অ্যাডমিনিস্ট্রেটররা এমনকি এক। তিনি সম্ভবত কেবলমাত্র একজন ব্যবহারকারী যিনি ভেবেছিলেন যে তাকে কিছু সীমাবদ্ধ ক্ষমতা দেওয়া হয়েছে। আপনি কী সন্দেহ করছেন যে সে যেতে পারে ? su