في الأيام المزدحمة ، أود أن أجري
$ ./configure && make && Sudo make install && halt
في الليل وانتقل إلى السرير ، على أمل أن يتم تثبيت التطبيق تلقائيًا. لكن ما أراه في اليوم التالي هو الشاشة حيث يسألني سودو عن كلمة المرور. فكيف يمكنني تشغيل سودو بكلمة مرور في سطر أوامر واحد ، أو هل هناك أي طريقة أخرى للقيام بذلك؟
نعم ، استخدم رمز التبديل -S
الذي يقرأ كلمة المرور من STDIN:
$echo <password> | Sudo -S <command>
لذلك بالنسبة لقضيتك ، ستبدو كما يلي:
$./configure && make && echo <password> | Sudo -S make install && halt
بالطبع ، استبدل <password>
بكلمة مرورك.
يمكنك استبدال سطر الأوامر الخاص بك بهذا:
$Sudo su
$./configure && make && make install && halt
ستتم مطالبتك بكلمة المرور الخاصة بك على الفور ، ثم سيتم تشغيل بقية الأوامر كمستخدم خارق.
العديد من الحلول الأخرى لها عيب أنها تعمل بشكل غير ضروري ./configure
و make
كجذر.
هذا ملفوف قليلاً ، لكن يجب أن يعمل:
Sudo sh -c "su $USER -c ./configure && su $USER -c make && make install && halt"
لاحظ استخدام علامات الاقتباس المزدوجة للسماح بـ $USER
للتوسيع بواسطة Shell (غير الجذر).
يمكنني أيضًا إضافة رمز sleep 60
قبل الأمر halt
. لقد قمت أحيانًا بأشياء مثل هذا ، أتوقع أن يعمل الأمر لفترة طويلة ، لكن هناك خطأ ما وينتهي على الفور ؛ sleep
يتيح لي قتل الأمر قبل إيقاف النظام. أو يمكنك استخدام shutdown
مع وسيطة زمنية.
يمكنك أيضًا تكوين Sudo باستخدام visudo
للسماح للمستخدم باستخدام make as Sudo دون كلمة مرور.
User_Alias USERS = your_user
Cmnd_Alias CMDS = /usr/bin/make
USERS ALL = (ALL) NOPASSWD: CMDS
تعيين HISTIGNORE إلى " Sudo -S "
$ export HISTIGNORE='*Sudo -S*'
ثم قم بتمرير كلمة المرور الخاصة بك بأمان إلى Sudo:
$ echo "your_password" | Sudo -S -k <command>
"التاريخ" يعني عدم حفظ هذا الأمر في السجل. هذا هو التاريخ في الذاكرة أو ملف "~/.bash_history".
على سبيل المثال ، سيقوم ما يلي بإدخال كلمة المرور بأمان إلى أمر Sudo ، دون الاحتفاظ بمحفوظات كلمة المرور الخاصة بك.
"-S" ، يعني استخدام stdin لكلمة المرور ،
يعني "-k" تجاهل بيانات الاعتماد المخزنة مؤقتًا لإجبار Sudo على السؤال دائمًا. هذا هو لسلوك ثابت.
$ export HISTIGNORE='*Sudo -S*'
$ echo "<your_password>" | Sudo -S -k whoami
$ echo "<your_password>" | Sudo -S -k cat /etc/shadow
$ echo "<your_password>" | Sudo -S -k bash /tmp/myscript.sh
الجانب السلبي للطريقة أعلاه هو أنه إذا كنت تريد رؤية الأوامر التي قمت بتشغيلها في السجل لاحقًا ، فلن تكون هناك. هناك طريقة أخرى لتحديث ذاكرة التخزين المؤقت لبيانات اعتماد مصادقة سودو (يتم تمكين الإعداد الافتراضي بمهلة 5 دقائق) ، ثم قم بتشغيل سودو بشكل منفصل. ولكن الجانب السلبي لهذا هو أنك ستحتاج إلى أن تكون على دراية بذاكرة التخزين المؤقت لمدة 5 دقائق.
فمثلا:
$ export HISTIGNORE='*Sudo -S*'
$ echo "<your_password>" | Sudo -S -v
$ Sudo whoami
$ echo "<your_password>" | Sudo -S -v
$ Sudo cat /etc/shadow
$ echo "<your_password>" | Sudo -S -v
$ Sudo /tmp/myscript.sh
ملاحظة قمت بتشغيل Sudo قبل كل أمر لضمان تحديث ذاكرة التخزين المؤقت لـ Sudo ، حيث أن الإعداد الافتراضي هو 5 دقائق. نعم ، لا يجب أن يستغرق whoami 5 دقائق ، لكنني أعتقد أنه ربما يكون قد تم تشغيله قبل كل أمر للتناسق. يمكنك أيضًا وضع "export HISTIGNORE = ' Sudo -S '" في ملف ~/.bashrc الخاص بك ، ثم تحميله بـ ". ~/.bashrc" أو تسجيل الخروج ثم تسجيل الدخول. ومع ذلك ، أفكر في استخدام هذا لأغراض البرمجة النصية ، لذلك سأبقيها في الجزء العلوي من جميع البرامج النصية الخاصة بي لأفضل ممارسات الأمان. قد يكون تعيين "صدى" "| Sudo -S -v" على متغير بدلاً من ذلك فكرة جيدة ، ثم قم بتشغيل المتغير قبل كل أمر يحتاج إلى امتيازات الجذر ، راجع تعليق Janar. يجب أن يتضمن تعليق "John T" أيضًا المعلمة "-k" ، كما لو كنت تقوم بتشغيل "Sudo -S" بدون "-k" وأن ذاكرة التخزين المؤقت لمصادقة Sudo لديها بالفعل بيانات اعتمادك (وما زالت صالحة ، ذاكرة التخزين المؤقت لمصادقة Sudo الافتراضية هي 5 دقائق) ثم bash سيتم تشغيل كلمة المرور الخاصة بك كأمر بدلاً من ذلك ، وهو أمر سيء.
يمكنك أن تفعل ذلك أيضا:
Sudo -S <<< "password" command
ملاحظة ، لقد وجدت أن هذه الطريقة لا تعمل على إصدار أقدم من Sudo ، وتحديداً "Sudo version 1.6.7p5":
$ echo "<your_password>" | Sudo -S -k whoami
حيث تعمل هذه الطريقة على الإصدارات القديمة والجديدة سودو:
$ echo "<your_password>" | Sudo -S -v
$ Sudo whoami
إذا كنت ترغب في مزيد من الحذر ، فيمكنك عمل نص برمجي وتغيير أذونات الملف بحيث يمكن فقط للجذر قراءته وتحريره ثم تشغيله.
مثال:
1) إنشاء ملف:
gedit ~/.easy.install
2) لصق هذا وحفظ:
./configure && make && echo <password> | Sudo -S make install && halt
3) اجعله قابلاً للتنفيذ:
Sudo chmod +x ~/.easy.install
4) قم بتغيير أذونات الملف حتى يتمكن الجذر فقط من قراءته وتحريره:
Sudo chmod 700 ~/.easy.install
5) تشغيل:
~/.easy.install
استمتع ؛-)
يعد إعداد Sudo كهذا أمرًا خطيرًا إذا حدث أن رأى شخص ما أن Sudo لا يتطلب كلمة مرور على حسابك. ما لم تعرف ما تفعله ، لا تفعل ذلك. لقد حدث ذلك في برنامج التدريب المحلي A + مع الكمبيوتر التجريبي الخاص بي عدة مرات ... -_-
يبدو أن ما قاله John T. يبدو جيدًا ، إلا أنه لا يزال هناك خطر العثور على كلمة المرور في سجل Shell. يبدو ما قاله CarlF أفضل ، ولكن إذا فشل أحد الأوامر ، فسيظل الكمبيوتر يعمل بامتيازات المستخدم الخارق.
تم حل المشكلة. على سبيل المثال ، إلى جذر المستخدم:
echo -e 'password\npassword\n' | Sudo passwd root
أنا شخصياً أقوم بنفس الشيء تمامًا كما أجاب John T في 9 نوفمبر 2009 في 2:47 ، كما أنني قمت بتحسين عملي وفقًا لتوجيهات إجابته ، شكرًا.
الفرق هو أنني أميل إلى استخدام المتغيرات ، مثل:
AutoSuDo=$" $echo pass | Sudo -S";
# Change AutoSuDo to something else.
# Note that string starts with space,
# useful only if used as first command in line
بهذه الطريقة يمكنني بسهولة استخدام متغير الألغام بدلاً من Sudo ،
$AutoSuDo apt-get update;
هذا مفيد للغاية مع بعض النصوص الطويلة. أنا أساسا الاستفادة من هذه لأجهزة الكمبيوتر الشخصية للآخرين ، والتي لا بد لي من الحفاظ عليها.
أوصي أيضًا بالاهتمام على: