সুডো - আমার কি সুডো আছে এবং / অথবা কত সময় বাকি আছে তা যাচাই করার জন্য একটি আদেশ আছে?


27

(মূলত স্ট্যাক ওভারফ্লোতে পোস্ট করা হয়েছে They তারা পরামর্শ দিয়েছিল আমি পরিবর্তে এখানে চেষ্টা করব Here এখানে আসল পোস্টটি: /programming/3858208/sudo-is-there-a-command-to-check-if-i-have -সুডো-এবং-বা-কত-সময়-বাম )

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

আমি যে নিকটতম জিনিসটি পেয়েছি সেটি হ'ল "সুডো-ট্রু", তবে -n বিকল্পটি কেবলমাত্র আমার সেন্টোস 5 মেশিনে কর্মস্থলে উপস্থিত রয়েছে। -n ব্যর্থ হয় যদি এটি একটি পাসওয়ার্ড চাইতে হয়। এই কার্যকারিতাটি পাওয়ার জন্য অন্য কোনও উপায় আছে? ধরে নিন যে আমি যে সকল মেশিনের সাথে কাজ করি তার আসলে আমার মূল নেই, তাই আমি আমার পছন্দ অনুসারে সুডোর নতুন সংস্করণ ইনস্টল করতে পারি না।

এটির জন্য প্রয়োজনীয় যে আমি এটি করছি তাই আমি সুডো স্থিতি নির্দেশ করার জন্য আমার প্রম্পটটি পেতে পারি। আমি জানি যে কোন টার্মিনাল সক্রিয়ভাবে সুডো-সক্ষম। আমারও একটি প্রম্পট রয়েছে যা আমি যখন মূল হয় তখন রঙ পরিবর্তন করে তবে আমি প্রায়শই মূল ব্যবহার করি না তাই এটি সীমিত ব্যবহারের নয়।

উত্তর:


10

-nবিকল্প উবুন্টু এর নতুন সংস্করণে পাওয়া যায়, কিন্তু হিসাবে আপনি বলেন যে একটি বিকল্প নয়। আপনি কেবলমাত্র সুডোর চেষ্টা করে যাচ্ছেন এবং পাসওয়ার্ডের জন্য কোনও প্রম্পট দিয়ে ফিরে আসে কিনা তা দেখার জন্য আপনি যা খুঁজছেন তা করার কোনও আসল উপায় নেই। যদি আপনার উদ্বেগের বিষয়টি আপনি ভিজ্যুয়াল ইঙ্গিত চান, তবে রুট বাশ সেশন শুরু করতে সুডো / বিন / ব্যাশ শুরু করবেন না কেন? মনে রাখবেন যে এটি নিরাপত্তাহীন, তবে কেউ sudo- তে আপনার প্রম্পট পরিবর্তনগুলি উপলব্ধি করতে পারলে এটি কিছুটা নিরাপত্তাহীনও।



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

এই মুহুর্তে আমি সুডো-ভি পরীক্ষা করার দিকে ঝুঁকছি, এবং বিজ্ঞপ্তিটি পাওয়ার জন্য যদি এটি যথেষ্ট পরিমাণে -n, চেক-এন করা যথেষ্ট নয়। দেখে মনে হচ্ছে এটি কোথাও কিছু ভাঙা উচিত নয়।
ভালাদিল

@ ভালাদিল: আমার কাছে এটি ঘটে যে সূক্ষ্ম সূচক খুব বেশি সুরক্ষা ঝুঁকি প্রবর্তন করবে না। উদাহরণস্বরূপ, প্রম্পটে ব্যবহারকারী নামটির জন্য আন্ডারলাইনিং চালু করুন।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

@ ডেনিস: হুবহু আমি আমার প্রম্পটটিকে "ওএমজি_ইউ_এইউ_হো_ভিউ_সুডো_নো! _ইউজার @ হোস্ট" বা এরকম কিছুতে পরিবর্তন করতে যাচ্ছি না। আমি সম্ভবত রঙটি একটু বদলাতে চাই। তারা বসে না থেকে এবং আমার .Bashrc- এর সাথে ঘনিষ্ঠতা অর্জন না করে কেউ এর অর্থ কী তা আমি আশা করি না।
ভালাদিল

29

আমি জানি এটি একটি সত্যই পুরানো প্রশ্ন তবে আমি এখানে আজ একটি স্ক্রিপ্টে করেছি:

CAN_I_RUN_SUDO = $ (sudo -n আপটাইম 2> & 1 | গ্রেপ "লোড" | ডাব্লুসিএল-এল)
যদি [$ AN CAN_I_RUN_SUDO} -gt 0]
তারপর
    প্রতিধ্বনি "আমি sudo কমান্ড চালাতে পারি"
আর
    প্রতিধ্বনি "আমি সুডো কমান্ড চালাতে পারি না"
ফাই

1

নীচের কমান্ডটি এমন রঙিন ইঙ্গিত দেখাবে যা আপনি সুড মঞ্জুর করেছেন, সুতরাং আপনি sudo -kমেশিন থেকে দূরে যাওয়ার আগে একটি কাজ করতে ভুলবেন না । এটি অ রঙিন টার্মিনালগুলিতেও কার্যকর।

যেহেতু আমরা বিভিন্ন টার্মিনাল সেশনে সুডো সক্রিয় এবং নিষ্ক্রিয় থাকতে পারি, আমি এটি তৈরি করেছি যা আপনি আপনার। / .Bashrc এর শেষে রাখতে পারেন

function FUNCpromptCommand () { 
    sudo -n uptime 2>/dev/null 1>/dev/null
  local bSudoOn=`if(($?==0));then echo true; else echo false; fi`

    history -a; # append to history at each command issued!!!
    local width=`tput cols`;
    local half=$((width/2))
    local dt="[EndAt:`date +"%Y/%m/%d-%H:%M:%S.%N"`]";
  if $bSudoOn; then dt="!!!SUDO!!!$dt"; fi
    local sizeDtHalf=$((${#dt}/2))
    #printf "%-${width}s" $dt |sed 's" "="g'; 
    echo
    output=`printf "%*s%*s" $((half+sizeDtHalf)) "$dt" $((half-sizeDtHalf)) "" |sed 's" "="g';`

    local colorLightRed="\e[1;31m"
  local colorNoColor="\e[0m"
    if $bSudoOn; then
        echo -e "${colorLightRed}${output}${colorNoColor}"
    else
        echo -e "${output}"
    fi
}
export PROMPT_COMMAND=FUNCpromptCommand

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

আপনার প্রয়োজন অনুসারে আপনি এই কোডটি খেলতে পারেন। পিএস 1 ভেরিয়েবলটিও রয়েছে (এটি আসল ছোট প্রম্পট একক লাইন) তবে আমি মনে করি এটির সাথে গোলযোগ না করাই ভাল।

পিএস .: ওএস-এক্স এর জন্য, @ এনওয়িংকলার নীচের মন্তব্যটি দেখুন।


প্রস্থান কোড চেক করা হচ্ছে এর sudo -nঅপারেটিং সিস্টেম এক্স কাজ বলে মনে হচ্ছে না আমার প্রশ্ন এখানে দেখুন: superuser.com/questions/902826/...
nwinkler

ঠিক আছে, আমি যে পরীক্ষার প্রস্তাব করছি তা হ'ল sudo -nআপনি কি বিশ্বাস করেন যে অন্য কোনও পরীক্ষা থাকতে পারে যা ব্যবহারকারীর সুডো অ্যাক্সেস সক্রিয় রয়েছে তা নির্ধারণ করতে ব্যবহার করা যেতে পারে? অথবা ওএস-এক্স এর জন্য কিছু আপডেট দরকার? আমি কখনই ওএস-এক্স বিটিডাব্লু ব্যবহার করি নি।
অ্যাকোরিয়াস পাওয়ার

2
আমি ওএস এক্স এর সর্বশেষতম সংস্করণটি ব্যবহার করছি It's এটি সম্ভব যে sudo -nবিএসডি-তে (যা ওএস এক্স ভিত্তিক) জিএনইউ সংস্করণের চেয়ে আলাদা আচরণ করে। আমি শুধু জানাতে লোকেরা জানতে পারে যে চেকের এই সংস্করণে ওএস এক্স আমি কাজ বলে মনে হচ্ছে না অন্য উত্তর (থেকে একটি চেক ব্যবহার করেছেন আমার মন্তব্য জুড়েছে sudo -n uptime 2>&1|grep "load"|wc -l), এবং এই OS এক্স কাজ জরিমানা এটা মার্জিত যেমন নয় মনে হয়, কিন্তু এটি কাজ করে.
নিউক্লিংার

1
@ নব্বইলার ওহ, সুতরাং এটি আউটপুটটির উপর নির্ভর করে (রিটার্নের মান নয়), আকর্ষণীয় কাজ
অ্যাকোরিয়াস পাওয়ার

@ নব্বইচর তবে এটি যতটা সম্ভব কাছাকাছি। বা আরও ভাল কারণ sudo -nসুডো-ভি 1.7.9
মার্কো এম ভন হেগেন

1

@ Wags007 দ্বারা প্রদত্ত উত্তরটি সরল করতে

if sudo -n true
then
  sudo id
else
  echo "sorry, but did not want to bother you"
fi

তবে আপনার https://www.sudo.ws/man/1.8.15/sudoers.man.html কনফিগারেশনটিতে যদি আপনার কাছে defaults mail_badpassথাকে তবে প্রতিটি পরীক্ষার জন্য একটি মেল প্রেরণ করা হবে যা ফলস্বরূপ মিথ্যা (অনুরোধ জানানো হত)। এই জাতীয় উপদ্রব এড়ানোর জন্য আপনার sudoers এর অংশটি এতে ফাইল করুন

Defaults       mail_badpass
Defaults!      /bin/true !mail_badpass

ফলস্বরূপ সুরক্ষা সতর্কতা মেলগুলি / বিন / সত্য ব্যতীত সমস্ত কমান্ডের জন্য প্রেরণ করা হয়। হ্যাঁ, এখন sudo trueকোনও সুরক্ষা সতর্কতা মেল প্রেরণ না করেই সীমাহীন সংখ্যক বার কল করে পাসওয়ার্ড চাপিয়ে দেওয়ার চেষ্টা করা যেতে পারে ।

নোট: সর্বদা ব্যবহার visudosudoers ফাইল সম্পাদনা করার আপনার প্রিয় সম্পাদক পরিবর্তে। এটি করতে ব্যর্থ হওয়ায় আপনার লক আউট হওয়ার ঝুঁকি রয়েছে।


0

সুডো ম্যানুয়াল অনুসারে, সুডো সেশনটি সময় স্ট্যাম্প ফাইল ( /usr/lib/sudo/<username>) অনুসারে নির্ধারিত হয় , সুতরাং আপনি স্ট্যাম্প ফাইলের তারিখ / সময় পরীক্ষা করে কতটা সময় বাকী তা নির্ধারণ করতে পারবেন। তবে, আমার সিস্টেমে টাইম স্ট্যাম্প ফাইলটি প্রকৃতপক্ষে একটি ডিরেক্টরি এবং এগুলির মধ্যে ক্রিপ্টিক বিষয়বস্তু সহ তিনটি ফাইল রয়েছে (এবং কিছু অদ্ভুত টাইম স্ট্যাম্পও রয়েছে, তবে /usr/lib/sudo/<username>মনে হয় এমন একটি টাইমস্ট্যাম্প রয়েছে যা আমি আমার পাসওয়ার্ডকে sudo দিয়েছিলাম) আমার মনে হয় /usr/lib/sudo/<username>/0সাম্প্রতিকতম sudoমৃত্যুদন্ড কার্যকর করার সময় স্ট্যাম্প রয়েছে ।


1
আমার সিস্টেমে টাইমস্ট্যাম্প ফাইলগুলি একটি ডিরেক্টরিতে থাকে যা সুডো ব্যবহার না করে পড়া যায় না, যা একটি পাসওয়ার্ডের জন্য অনুরোধ করে এবং এভাবে ওপি'র প্রয়োজনীয়তার জন্য কাজ করে না।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

ভাল যুক্তি. আমি এই ফাইলগুলির মালিকানা পরীক্ষা করিনি। আপনি ঠিক বলেছেন, এটি অকেজো হবে।
ডিসাইস্টার


0

কমপক্ষে sudo 1.8.21p2 এ, এই পদ্ধতিটি ভাল কাজ করে:

if sudo -vn 2> /dev/null; then
    echo "You have an active sudo session"
fi

0

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

#!/bin/sh

_unlock_sudo() {
    if [ "$USER" != 'root' ]; then
        if ! sudo -n -- true 2>/dev/null; then
            printf '\n'
            printf 'Enter password for sudo user "%s":\n' "$USER"
            while ! sudo -- true; do
                printf '\n'
                while true; do
                    printf 'Slow your roll. Try to enter password again? [Y/n]: '
                    read -r answer
                    case "$answer" in
                        ''|y|Y|yes|Yes|YES)
                            printf '\n'
                            printf 'Enter password for sudo user "%s":\n' "$USER"
                            break
                            ;;
                        n|N|no|No|NO)
                            printf '\n'
                            printf 'OK. Exiting...\n'
                            exit 1
                            ;;
                        *)
                            printf 'Please enter a valid option...\n'
                            printf '\n'
                            ;;
                    esac
                done
            done
        fi
    fi
}

_unlock_sudo

-1

সহজ উত্তর ...

sudo echo
isSudo=$?
if [[ "$isSudo" -ne 0 ]]; then
  echo "This script must be run by root or a sudo'er"
  echo
  exit 1
fi

# do stuff

exit 0

এটি একটি পাসওয়ার্ডের জন্য অনুরোধ জানাবে, যদি ব্যবহারকারী ইতিমধ্যে সক্রিয় সুডো সেশন না
রাখেন

-2

ম্যান পেজ সম্পর্কে কেমন আছে

man sudo

আপনার উপলব্ধ কমান্ডগুলি তালিকাবদ্ধ করুন:

sudo -l

সুডোর নিজেই সময় বা তারিখের সীমা নেই ... দেখুন:

man sudo
man sudoers

sudo -l আমাকে একটি পাসওয়ার্ড প্রম্পট দেয়। আমার কোনও সক্রিয় সুডো সেশন নেই বলার জন্য এটি দরকার।
ভালাদিল

sudo স্থিতি সময় শেষ হয়েছে, তবে আপনি যদি সঠিক হন তবে এটির শিডিউল বৈশিষ্ট্য নেই বলে আপনি সঠিক হন।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

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