পাসওয়ার্ড জিজ্ঞাসা না করে আমি কীভাবে কোনও স্ক্রিপ্টে একটি কমান্ড sudo করব?


107

আমি প্রতিদিন আমার সিস্টেমটি স্বয়ংক্রিয়ভাবে চালু করতে চাই। সুতরাং আমি আমার পাইথন স্ক্রিপ্টে নীচের কোডটি ব্যবহার করি তবে sudoপ্রতিবারে আমাকে একটি পাসওয়ার্ড জিজ্ঞাসা করে:

os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
       24 hours\' > /sys/class/rtc/rtc0/wakealarm"')

sudoপ্রতিবার পাসওয়ার্ড না জিজ্ঞাসা করে আমি কীভাবে এই স্ক্রিপ্টটি চালাতে পারি ?


4
আপনার আচরণটি সমর্থন করে কিনা তা দেখতে আপনার মাদারবোর্ড ম্যানুয়াল বা BIOS এ অনুসন্ধান করা উচিত। আমি জানি এটা প্রশ্ন dodges! =] তবে এটি পর্যাপ্ত সমাধান হতে পারে।
অ্যালেক্স হিরজেল

উত্তর:


149

দয়া করে নোট করুন: যে কোনও পদ্ধতিতে আপনার লগইন পাসওয়ার্ডকে সরল পাঠ্যে, একটি কমান্ডে বা কোনও ফাইলে রাখার বিষয়টি অন্তর্ভুক্ত, এটি নিরাপত্তাহীন এবং ব্যবহার করা উচিত নয়!

এটি সেটআপ করার সঠিক পদ্ধতিটি sudoযা আপনাকে কেবল একটি নির্দিষ্ট কমান্ডের প্রয়োজন, যেমন echo date... > rtc...পাসওয়ার্ডের প্রয়োজন ছাড়াই চালানোর অনুমতি দেওয়া হয়।

পদক্ষেপ 1. ঠিক সেই কমান্ড দিয়ে একটি শেল স্ক্রিপ্ট তৈরি করুন

  • খুলুন gedit(বা আপনার প্রিয় সম্পাদক) এবং স্ক্রিপ্ট যেমন তৈরি করুনpydatertc.sh
  • কেবল এই লাইনটি সন্নিবেশ করান এবং এটিতে সংরক্ষণ করুন, যেমন আপনার হোম ডিরেক্টরি:
    প্রতিধ্বনি তারিখ \ '+% s \' -d \ '+ 24 ঘন্টা \'> / সিস / শ্রেণী / আরটিসি / আরটিসি 0 / জাগরণ
  • সম্পাদকটি প্রস্থান করুন এবং টার্মিনাল থেকে স্ক্রিপ্টটি সম্পাদনযোগ্য করে তুলুন এবং এর মালিকানাটিকে রুটে পরিণত করুন , অন্যথায় আপনার সিস্টেমে অ্যাক্সেস সহ অন্য কোনও ব্যবহারকারী সম্ভবত এটি সম্পাদনা করতে পারে এবং আপনার পাসওয়ার্ডের প্রয়োজন ছাড়াই রুট হিসাবে যা কিছু আদেশ চায় তা সম্পাদন করতে পারে :
    sudo chown root:root /home/username/pydatertc.sh
    sudo chmod 700 /home/username/pydatertc.sh
    

পদক্ষেপ 2. pydatertc.shএকটি পাসওয়ার্ড প্রয়োজন ছাড়াই কার্যকর করতে অনুমতি দিতে sudo সেট আপ করুন

  • sudo visudoসুডো অনুমতি ( sudoers) ফাইলটি খুলতে টার্মিনালে টাইপ করুন
  • 25 লাইনের আশেপাশে, আপনি এই লাইনটি দেখতে পাবেন: %sudo ALL=(ALL:ALL) ALL
  • এই লাইনের নীচে নিম্নলিখিত লাইনটি প্রবেশ করান, usernameআপনার ব্যবহারকারী নামটি কোথায় :
    ব্যবহারকারীর নাম ALL = (সমস্ত) NOPASSWD: / home/username/pydatertc.sh
  • সম্পাদক থেকে প্রস্থান করুন ( Ctrl+ Xযদি ন্যানো )

পদক্ষেপ 3. কল করার জন্য আপনার অজগর স্ক্রিপ্টটি সংশোধন করুন pydatertc.sh

  • লাইনটি এতে পরিবর্তন করুন:
    os.system ('sudo / home/username/pydatertc.sh')

এখন আপনার স্ক্রিপ্টটি কোনও পাসওয়ার্ডের প্রয়োজন ছাড়াই এবং আপনার অ্যাকাউন্ট, আপনার ডেটা বা আপনার সিস্টেমের সুরক্ষার সাথে কোনও আপস না করে চালানো উচিত !


বিকল্প কেবলমাত্র wakealarm(সাধারণ ব্যবহারের জন্য নয়!):

ইন শুধুমাত্র এই নির্দিষ্ট ঘটনাতে , যেহেতু /sys/class/rtc/rtc0/wakealarmফাইলটি শুধুমাত্র সিস্টেমের জন্য জেগে ওঠার এলার্ম নিয়ন্ত্রণ করে এবং অন্যথায় নিরীহ, অন্য বিকল্প পাসওয়ার্ড এড়াতে পারেন যে ফাইলের মালিকানা নিতে হয় chown(যদি আপনি শুধুমাত্র বিপদাশঙ্কা সেটিং ব্যবহারকারী হন) , বা এটি দিয়ে বিশ্ব-লেখার যোগ্য করুন chmod +666; সেক্ষেত্রে অক্ষত sudoরেখে কেবল আপনার পাইথন কলটি সরিয়ে ফেলুন sh -c "...."


1
দুর্দান্ত, এটি করার সঠিক উপায়।
রোডমর

1
এরকম একটি বিশদ, সহায়ক উত্তর এবং ঠিক কীভাবে এটি করা উচিত
আর্টঅফকোড

@ রবার্টরোসতি, আপনার প্রস্তাবিত সম্পাদনার জন্য অনেক ধন্যবাদ - আমি এটিকে প্রথম স্থলে ভুলে যাওয়া উচিত নয়!
ইশ

1
@ এম-রিচ আপনি কি এই লাইনের উপরে আদেশটি পড়েছেন? "অন্যথায় আপনার সিস্টেমে অ্যাক্সেস সহ অন্য কোনও ব্যবহারকারী সম্ভবত এটি সম্পাদনা করতে পারে এবং আপনার পাসওয়ার্ডের প্রয়োজন ছাড়াই মূল হিসাবে যা কিছু আদেশ চান তা কার্যকর করতে পারে"
টোবিয়াস কেইনজলার

2
আমি বুঝতে পারি যে এই উত্তরটি পুরানো - তবে এখানে এখনও একটি সমস্যা রয়েছে: ফাইলটি যদি / home / ব্যবহারকারীর মধ্যে থাকে তবে সিস্টেমটি আপত্তিজনক হতে পারে যদি সেই ডিরেক্টরিটি কোনও দূষিত ব্যবহারকারীর দ্বারা লিখিত হয় (বা কোনও মূল-বিনষ্ট লগইন যা হয়) আপোস করা) । তারা দূর করতে পারবে? অথবা ফাইল নামান্তর, তার জায়গায় অন্য স্ক্রিপ্ট করা এবং চলমান যে মাধ্যমে স্ক্রিপ্ট sudo- পাসওয়ার্ড ছাড়াই। সুতরাং, স্ক্রিপ্টটি এমন একটি ডিরেক্টরিতে রাখা আরও নিরাপদ যা কেবলমাত্র রুট পরিবর্তন করতে পারে, যেমন: / usr / sbin বা / root । অন্যথায়, এটি LGTM।
এনভিআরএএম

30

সতর্কবাণী!

আপনার লগইন পাসওয়ার্ডকে কোনও কমান্ড বা ফাইলে সরল পাঠ্যে রাখা অত্যন্ত সুরক্ষিত এবং এটি আপনার ব্যক্তিগত ডেটা এবং আপনার সিস্টেমে আপস করতে পারে। এটা তোলে হয় অত্যন্ত বাঞ্ছনীয় এমনকি যদি আপনি কি মনে করেন আপনার সিস্টেমে "ব্যক্তিগত" বা "নিরাপদ অবস্থান" হয় এই কাজ করতে না!

যদি স্ক্রিপ্টটি শুধুমাত্র ব্যক্তিগত ব্যবহারের জন্য হয় এবং আপনি এটিকে কোনও নিরাপদ স্থানে রেখে দিয়ে থাকেন এবং আপনার অ্যাকাউন্টটি চুরি হয়ে যাওয়ার ভয় হয় না, তবে এখানে একটি সহজ সমাধান রয়েছে:

echo LOGINPASSWD | sudo -S COMMAND HERE

যেখানে LOGINPASSWD হ'ল আপনার লগইন পাসওয়ার্ড (উদাহরণ: iloveponies) এবং COMMAND এখানে আপনার কমান্ডটি su-এর পরে আসে যেমন sh -c "ইকো দা .. ইত্যাদি etc


13
@ ভিসোয়া, দয়া করে মনে রাখবেন যে, সরল পাঠ্যে পাসওয়ার্ড প্রকাশ করা এটি খুব বিপজ্জনক। আপনাকে অত্যন্ত পরামর্শ দেওয়া হচ্ছে, এটি না করার জন্য
আনোয়ার

3
-1 যদি এটি কোনও ভাল ধারণা বলে মনে হয়, তবে আপনি নিজের রুট অ্যাকাউন্টে একটি পাসওয়ার্ড সেট করে z7sg এর সমাধানটি ব্যবহার করতে পারেন; এটি ঠিক তত সহজ এবং এটি খুব বিপজ্জনক সুরক্ষা সমস্যা তৈরি করে না।
ব্রাইস

4
Hah! আমার উত্তরে আমার 6 টি upvotes এবং 4 টি ডাউনভোট ছিল :) তবে কেন ছেলেরা, আমি 'ব্যক্তিগত ব্যবহার', 'নিরাপদ স্থান' ইত্যাদি পরিষ্কার করছিলাম না? কোনও সুরক্ষা সমস্যা নেই যদি না আপনি এই ফাইলটি না দিয়ে থাকেন এবং আপনার কোনও এসএস সার্ভার চলছে না! স্ক্রিপ্টটি ব্যক্তিগত ব্যবহারের জন্য এবং নিরাপদ জায়গায় রয়েছে এমন সুরক্ষার সমস্যাটি আপনি কোথায় দেখেন?
হাইট্রোমো

5
অবহেলিত, এটি অন্ধকার দিকের রাস্তা, এবং সুডো পদ্ধতিটির প্রয়োজন নেই।
ফ্লয়েড

4
ঠিক আছে, কেবল আমাকে বলুন, হ্যাকার আপনার অ্যাকাউন্টে সাধারণ ব্যবহারকারী হিসাবে লগইন করেছেন, এমনকি কীভাবে হেক আপনার পাসওয়ার্ডটি / usr / share / help / lv / ubuntu-help এর অধীনে স্ক্রিপ্টটি সন্ধান করবে ??
hytromo

21

আপনি যদি স্ক্রিপ্টটি নির্দিষ্ট সময়ে (বা দিনের বেলা) চলমান মনে না করেন তবে এটির মূল ডিরেক্টরিতে হোম ডিরেক্টরি ( /root) ব্যবহার করুন এবং সিস্টেম ক্রোনট্যাব ( /etc/crontab) থেকে মূল হিসাবে স্ক্রিপ্টটি চালান । তারপরে আপনাকে আপনার সুরক্ষার সাথে আপস করতে হবে না।

কীভাবে ক্রোনটবটিতে স্ক্রিপ্টটি যুক্ত করা যায় তার জন্য https://help.ubuntu.com/commune/CronHowto দেখুন ।


4
আপনি সম্ভবত এটি ব্যবহার করতে চাইতে পারেন anacronযদি এটি কোনও ডেস্কটপ / ল্যাপটপ যা 24x7 না চালায়
বালকি

এটি একটি দরকারী উত্তর, উদাহরণস্বরূপ, আপনি আপডেটগুলি পরীক্ষা করার জন্য যদি আপনি স্ক্রিপ্টটি লিখছেন, সেই তথ্য দিয়ে কিছু করুন এবং প্রয়োজনীয় আপডেট সম্পর্কে প্রশাসককে ইমেল করুন। ব্যক্তিগতভাবে, আমার স্ক্রিপ্টগুলির অনেকগুলি সার্ভার অটোমেশনের জন্য ব্যবহৃত হয়, তাই কেবলমাত্র sudo crontab -e ব্যবহার করে আমি করতাম। +1
রব

11

উপরের চমৎকার উত্তরে উল্লেখ করা হয়নি যা সুডোর সাথে সম্পর্কিত অন্য একটি সুন্দর বৈশিষ্ট্য হ'ল 'টাইমস্ট্যাম্প_টাইমআউট' পরিবর্তনশীল। এটি একটি সুডো ভেরিয়েবল যা ইন্টারেক্টিভ পাসওয়ার্ড টাইপ করার সময় আপনি সংরক্ষণ করতে বাড়াতে পারেন।

উদাহরণস্বরূপ, / etc / sudoers (বা এটি থেকে অন্তর্ভুক্ত করা ফাইলগুলির মধ্যে একটি) আপনি ডিফল্টটি সংশোধন করতে পারেন:

# only require a password once every 60 minutes
Defaults timestamp_timeout=60

'ম্যান sudoers' থেকে সম্পূর্ণ বিবরণ:

timestamp_timeout

        Number of minutes that can elapse before sudo will ask for
        a passwd again.  The default is 5, set this to 0 to always
        prompt for a password.

অবশ্যই, এটি ক্রোন থেকে কমান্ড চালানোর নির্দিষ্ট ক্ষেত্রে সহায়তা করতে পারে না। তবে সচেতন হওয়া ভাল জিনিস।


0
export MY_SUDO_PASS="user_password_here"

এটি কাজ করে কিনা তা পরীক্ষা করতে:

echo $MY_SUDO_PASS
> user_password_here

"Sudo apt-get update" চালানোর জন্য, এবং পরিবেশের ভেরিয়েবলগুলি থেকে পাসওয়ার্ড গ্রহণ করা যা আমরা এর আগে তৈরি করেছি:

echo $MY_SUDO_PASS | sudo -S apt-get update

অজগর থেকে চালান (উদাহরণস্বরূপ ডিরেক্টরিটির মালিকানা পুনরাবৃত্তভাবে ইউজারনেম_এমে পরিবর্তন করা):

python
>> import subprocess
>> subprocess.call('echo $MY_SUDO_PASS | sudo -S chown -R username_here /home/username_here/folder_to_change_ownership_recursivley', shell=True)

প্রতিধ্বনি $ MY_SUDO_PASS এর পাসওয়ার্ড পেয়ে যান-এস সুইচ এটি ধরে এবং পাসওয়ার্ডটি sudo তে পাস করে


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