আলাদা ব্যবহারকারী হিসাবে ব্যাশ স্ক্রিপ্টের অংশটি চালান


33

কোনও স্ক্রিপ্টের অংশকে আলাদা (রুটবিহীন) ব্যবহারকারী হিসাবে চালানোর কোনও উপায় আছে কি? এটি যদি সহায়তা করে তবে অংশটি আলাদা ব্যবহারকারীর হিসাবে চালানো স্ক্রিপ্টের শেষে ঘটে occurs

সম্পাদনা করুন:
ওএস -> উবুন্টু 9.04


উত্তর:


42

স্ক্রিপ্টে sudo কমান্ড ব্যবহার করুন।

ওইরূপে থাকা:

sudo -u username command

উবুন্টু কমান্ড রান আদেশ ব্যবহারকারী হিসাবে ব্যবহারকারীর নাম

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


5
এটি দুর্দান্ত এবং সহজ, তবে একবারে একটির পরিবর্তে কোনও গ্রুপ কমান্ডের জন্য কী উপায় আছে?
অ্যান্ড্রু

একটি বাশ স্ক্রিপ্ট লিখুন, এটিকে এক্সিকিউটেবল করুন chmod +x script.shএবং তারপরেsudo -u username script.sh
NiCU

@ অ্যান্ড্রু আমি নিজেই এটি নিয়ে ভাবছিলাম এবং নীচেরগুলি আমার জন্য কাজ করেছেন: sudo -u # sh -c 'cmd1 && cmd2'
কারসেল

এছাড়াও iযদি আপনি ব্যবহারকারীর পরিবেশ অর্জন করতে চান তবে বিকল্পটি অন্তর্ভুক্ত করুন
নয়েডেভ

6

এই উত্তরটি ভাল, তবে সার্ভারফল্টের পরামর্শটি কিছুটা বিপজ্জনক - যে কাউকে রুট হিসাবে চালানোর অনুমতি দেয়! সুতরাং আমি এখানে পোস্ট করছি কারণ আমি মন্তব্যটি ফর্ম্যাট করতে পারি না।

আপনার প্রয়োজন মতো যথাযথ প্রয়োজনীয় অনুমতিগুলি দেওয়ার জন্য আমি ভিজুডো ব্যবহার করার পরামর্শ দেব। টাইপ করুন visudoএবং এর মতো একটি লাইন যুক্ত করুন:

username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2

আপনার যদি অনেক হোস্টে একই জিনিস চালানোর দরকার হয় তবে আপনি এটি দিয়ে এটি খুলতে পারেন:

username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2

তবে আমি ** * ব্যবহারও করব না:

username ALL=(ALL) NOPASSWD: ALL

বা ব্যবহারকারীর নাম হোস্টনাম = সমস্ত

Sudoer man পৃষ্ঠা রক্তাক্ত বিবরণ প্রচুর আছে


এটি কি কেবলমাত্র কোনও নির্দিষ্ট ব্যবহারকারীর জন্য উপলব্ধ কমান্ডের জন্য কাজ করবে?
মনীষ মাথাই

আপনি উল্লেখ করতে পারেন যে কেবলমাত্র নির্দিষ্ট ব্যবহারকারী কমান্ডটি চালাতে পারবেন (উপরের উদাহরণগুলিতে, usernameব্যবহারকারীর নাম দিয়ে কমান্ডটি চালাতে সক্ষম হবেন) the যদি আপনি চালানোতে চান নির্বাহযোগ্য কেবল একটি নির্দিষ্ট ব্যবহারকারীর দ্বারা এক্সিকিউটেবল হয় তবে তা খুব ভাল - কেবলমাত্র সেই ব্যবহারকারীর sudo -u username commandlineনামটি স্ক্রিপ্টের লাইনে দিন।
জেমস পোলি

@Manish। হ্যাঁ। Sudoers ফাইল যা বলে তা হ'ল "এই হোস্টটিতে এই ব্যবহারকারীর নামটি কোনও পাসওয়ার্ড না দিয়েই কমান্ড 1 চালানোর অনুমতি দিন
DaveParillo

6

# আমি = পছন্দ:

#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"

echo 1: $USER

#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_

echo 3: $USER

# ./run

1: root
2: nobody
3: root

10
আপনি কিছু ব্যাখ্যামূলক পাঠ্য যোগ করতে পারেন?
কাজার্ক

4

সোনারকুবের জন্য:

sudo -u sonar /usr/bin/sonar start

sonarকমান্ডটি চালানোর জন্য ব্যবহারকারীর নামটি কোথায় ব্যবহৃত হয়/usr/bin/sonar start


2

এটি সম্পর্কে তেমন নিশ্চিত নয়, তবে আপনি যদি চান যে কেবলমাত্র স্ক্রিপ্টের শেষটি অন্য কোনও ব্যবহারকারী হিসাবে চলবে, আপনি যুক্ত করতে পারেন su someuser স্ক্রিপ্টের শেষের আগে ।

আমি কিছু অনুপস্থিত করছি?

আশা করি এইটি কাজ করবে,

শুভেচ্ছা সহ


1
আমি মনে করি এটি সর্বাধিক উপযুক্ত উত্তর, অন্য সমস্ত উত্তরগুলি সুডোর প্রস্তাব দেয় যা প্রায়শই কিছু ন্যূনতম লিনাক্স ইনস্টলেশনতে ডিফল্টরূপে ইনস্টল করা হয় না।
টিম

1

এইভাবে, কোনও স্ক্রিপ্টের শেষেটি বিভিন্ন ব্যবহারকারী (মূল) দ্বারা কার্যকর করা হবে। কল $[LINENO+2]এবং exit $?কল নোট করুন । এগুলি একবারে সম্পাদন করতে এবং sudoকলটির প্রস্থান কোড সংরক্ষণ করার জন্য স্ক্রিপ্টের শেষ করা প্রয়োজন ।

#!/bin/bash                                                                                                                                                                                                                                  
echo $USER                                                                                                                                                                                                                                      

# pipe the rest of this script via a sudo call                                                                                                                                                                                                                                         
tail -n +$[LINENO+2] $0 | exec sudo bash                                                                                                                                                                                                     
exit $?                                                                                                                                                                                                                                     
echo $USER
exit 1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.