তাদের পরিবেশ সহ অন্য ব্যবহারকারী হিসাবে sudo


56

$ whoami
admin
$ sudo -S -u otheruser whoami
otheruser
$ sudo -S -u otheruser /bin/bash -l -c 'echo $HOME'
/home/admin

লগইন শেল হিসাবে বাশকে আহ্বান করা সত্ত্বেও কেন $HOMEসেট করা হচ্ছে না /home/otheruser?

বিশেষত, /home/otheruser/.bashrcউত্সাহিত করা হচ্ছে না। এছাড়াও, /home/otheruser/.profileউত্সাহিত করা হচ্ছে না। - ( /home/otheruser/.bash_profileবিদ্যমান নেই)

সম্পাদনা: হুবহু সমস্যাটি হ'ল https://stackoverflow.com/questions/27738224/mkvirtualenv-with-fabric-as-another-user-fails


এই প্রশ্নের একটি সমাধান অন্যান্য প্রশ্নেরও সমাধান করবে, আপনি এই পরিস্থিতিতে অন্য প্রশ্নটি মুছতে চাইবেন।
পাভেল Šিমেরদা

উত্তর:


83

sudoস্রেফ ব্যবহার করে লগইন শেলটি চাওয়ার জন্য -i। কমান্ড নির্দিষ্ট করা না হলে আপনি লগইন শেল প্রম্পট পাবেন, অন্যথায় আপনি আপনার কমান্ডের আউটপুট পাবেন।

উদাহরণ (লগইন শেল):

sudo -i

উদাহরণ (একটি নির্দিষ্ট ব্যবহারকারীর সাথে):

sudo -i -u user

উদাহরণ (একটি আদেশ সহ):

sudo -i -u user whoami

উদাহরণ (মুদ্রণ ব্যবহারকারীদের $HOME):

sudo -i -u user echo \$HOME

দ্রষ্টব্য: ব্যাকস্ল্যাশ অক্ষরটি নিশ্চিত করে যে ডলারের চিহ্নটি ব্যবহারকারীর শেলের কাছে পৌঁছেছে এবং কলিং ব্যবহারকারীর শেলটিতে তা ব্যাখ্যা করা যায় না।

আমি কেবল স্ট্রেসের সাথে শেষ উদাহরণটি যাচাই করেছিলাম যা আপনাকে যা ঘটছে ঠিক তা বলে। আউটপুট বেলো দেখায় যে শেলটি --loginনির্দিষ্ট কমান্ডের সাথে এবং তার সাথে ডেকে পাঠানো হচ্ছে ঠিক যেমন আপনার ব্যাশে স্পষ্ট কল হিসাবে, তবে অতিরিক্তভাবে sudo সেট করার মতো নিজস্ব কাজও করতে পারে $HOME

# strace -f -e process sudo -S -i -u user echo \$HOME
execve("/usr/bin/sudo", ["sudo", "-S", "-i", "-u", "user", "echo", "$HOME"], [/* 42 vars */]) = 0
...
[pid 12270] execve("/bin/bash", ["-bash", "--login", "-c", "echo \\$HOME"], [/* 16 vars */]) = 0
...

আমি লক্ষ্য করেছি যে আপনি ব্যবহার করছেন -Sএবং আমি সাধারণত এটি একটি ভাল কৌশল বলে মনে করি না। আপনি যদি কীবোর্ড থেকে প্রমাণীকরণ না করে ভিন্ন ব্যবহারকারী হিসাবে কমান্ডগুলি চালাতে চান তবে আপনি পরিবর্তে এসএসএইচ ব্যবহার করতে চাইতে পারেন। এটি localhostঅন্যান্য হোস্টের জন্যও কাজ করে এবং সর্বজনীন কী প্রমাণীকরণ সরবরাহ করে যা কোনও ইন্টারেক্টিভ ইনপুট ছাড়াই কাজ করে।

ssh user@localhost echo \$HOME

দ্রষ্টব্য: এসএসএইচ সহ আপনার কোনও বিশেষ বিকল্পের প্রয়োজন নেই কারণ এসএসএইচ সার্ভার সর্বদা এসএসএইচ ক্লায়েন্টের অ্যাক্সেসের জন্য লগইন শেল তৈরি করে।


2
sudo -i -u user echo \$HOMEআমার জন্য কাজ করে না। আউটপুট: $HOME। স্ট্রেস আপনার মতো একই আউটপুট দেয়। ব্যাপারটা কি?
জন_ ওয়েস্ট

ধারণা নেই, এটি এখনও আমার পক্ষে কাজ করে, আমার এটি দেখতে বা সম্ভবত সিস্টেমটি স্পর্শ করা দরকার।
পাভেল Šিমেরদা

10

আপনি বাশকে অনেক বেশি ক্রেডিট দিচ্ছেন। সমস্ত "লগইন শেল" বাশ বলতে বোঝায় ফাইলগুলি স্টার্টআপ এবং শাটডাউনে উত্সাহিত হয়। $HOMEপরিবর্তনশীল তা চিন্তা করে না।

ব্যাশ ডক্স লগইন শেলটির অর্থ আরও কিছু ব্যাখ্যা করে: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html#Bash-Startup-Files

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

আপনি sudoযেভাবে পরিবেশটি প্রত্যাশা করছেন সেভাবে যদি পরিবেশকে আরও বেশিভাবে পরিচালনা করতে চান তবে -iসুডোর জন্য স্যুইচটি দেখুন । চেষ্টা করুন:

sudo -S -u otheruser -i /bin/bash -l -c 'echo $HOME'

সুডোর জন্য ম্যান পেজটি এটি আরও বিশদে বর্ণনা করেছে, যদিও এটি সত্যই ভাল নয়, আমি মনে করি: http://linux.die.net/man/8/sudo


4
B বাড়ি বাশ দ্বারা সেট করা হয়নি - ধন্যবাদ, আমি এটি জানতাম না।
ব্যবহারকারী 80551

দেখুন strace, আমার উত্তর হবে। এটি দেখায় যে /bin/bash -l -c 'echo $HOME'ব্যবহার করার সময় আপনাকে নিজেরাই কমান্ড লাইন তৈরি করার দরকার নেই -i
পাভেল Šিমেরদা

1
এই sudoসিনট্যাক্সটি আমার মেশিনে একটি ত্রুটি ফেলেছিল। ( বিকল্পটি suব্যবহার করে -cতবে আমি তা করি না বলে মনে করি sudoনা)) এর সাথে আমার ভাগ্য ভাল ছিল:HomeDir=$( sudo -u "$1" -H -s echo "\$HOME" )
পালসুইম

হ্যাঁ, @ পালসুইম ঠিক আছে। সম্পর্কে নিশ্চিত নয় -S(আমার এটির প্রয়োজন ছিল না, তাই আমি এটি ছেড়ে দিয়েছি), তবে -cএখানে কাজ করে না, -sপরিবর্তে আপনার প্রয়োজন ।
বহুপদী_ডোনট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.