কেবলমাত্র জিইআইআই ব্যবহার করে ব্যাশ স্ক্রিপ্টের জন্য ব্যবহারকারীকে পাসওয়ার্ড প্রবেশ করানোর উপযুক্ত উপায় (টার্মিনালটি লুকানো রয়েছে)


8

আমি একটি বাশ স্ক্রিপ্ট তৈরি করেছি যা ব্যবহারকারীর সাথে কথোপকথনের জন্য একমাত্র kdialog ব্যবহার করে। এটি একটি ".ডেস্কটপ" ফাইল থেকে চালু করা হয়েছে যাতে ব্যবহারকারী কখনই টার্মিনালটি দেখতে পায় না। এটি জিইউআই অ্যাপ্লিকেশনটির মতো 100% দেখাচ্ছে (যদিও এটি কেবল একটি ব্যাশ স্ক্রিপ্ট)। এটি কেবল কে-ডি-ই চালায় (কুবুন্টু 12.04)।

আমার একমাত্র সমস্যা হ'ল পাসওয়ার্ড ইনপুটটি নিরাপদে এবং সুবিধাজনকভাবে পরিচালনা করা । আমি সন্তোষজনক সমাধান খুঁজে পাচ্ছি না।

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

মূল সমস্যাটি হ'ল kdesudoআমার স্ক্রিপ্টটি প্রবর্তন করার জন্য যা মানক জিইউআই উপায়, এর অর্থ সম্পূর্ণ লিপিটি মূল ব্যবহারকারী দ্বারা কার্যকর করা হয় exec সুতরাং ফাইলের মালিকানাগুলি রুট ব্যবহারকারীর কাছে বরাদ্দ পেয়ে যায়, আমি ~/পাথগুলিতে নির্ভর করতে পারি না এবং আরও অনেক কিছুই আদর্শের চেয়ে কম। মূল স্ক্রিপ্ট হিসাবে সম্পূর্ণ স্ক্রিপ্ট চালানো একটি খুব অসন্তুষ্টির সমাধান এবং আমি মনে করি এটি একটি খারাপ অভ্যাস।

পুরো স্ক্রিপ্টটিকে রুট হিসাবে চালনা না করে কেবল একবার জিইউআইয়ের মাধ্যমে কোনও ব্যবহারকারীকে সুডো পাসওয়ার্ড প্রবেশ করতে দেওয়ার জন্য আমি কোনও ধারণার প্রশংসা করি। ধন্যবাদ।

উত্তর:


14

-Aউবুন্টু বিকল্প আপনি যদি একটি সাহায্যকারী প্রোগ্রাম (SUDO_ASKPASS পরিবর্তনশীল মধ্যে) যে পাসওয়ার্ড চাইতে পারে নির্দিষ্ট করার অনুমতি দেয়।

পাসওয়ার্ড জিজ্ঞাসা করার জন্য একটি স্ক্রিপ্ট তৈরি করুন (myaskpass.sh):

#!/bin/bash
zenity --password --title=Authentication

তারপরে আপনার স্ক্রিপ্টের শুরুতে এই লাইনটি সন্নিবেশ করুন:

export SUDO_ASKPASS="/path/to/myaskpass.sh"

এবং এর সমস্ত উপস্থিতি প্রতিস্থাপন করুন sudo <command>:

sudo -A <command>

আপনি যে পাসওয়ার্ড জিজ্ঞাসার প্রোগ্রামটি চান তার পরিবর্তে ব্যবহার করতে পারেন zenity। আমাকে এটি একটি স্ক্রিপ্টের মধ্যে আবদ্ধ করতে হয়েছিল কারণ SUDO_ASKPASS অবশ্যই একটি ফাইলকে নির্দেশ করতে পারে, সুতরাং এটি --passwordপ্রয়োজনীয় বিকল্পের সাথে কাজ করবে না zenity

উপরেরটি কৌতুকের মতো কাজ করে যদি এটি কমান্ড লাইন থেকে চালিত হয় বা আপনি যদি ফাইল ম্যানেজারের স্ক্রিপ্ট ফাইলটিতে ডাবল ক্লিক করার পরে টার্মিনালটিতে রান নির্বাচন করেন তবে আপনি যদি রান চয়ন করেন বা একটি .ডেস্কটপ ফাইল থেকে এটি চালু করার চেষ্টা করেন তবে প্রত্যেকটি sudoআপনাকে জিজ্ঞাসা করবে আবার পাসওয়ার্ডের জন্য।


আপনি যদি কোনও টার্মিনাল উইন্ডো একেবারেই না চান তবে আপনি পাসওয়ার্ডটি একটি ভেরিয়েবলের মধ্যে সঞ্চয় করতে এবং এটিতে পাইপ করতে পারেন sudo -S। সম্ভবত কিছু সুরক্ষা উদ্বেগ রয়েছে, তবে আমি মনে করি এটি নিরাপদ ( এই উত্তরের মন্তব্যগুলি পড়ুন )।

আপনার স্ক্রিপ্টের শুরুতে এই লাইনটি সন্নিবেশ করুন:

PASSWD="$(zenity --password --title=Authentication)\n"

এবং এর সমস্ত উপস্থিতি প্রতিস্থাপন করুন sudo <command>:

echo -e $PASSWD | sudo -S <command>

ধন্যবাদ. এটা খুব আকর্ষণীয়। তবে এটি ব্যবহার করার সময় স্বাভাবিক সুডোর সময়সীমা (যেমন 15 মিনিট) হারিয়ে যায়। আমার স্ক্রিপ্ট, যার 50 টিরও বেশি sudo কমান্ড রয়েছে এখন ব্যবহারকারীর পাসওয়ার্ড 50+ বার জিজ্ঞাসা করবে! আমি কিছুটা গুগল করেছিলাম এবং এর সমাধান আমি পাইনি। আপনি কি জানেন?
মাউন্টেনএক্স

আপডেটের জন্য ধন্যবাদ. আপনার প্রস্তাবিত বিকল্পটি হ'ল সুরক্ষার উদ্বেগের কারণে আমি বাতিল করে দিয়েছি তবে আপনি প্রদত্ত লিঙ্কটিতে মন্তব্যগুলি পড়া থেকে আমি মনে করি এটি সম্ভবত যথেষ্ট নিরাপদ। এবং এটি সমস্যা সমাধানের একটি সহজ উপায়। ধন্যবাদ.
মাউন্টেনএক্স

আমার সিস্টেমে পরীক্ষা করে এটি হতে হবে sudo -s(লোয়ার-কেস s) এবং না sudo -S(আপার-কেস s)।
WinEunuuchs2 ইউনিক্স

0

এটি এরিক কারভালহোর দুর্দান্ত উত্তরের ভিত্তিতে তৈরি। আমি যে সমস্যার মুখোমুখি হয়েছি সে সম্পর্কে বিস্তারিতভাবে পোস্ট করার জন্য এটি পোস্ট করছি। বিশেষত, এটি ব্যবহার করার সময় সাধারণত সুডোর সময়সীমা (যেমন 15 মিনিট) হারিয়ে যায়। আমার স্ক্রিপ্ট, যার 50 টিরও বেশি sudo কমান্ড রয়েছে এখন ব্যবহারকারীর পাসওয়ার্ড 50+ বার জিজ্ঞাসা করবে!

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

$ cat myaskpass.sh 
#!/bin/bash
kdialog --password "Please enter your password: "
exit 0


$ cat askpasstest1.desktop 
#!/usr/bin/env xdg-open
[Desktop Entry]
Comment=SUDO_ASKPASS tester1
Exec=bash /home/user/test/askpasstest1.sh
GenericName=SUDO_ASKPASS tester1
Name=SUDO_ASKPASS tester1
NoDisplay=false
Path[$e]=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
Categories=Application;Utility;
X-KDE-SubstituteUID=false
X-KDE-Username=

এবং নিজেই একটি পরীক্ষা স্ক্রিপ্ট। এই সমাধানটি ব্যবহার করার সময় এটি একবারে আপনার পাসওয়ার্ডের জন্য জিজ্ঞাসা করবে। (সাধারণত, এটি ডিফল্ট সুডো সময়সীমার কারণে একবার জিজ্ঞাসা করবে।)

#!/bin/bash

sudo -k
SUDO_ASKPASS="/home/user/test/myaskpass.sh" sudo -A touch filemadeas_askpass1
touch filemadeas_regularuser1
SUDO_ASKPASS="/home/user/test/myaskpass.sh" sudo -A touch filemadeas_askpass2
touch filemadeas_regularuser2
ls -la filemadeas* > /home/user/test/fma.log
kdialog --title "Files Created" --textbox /home/user/test/fma.log 640 480
sudo rm filemadeas_*
rm fma.log

exit 0

কমান্ড লাইন থেকে এই স্ক্রিপ্টটি চালানো হচ্ছে, কেবল একবারেই পাসওয়ার্ড জিজ্ঞাসা করা হবে। জিইউআই থেকে চালানো (ফাইল ম্যানেজারে sudo -A.ডেস্কটপ বা .sh ক্লিক করা) প্রতিটি পাসওয়ার্ড পুনরায় পরীক্ষা করে। আমি এটি বের করার চেষ্টা করব।
এরিক কারভালহো

আমি সবেমাত্র আমার উত্তর আপডেট করেছি।
এরিক কারভালহো

এরিক ... আপনি কি সমস্যার সমাধান খুঁজে পেয়েছেন?
এন্থনি

0

নিম্নলিখিত স্ক্রিপ্টটি কমান্ড লাইন, ডেস্কটপ ফাইল বা ডাবল-ক্লিকের মাধ্যমে কাজ করে, কেবল একবারের জন্য পাসওয়ার্ড জিজ্ঞাসা করে, এবং আদেশের প্যাটার্নটি sudo -Sp '' <your command here> <<<${sudo_password}ফাইলের যে কোনও জায়গায় ব্যবহার করা যেতে পারে:

    # get sudo password
    sudo_password=$( gksudo --print-pass --message="Provide permission to make system changes: Type your password or press Cancel." -- : 2>/dev/null )
    # check for null entry or cancellation
    if [[ ${?} != 0 || -z ${sudo_password} ]]
    then
        exit 4
    fi
    if ! sudo -kSp '' [ 1 ] <<<${sudo_password} 2>/dev/null
    then
        exit 4
    fi
    # command
    sudo -Sp '' gedit "/etc/hosts" <<<${sudo_password}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.