সুডোর প্রয়োজন বশ স্ক্রিপ্টে একবারে কীভাবে পাসওয়ার্ড প্রবেশ করতে হয়


21

উপাত্ত

  • আমি এই মেশিনের অপারেটর ব্যবহারকারীদের নিজের সিআইএফ শেয়ারগুলি মাউন্ট করার জন্য চাই
  • sudoersফাইল আগে থেকেই রয়েছে /bin/mount -t cifs //*/* /media/* -o username=*সব অপারেটরদের জন্য কমান্ড
  • আমি চাই যে ব্যবহারকারীরা cifsএকবারে নয়, দুবার নয় একবারই পাসওয়ার্ড টাইপ করে স্ক্রিপ্টের মাধ্যমে একটি ভাগ ভাগ করে দিতে পারেন।
  • Sudo পাসওয়ার্ড এবং সিআইএফ পাসওয়ার্ড অভিন্ন।

আমি ইতিমধ্যে যা আছে

এই স্ক্রিপ্টটি কাজ করে:

#!/bin/bash
sudo 'mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER'

... তবে ব্যবহারকারীদের একই পাসওয়ার্ডটি দু'বার টাইপ করা প্রয়োজন!

  • একবারের জন্য sudo
  • একবার মাউন্ট নিজেই

এটিও কাজ করবে:

#!/bin/bash
echo -n Password: 
read -s szPassword
echo $szPassword | sudo -S sh -c 'echo $szPassword | mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER'

... তবে এর জন্য আমাকে সমস্ত অপারেটর ব্যবহারকারীদের সক্ষম হতে দেওয়া উচিতsudo sh (বড় ধরনের সুরক্ষা সমস্যা)

প্রশ্ন

কিভাবে একটি CIFS ভাগ মাউন্ট ব্যাশ মধ্যে নির্বাণ ছাড়া ¹ shমধ্যে sudoersফাইল বা একটি স্থায়ী / অস্থায়ী ফাইল তৈরি ???

নোট 1: অজগর, পারল, সি, গো, ... দয়া করে?
দ্রষ্টব্য 2: আমি জানি যে আমি কেবল sudoersফাইলের মাধ্যমে পাসওয়ার্ড মুছে ফেলতে পারি , তবে আমি সুরক্ষা জোরদার করার চেষ্টা করছি, এটিকে আলগা না করে সুবিধামত ছাড়াই ...


2
কীভাবে printf "%s\n" "$szPassword" "$szPassword" | sudo -S mount -t cifs / ...?
মুরু

এখন চেষ্টা করছি! @ মুরু
ফেব্বী

উত্তর:


24

পরিবর্তে আপনার ব্যবহারকারীকে সুডো ব্যবহারের কল করতে হবে sudo script। স্ক্রিপ্টটি মূল হিসাবে চালিত হচ্ছে কিনা তা পরীক্ষা না করে দেখুন কিনা

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root, use sudo "$0" instead" 1>&2
   exit 1
fi

আপনার ব্যবহারকারীর পাসওয়ার্ড ক্যাপচার চেষ্টা করবেন না।


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

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

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

ধন্যবাদ, তবে আমি প্রশ্নটি কিছুটা বড় করে দিতে পারি: এটি ইতিমধ্যে একটি স্ক্রিপ্ট, ইতিমধ্যে সেই পরীক্ষাটি রয়েছে (বাদে 1>&2) অটোস্টার্টে রয়েছে এবং এটি কেবল একটি সিআইফির ভাগ হিসাবে ব্যবহৃত হত, তবে এখন এটি তিনটি, তাই সত্যিই একটি পাসওয়ার্ড প্রয়োজন হয়. (এটি অপারেটর গ্রুপের সদস্য না হয়ে অন্য কেউ যদি এটি চালানোর চেষ্টা করে তবে এটি ইতিমধ্যে সেই পরীক্ষাটি ধারণ করে)
Fabby

@ ফ্যাবি আমার এখনও মনে হয় আপনি সমস্যাটি ভুলভাবে পৌঁছে যাচ্ছেন। এই ক্ষেত্রেগুলির জন্য কোনও সিআইএফএস / এসএমবি এর পাসওয়ার্ডটি নিরাপদে ভাগ করে নেওয়ার জন্য "স্মরণ" রাখতে সহায়তা রয়েছে ( ~/.smbcredentialsউদাহরণস্বরূপ সম্পাদনা ), এমনকি সুডোর প্রয়োজন ছাড়াই (যদি আপনি জিভিএফএস, অ্যামাউন্ট বা পোলকিট ব্যবহার করেন)।
ব্রায়াম

7

আমি বকা!

নিম্নলিখিত লিপি:

#!/bin/bash
read -p "Password: " -s szPassword
printf "%s\n" "$szPassword" | sudo --stdin mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER,password="$szPassword"

শুধু কাজ করে এবং:

  1. পাসওয়ার্ডযুক্ত কোনও ফাইল তৈরি করে না
  2. ব্যবহারকারীকে একাধিক শেয়ারের জন্য শুধুমাত্র একটি পাসওয়ার্ড টাইপ করতে দেয় (উইন্ডোজগুলি সহ)
  3. অতিরিক্ত সুবিধাগুলি মঞ্জুর করার দরকার নেই। :-)

1
1 প্রশ্ন: এটি প্রক্রিয়া তালিকার মধ্যে কমান্ড প্রতিধ্বনিত করে?
Rinzwind

3
@ রিঞ্জউইন্ডটি অন্তর্নির্মিত হিসাবে, এটি বাশ বা জেডএসে হওয়া উচিত নয়। মাউন্ট কমান্ড, যদিও পারে।
মুরু

<<<পরিবর্তে ব্যবহার করা যেতে পারে printf , তবে আরও ভাল পদ্ধতির readসম্পূর্ণরূপে ড্রপ এবং কেবল sudo --stdinনিজের দ্বারা সমস্ত ব্যবহার করা হবে। $ printf "Type out your password\n" && sudo --stdin apt-get update ব্যবহারকারীর মতো কিছু এখনও সুডো পাসওয়ার্ডে টাইপ করতে পারে। এবং এটি প্রক্রিয়া তালিকায় রাখবে না। তবে অবশ্যই অন্যান্য সুরক্ষা সমস্যাগুলি রয়েছে যেমন কীলগার, সম্ভাব্য দুর্বলতা sudoএবং ব্লা, এবং ব্লাহ
অনন্ততায় রয়েছে

@ সের্গিকোলডিয়াজনি: সম্পাদনা করতে নির্দ্বিধায় মানুষ, মানুষ!
ফব্বি

3

sudoএই কমান্ডটি কার্যকর করার জন্য কোনও পাসওয়ার্ডের প্রয়োজন নেই ; mountঅবশিষ্টাংশের জন্য পাসওয়ার্ড প্রম্পট ।

মধ্যে sudoers, মত কিছু অন্তর্ভুক্ত

ALL        ALL = NOPASSWD: /bin/mount -t cifs //*/* /media/* -o username=*

এটি অন্তর্ভুক্ত করার পরে, sudoএই নির্দিষ্ট আদেশের জন্য আর পাসওয়ার্ড চাইবে না; ব্যবহারকারীকে এখনও mountকমান্ডটিতে একটি পাসওয়ার্ড সরবরাহ করতে হবে ।

দ্রষ্টব্য : আপনি প্রশ্নের মধ্যে যা অন্তর্ভুক্ত করেছেন তা থেকে আমি কমান্ড ভারব্যাটিম নিয়েছি; এর ওয়াইল্ডকার্ডগুলি ব্যবহারকারীদেরকে বাজে কিছু করার অনুমতি দেবে কিনা তা আমি পরীক্ষা করে দেখিনি। পড়ুন sudoersnastiness উদাহরণের জন্য র manpage। বিশেষত, নোট করুন যে এই লাইনটি sudoersব্যবহারকারীকে যে কোনও সংখ্যক -oস্যুইচ বা অন্যান্য যুক্তি যুক্ত করতে দেয় mount আপনি আপনার পদ্ধতির পুনর্বিবেচনা করতে চাইতে পারেন, যেমন @ ব্রায়াম প্রস্তাবিত কোনও স্ক্রিপ্ট যুক্ত করে এবং sudoঅতিরিক্ত প্রমাণীকরণ ছাড়াই এটি চালানোর অনুমতি দিন । এরপরে স্ক্রিপ্টটি নিশ্চিত করে যে ব্যবহারকারীরা কেবল সেটির নির্দিষ্ট ফর্মটি চালাতে পারেন mountযা আপনি তাদের চালাতে চান।

এছাড়াও, সমস্ত ব্যবহারকারীর জন্য এটির অনুমতি দেওয়ার পরিবর্তে আপনি এটি নির্দিষ্ট গ্রুপের সদস্যদের মধ্যেও সীমাবদ্ধ রাখতে পারেন, যেমন আপনি একটি গ্রুপ তৈরি করতে পারেন cifsmountএবং তারপরে

%cifsmount ALL = NOPASSWD: /bin/mount -t cifs //*/* /media/* -o username=*

@ ফ্যাবি দুঃখিত, তবে এ সম্পর্কে কী বিপজ্জনক? এছাড়াও আমি কটাক্ষের একটি ইঙ্গিত সনাক্ত করতে পারি, নিশ্চিত নই।
অলিফান্ট - মনিকা

ভাল, এমনকি sudo একটি পাসওয়ার্ড প্রয়োজন হয় না, মাউন্ট এখনও একটি পাসওয়ার্ড প্রয়োজন হতে পারে। / Etc / sudoers ফাইলটি কেবল sudo তৈরি করতে ব্যবহার করা যেতে পারে একটি পাসওয়ার্ডের প্রয়োজন হয় না। এটি মাউন্ট কোনও পাসওয়ার্ড চেয়েছে কিনা তা প্রভাবিত করবে না। যদি কোনও ব্যক্তি মাউন্ট করতে ব্যর্থ হয়, তবে sudo কেবলমাত্র একটি কমান্ড চালিয়ে শেষ করবে যা ব্যর্থ হয়েছে, সম্ভবত এটি কোনও সমস্যা নয়।
তোগাম

@ তুগাম আমার উদ্দেশ্য ছিল দুজনের পরিবর্তে একটি পাসওয়ার্ড।
অলিফোঁট - মনিকা

আমার উদ্দেশ্যটি একটি sudoers ফাইলে একটি "অপারেটর" গ্রুপ রাখা তাই কোনও অপারেটর যদি নিজের স্টাফগুলি মাউন্ট করার চেষ্টা করে তবে তাদের এখনও একটি পাসওয়ার্ড টাইপ করতে হবে, তবে "স্ট্যান্ডার্ড" অপারেটর মাউন্টগুলি মাউন্ট করতে তাদের কেবল পাসওয়ার্ড টাইপ করতে হবে একবারের পরিবর্তে একবার 5 বার ... তবে আপনার সমাধান অন্যের পক্ষে কাজ করতে পারে, তাই উন্নত ... (এবং মূল মন্তব্যগুলি সরানো হয়েছে)
Fabby

1

এই সমস্যাগুলির একটি সাধারণ সমাধান হ'ল নিম্নলিখিত সূচিটি আপনার সূডোর শীর্ষে স্ক্রিপ্টের প্রয়োজনে রাখুন:

#!/bin/bash
case $EUID in
   0) : cool we are already root - fall through ;;
   *) # not root, become root for the rest of this session
      # (and ask for the sudo password only once)
      sudo $0 "$@" ;;
esac
# now the present process is effective-UID  (root)
# so there's no need to put sudo in front of commands

any more commands here will run as superuser ...

স্পষ্টতই, এটির একটি নেতিবাচক দিক রয়েছে যদি স্ক্রিপ্টের কিছু কমান্ডের sudoচালনার প্রয়োজন না হয় তবে এখানে সুযোগ সুবিধার অপ্রয়োজনীয় উচ্চতা রয়েছে।

যাইহোক, ভেবেছিলাম এই ছোট্ট টিপটি ভাগ করে নেব। এটি সম্পর্কে সর্বোত্তম বিষয়টি হ'ল আপনি যদি ইতিমধ্যে কার্যকর-ইউড রুট হন (যেমন আপনি ইতিমধ্যে এটি সুডোর অধীনে ডেকেছেন) তবে এটি নিখুঁতভাবে সঠিক কাজ করে। এছাড়াও একটি ত্রুটি দেওয়া এবং আপনাকে পুনরায় টাইপ / পুনরায় টাইপ করতে বাধ্য করা (সুডোর সাথে) কম বন্ধুত্বপূর্ণ।

আপনি timestamp_timeoutভেরিয়েবলটিও পরীক্ষা করতে চাইতে পারেন যাতে ব্যবহারকারীর শংসাপত্রগুলি সীমিত সংখ্যক মিনিটের জন্য মনে রাখতে man 5 sudoersবলে sudo(এবং ভগ্নাংশ হতে পারে)।


একটি সহজ উত্তর পেতে আমি স্ক্রিপ্টটি বড় করে দিয়েছি: স্ক্রিপ্টটিতে ইতিমধ্যে রয়েছে: #test if root: if not: bail out if [[ $EUID -ne 0 ]]; then echo "This script must be run as root, use sudo "$0" instead" 1>&2 exit 1 fi মূল বিষয়টি এটিতে একই পাসওয়ার্ডের সাথে একাধিক মাউন্ট রয়েছে (আবার: সরানো হয়েছে), তবে যাইহোক ধন্যবাদ ...
ফ্যাবি

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

এটা করা উচিত কিন্তু এটা না ! ;-) কারণ প্রতিটি সিআইএফ ভাগ করে নেওয়ার জন্য একটি পাসওয়ার্ডও প্রয়োজন। (যেহেতু এটি উবুন্টু পাসওয়ার্ডের থেকে পৃথক হতে পারে তবে এই ক্ষেত্রে অপারেটররা তাদের উইন্ডোজ এবং উবুন্টু পাসওয়ার্ডগুলি সিঙ্ক্রোনাইজড রাখে না)
ফ্যাবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.