আমি কীভাবে কোনও স্ক্রিপ্ট থেকে / ইত্যাদি / সূডারগুলি সম্পাদনা করব?


116

/etc/sudoersসাদা তালিকা থেকে স্টাফ যুক্ত / সরানোর জন্য আমার স্ক্রিপ্ট থেকে সম্পাদনা করা দরকার ।

ধরে নিলাম আমার কাছে একটি কমান্ড রয়েছে যা একটি সাধারণ ফাইলে কাজ করবে, আমি কীভাবে এটি প্রয়োগ করতে পারি /etc/sudoers?

আমি কি এটি অনুলিপি এবং সংশোধন করতে পারি, তারপরে visudoপরিবর্তিত অনুলিপিটির সাথে আসলটি প্রতিস্থাপন করতে পারি? আমার নিজস্ব লিপিটি সরবরাহ করে $EDITOR?

বা আমি কি একই লকগুলি ব্যবহার করতে পারি এবং cp?

সম্ভাব্য সমস্যা সম্পর্কে প্রশ্নটি কাজ করে এমন কিছু আবিষ্কার করার চেয়ে বেশি।

উত্তর:


146

পুরানো থ্রেড, তবে কী:

echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo

10
এটি একটি দুর্দান্ত উত্তর। পুরো সাবশেলটি মূল হিসাবে নির্বাহ করা উচিত, যেমন echo "$USER ALL=NOPASSWD:/usr/bin/rsync" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/rsync')
সাইমন

3
এই উত্তর দুর্দান্ত কাজ করে! আমি এটি ডেবিয়ান প্যাকেজগুলিতে পোস্টিনস্ট স্ক্রিপ্টগুলির জন্য ব্যবহার করি। ধন্যবাদ! যেহেতু এটি সর্বদা রুট, তাই এটি সংক্ষিপ্ত এবং কার্যকর হয়:echo "$CONFIGLINE" | (EDITOR="tee -a" visudo)
বরিস ডাপ্পেন

3
আমি কেবল @ বোরিসডাপ্পেনের উত্তরের একটি প্রধান উপবৃত্তিটি উল্লেখ -aকরতে চাই EDITOR="tee": পতাকাটি : এটি প্রথম লাইনে ওভাররাইট নয় কেবল ফাইলটিতে লাইন যুক্ত হবে। আমি প্রথমে ভিন্নটি ধরতে পারি নি এবং সংযোজনের উপায়টি আমি অনুভব করতে পারি না। আমি আশা করি যে সরাসরি ;-)
জিন-ফিলিপ মারে

3
কেউ আমাকে কীভাবে ব্যাখ্যা করতে পারে যে আমি কীভাবে এই কাজটি বোঝাতে চাইছি তা EDITOR = 'tee -a' এর পরে অর্ধিকোলনের প্রয়োজন নেই। আমি জানি যে কমান্ডটি ভঙ্গ হবে। এডিটোর হ'ল শেল ভেরিয়েবল এবং ভিসুডো আরেকটি কমান্ড তাই এখানে আমরা একই কমান্ড লাইনে এডিটর এবং ভিজুডো পাস করছি। কিভাবে এটি সত্যিই কাজ করে?
সাগর

1
আমি এই x = "কিছু" প্রতিধ্বনি x চেষ্টা করেছিলাম। এটি আমার পক্ষে কাজ করে নি।
সাগর

43

কাস্টম সম্পাদক সহ এর জন্য ভিজুডো ব্যবহার করুন। এটি ব্রিনের সমাধানের সাথে সমস্ত বর্ণের পরিস্থিতি এবং "হ্যাক" সমস্যার সমাধান করে।

#!/bin/sh
if [ -z "$1" ]; then
  echo "Starting up visudo with this script as first parameter"
  export EDITOR=$0 && sudo -E visudo
else
  echo "Changing sudoers"
  echo "# Dummy change to sudoers" >> $1
fi

এই স্ক্রিপ্টটি sudoers এর শেষে "# ডমি পরিবর্তন" sudoers এ যুক্ত করবে। কোনও হ্যাক এবং কোনও রেসের শর্ত নেই।

এনেটেটেড সংস্করণ যা এটি কীভাবে কাজ করে তা ব্যাখ্যা করে:

if [ -z "$1" ]; then

  # When you run the script, you will run this block since $1 is empty.

  echo "Starting up visudo with this script as first parameter"

  # We first set this script as the EDITOR and then starts visudo.
  # Visudo will now start and use THIS SCRIPT as its editor
  export EDITOR=$0 && sudo -E visudo
else

  # When visudo starts this script, it will provide the name of the sudoers 
  # file as the first parameter and $1 will be non-empty. Because of that, 
  # visudo will run this block.

  echo "Changing sudoers"

  # We change the sudoers file and then exit  
  echo "# Dummy change to sudoers" >> $1
fi

5
এটির জন্য প্রয়োজন যে sudo সংকলিত হয়েছে --enable-env-editor, অন্যথায় এটি কেবলমাত্র সম্পাদকীয় পরিবর্তনশীলকে সম্মানজনকভাবে ব্যবহার করবে যদি এটি জ্ঞাত মানগুলির একটি ছোট সেটগুলির মধ্যে একটি হয়।
কালেব

এটি আমার পক্ষে কাজ করে (উবুন্টু 12.04), তবে কীভাবে এটি কাজ করে তা আমি বুঝতে পারি না। কেউ কীভাবে এটি সঠিকভাবে ব্যবহার করবেন এবং এটি বাস্তবে কীভাবে ব্যাখ্যা করতে পারে? ধন্যবাদ
মাউন্টেনএক্স

আপনি নোট করতে চান যে 12.04 সুনির্দিষ্টভাবে এটি আমার জন্য কাজ করে না। আমি একটি বাশ স্ক্রিপ্ট তৈরি করেছি, এটিতে + এক্স অনুমতি যুক্ত করেছি এবং নিম্নলিখিত আউটপুট দিয়ে ফাইলটি সম্পাদন করেছি: ভিজুডো: চালাতে অক্ষম / tmp / edit_sudoers: এক্সিকিউট বিন্যাস ত্রুটি দৃশ্যমান: /etc/sudoers.tmp অপরিবর্তিত
জোসে ডিয়াজ-গঞ্জালেজ

এটি আমার পক্ষে দুর্দান্ত কাজ করেছে, যদিও আমি কেবল রুট হিসাবে লগ ইন করেছি sudo -Eএবং প্রথম আদেশটি থেকে সরিয়েছি ।
Merlin2011

আমি এই উত্তরটি সত্যিই পছন্দ করি তবে এটি আমার পক্ষে কার্যকর হয়নি। আমি মনে করি আমার সুডো প্রয়োজনীয় পতাকাটি দিয়ে সংকলিত হয়নি।
Mnebuerquo

30

আপনার সম্পাদনাগুলি একটি অস্থায়ী ফাইলে করা উচিত, তারপরে পরিবর্তনগুলি বৈধ কিনা তা নিশ্চিত করার জন্য ভিজুডো-সি -f sudoers.temp ব্যবহার করুন এবং তারপরে এটি / etc / sudoers শীর্ষে অনুলিপি করুন

#!/bin/sh
if [ -f "/etc/sudoers.tmp" ]; then
    exit 1
fi
touch /etc/sudoers.tmp
edit_sudoers /tmp/sudoers.new
visudo -c -f /tmp/sudoers.new
if [ "$?" -eq "0" ]; then
    cp /tmp/sudoers.new /etc/sudoers
fi
rm /etc/sudoers.tmp

দেখে মনে হচ্ছে আপনি sudoers.tmp কে একটি লক ফাইল হিসাবে ব্যবহার করছেন, এটি নিশ্চিত না যে কীভাবে পরিবর্তনের বিষয়টি নিশ্চিত হয়। কোনও ত্রুটি নেই তা নিশ্চিত করার জন্য আমরা ভিজুডোর প্রস্থান স্থিতি পরীক্ষা করা উচিত নয়?
রূপান্তরকারী

/etc/sudoers.tmp হল ইন্টারেক্টিভ মোডে ভিজুডো দ্বারা পরীক্ষা করা লকফিল। ভিসুডো-সি -f কোনও ত্রুটি থাকলে একটি 1 প্রদান করে, সুতরাং রিটার্ন কোডটি চেক করুন।
ব্রায়ান সি লেন

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

2
পরীক্ষা / স্পর্শের পরিবর্তে লকফিল ব্যবহার করতে হবে
এন-

2
ম্যানপেজটি বলছে এটি /tmp/sudoers.tmp ব্যবহার করে যাতে বর্তমানে মান। অবশ্যই এটি ভবিষ্যতে পরিবর্তন হতে পারে। এবং হ্যাঁ, আপনি ঠিক বলেছেন একটি রেসের শর্ত আছে।
ব্রায়ান সি লেন 18

18

ডেবিয়ান এবং এটি থেকে উদ্ভূত, আপনি /etc/sudoers.d/অধিকার সহ কাস্টম স্ক্রিপ্ট ডিরেক্টরিতে সন্নিবেশ করতে পারেন 0440- আরও তথ্যের জন্য দেখুন /etc/sudoers.d/README

এটি সাহায্য করতে পারে।


যদিও এটি মন্তব্য করা হয় না?

2
@ টমডওয়ারজানস্কি: আইএমএইচও নং। দেখুন মানুষ sudoers (5) এবং অন্যান্য মন্তব্য
পেভিক

তুমি ঠিক বলছো! লিঙ্কগুলি এবং দুর্দান্ত উত্তরের জন্য ধন্যবাদ।

3
আমি সেই ডিরেক্টরিটি সেন্টোস 7 তেও ব্যবহার করি
আলেকজান্ডার বার্ড

আমি মনে করি এটি এটি করার সঠিক উপায়।
জানসোহান

11

ভিজুডো সম্পাদনার জন্য মানব ইন্টারফেস বলে মনে করা হচ্ছে /etc/sudoers। আপনি ফাইলটি সরাসরি প্রতিস্থাপনের মাধ্যমে এটি অর্জন করতে পারেন তবে সমবর্তী সম্পাদনা এবং বাক্য গঠন বৈধতা সম্পর্কে আপনাকে নিজের যত্ন নিতে হবে। r--r-----অনুমতিগুলি মাইন্ড করুন ।


9

যদি আপনার sudoএন্ট্রিগুলিতে যোগ করার অনুমতি দেয় /etc/sudoers.dতবে আপনি এই উত্তরটি @ ড্রাগন 788 দ্বারা ব্যবহার করতে পারেন:

https://superuser.com/a/1027257/26022

মূলত আপনি visudoফাইলটি অনুলিপি করার আগে যাচাই করার জন্য ব্যবহার করেন /etc/sudoers.d, যাতে আপনি নিশ্চিত হন যে আপনি sudoকারও জন্য ব্রেক করছেন না।

visudo -c -q -f filename

এটি এবং আয় সাফল্য (0) যদি এটা বৈধ, তাই আপনার সাথে এটি ব্যবহার করতে পারেন চেক if, &&এবং অন্যান্য স্ক্রিপ্ট বুলিয়ান অপারেশন। একবার আপনি যাচাই হয়ে গেলে, কেবল এটি অনুলিপি করুন /etc/sudoers.dএবং এটি কাজ করা উচিত। এটি রুটের মালিকানাধীন এবং অন্যের লিখনযোগ্য নয় তা নিশ্চিত করুন।


5

একটি কাস্টম সম্পাদক সেট আপ করুন। মূলত এটি একটি স্ক্রিপ্ট হবে যা ফাইলের নামটি গ্রহণ করে (এই ক্ষেত্রে /etc/sudoers.tmp), এবং এটি সংশোধন করে সংরক্ষণ করে। সুতরাং আপনি ঠিক যে ফাইলটি লিখতে পারে। আপনার হয়ে গেলে, স্ক্রিপ্টটি প্রস্থান করুন এবং ভিজুডো আপনার জন্য আসল sudoers ফাইলটি পরিবর্তন করার যত্ন নেবে।

sudo EDITOR=/path/to/my_dummy_editor.sh visudo

আমি কি ঠিক করছি যে সমস্ত ডামি_ডিটার.শ প্রয়োজনের কিছু এই রকম? #!/bin/sh; echo "# my changes to sudoers" >> $1; exit 0এটা আমার জন্য কাজ বলে মনে হচ্ছে।
মাউন্টেনএক্স

4

প্রচুর উত্তর, ইয়ঙ্কসের জন্য সুডোর সাথে কাজ করা হয়েছে তবে এখন পর্যন্ত সেটআপ কনফিগারেশনটি স্বয়ংক্রিয় করার প্রয়োজন নেই। আমি উপরের কয়েকটি উত্তরের একটি মিশ্রণ ব্যবহার করেছি, আমার কনফিগার লাইনটি /etc/sudoers.d এ লিখতে লোকেশন অন্তর্ভুক্ত রয়েছে যাতে আমাকে মূল sudoers ফাইলটি সংশোধন করতে হবে না, তারপরে সিনট্যাক্সের জন্য সেই ফাইলটি পরীক্ষা করা হয়েছে, নীচের সহজ উদাহরণ:

একটি sudoers আপনার লাইন লিখুন ফাইল অন্তর্ভুক্ত:

sudo bash -c 'echo "your_user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/99_sudo_include_file'

আপনার sudoers ভিজুডো সিনট্যাক্স চেক পাস ফাইল অন্তর্ভুক্ত পরীক্ষা করুন:

sudo visudo -cf /etc/sudoers.d/99_sudo_include_file

কেবল নক্ষত্রটি বাদ দিন, সেখানে থাকা উচিত নয় ^^
সোনাতটা

এটি এবং সাফল্যটি প্রত্যাবর্তন করে (0) - পেয়েছে
ওলেগ

2

উপরের উত্তরের জন্য আরও একটি বিকল্প যুক্ত করার জন্য, যদি রেসের শর্তটি কোনও বড় উদ্বেগ না হয় তবে ম্যানুয়ালি কোনও ফাইলটি অনুলিপি করতে এড়াতে নিম্নলিখিত কমান্ডটি ব্যবহার করা যেতে পারে /etc/sudoers

sudo EDITOR="cp /tmp/sudoers.new" visudo

এটি নিশ্চিত করবে যে নতুন ফাইল অনুমোদনের আপডেটের সাথে বৈধ হয়েছে এবং সঠিকভাবে ইনস্টল হয়েছে।

নোট করুন যে /tmp/sudoers.newফাইলটিতে যদি কোনও ত্রুটি থাকে তবে visudoব্যবহারকারী ইনপুটটির জন্য অনুরোধ জানাবে তাই visudo -c -f /tmp/sudoers.newপ্রথমে এটি পরীক্ষা করার পরামর্শ দেওয়া হচ্ছে ।


1

আমি মনে করি সবচেয়ে সরল ফরওয়ার্ড সমাধান হ'ল:

Addudoers.sh একটি স্ক্রিপ্ট তৈরি করুন

#!/bin/sh

while [ -n "$1" ]; do
    echo "$1    ALL=(ALL:ALL) ALL" >> /etc/sudoers;
    shift # shift all parameters
done

এবং আপনি এটি যুক্ত করতে চান এমন ব্যবহারকারীদের সাথে এটি কল করুন:

root prompt> ./addsudoers.sh user1 user2

সম্পূর্ণ ব্যাখ্যার জন্য এই উত্তরটি দেখুন: শেল স্ক্রিপ্টের মাধ্যমে ব্যবহারকারীদের sudoers এ যুক্ত করা

শুভেচ্ছা সহ!


0

এটি প্রতিধ্বনিত করার চেষ্টা করুন। আপনাকে এটিকে একটি সাব-শেলের মধ্যে চালাতে হবে, যদিও। উদাহরণ:

sudo sh -c "echo \"group ALL=(user) NOPASSWD: ALL\" >> /etc/sudoers"


-2

অন্যেরা এখানে যা পোস্ট করেছে তার ভিত্তিতে এটি আমার পক্ষে কাজ করেছে। যখন আমি অন্যান্য লোকের স্ক্রিপ্ট ব্যবহার করি এটি আমার জন্য ভিজুডো খুলবে তবে সম্পাদনাটি করবে না। এটি আমার প্রয়োজনীয় সম্পাদনাটি স্ট্যান্ডার্ড ব্যবহারকারী সহ সকল ব্যবহারকারীকে সাফারি / ফায়ারফক্সের জন্য জাভা 7u17 ইনস্টল করার অনুমতি দেবে।

#!/usr/bin/env bash
rm /etc/sudoers.new
cp /etc/sudoers /etc/sudoers.new
echo "%everyone   ALL = NOPASSWD: /usr/sbin/installer -pkg /Volumes/Java 7 Update 17/Java 7 Update 17.pkg -target /" >> /etc/sudoers.new
cp /etc/sudoers.new /etc/sudoers

এটি sudoers ফাইলের নীচে% প্রত্যেকে ব্লাহ ব্লাহ ব্লাহ যুক্ত করেছে। আমাকে স্ক্রিপ্টটি এভাবে চালাতে হয়েছিল।

sudo sh sudoersedit.sh

শুভকামনা: ডি

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