আমি কীভাবে sudo -u $ ব্যবহারকারীকে এনভিয়েভ ব্যবহার করতে পারি?


19

sudoনীচে নেওয়ার সময় মনে হয় যে sudo -u $userশিকড়ের পরিবেশটি এখনও ব্যবহার করা হচ্ছে। আমি কীভাবে sudoব্যবহারকারীদের পরিবেশ ব্যবহার করতে পারি ? বিশেষ নোট হিসাবে যে সমস্ত ব্যবহারকারী আমি এটি ব্যবহার করব তা লগইন শেলগুলি নয় not


'পরিবেশ' সংজ্ঞা দিন। # whoami => root # sudo -u user whoami => user
অ্যালেক্স

1
@alex প্রথম চিত্রটি আপনি যে sudo -u usersu usersu - user
এনভিউটি

তবে ব্যবহারকারীর লগইন শেল না থাকলে "ব্যবহারকারীর পরিবেশ" বলতে আপনার কী বোঝায়?
থমাস থিমল

@ থমাস ব্যবহারকারীরা শেল না দিতে পারলেও প্রোগ্রাম পরিচালনা করতে পারেন ... আমি বিশ্বাস করি -uযে দলগুলিও উপেক্ষা করা হয় ... আমি মূল থেকে কিছু চেষ্টা করেছি (সুডু-ডাউন ব্যবহার করে) এবং এটি কার্যকর হয়েছে, সম্ভবত এটি ব্যবহারকারীর পক্ষে হয়নি। .. সুতরাং আমাকে নিশ্চিত করতে হবে যে আমি কমান্ডগুলি এমনভাবে চালাচ্ছি যাতে সেখানে সীমাবদ্ধতা এবং পরিবেশগত সমস্যা থাকে।
xenoterracide

উত্তর:


21

চেষ্টা sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu

দুর্ভাগ্যক্রমে তাদের শেল না থাকলে সেগুলি কাজ করে না /etc/passwd:( তবে এটি আমার ধারণা হবে ...
xenoterracide

ম্যান পৃষ্ঠাটি দেখে মনে হচ্ছে যে -Eএটিই পরিবেশ সংরক্ষণ করে, যেমন পরিবেশের সমস্ত পরিবর্তনশীল ইত্যাদি এখানে রয়েছে, যদিও এটি এখনও সেট করে না PATHএবং LD_LIBRARY_PATHকলিং ব্যবহারকারীর কাছে।
শাহবাজ

1
$SUDO_USERব্যবহার করা যেতে পারে
রাহুল পাতিল

4

man sudoerson দেবিয়ান আরও একটি সম্ভাবনার কথা উল্লেখ করেছে। আপনার চারপাশে কোন উপায়টি নিশ্চিত তা নিশ্চিত নয়, তবে আপনার প্রশ্নের মতো মনে হচ্ছে আপনি যে env_resetবিকল্পটি পেতে চান /etc/sudoers- তার বিপরীতে মূলত env_keepতালিকাটি রয়েছে। সঠিক সেট জন্য HOMEআপনি ব্যবহার করতে পারেন -Hবিকল্পে sudoসরাসরি আবার বা, sudoersসঙ্গে always_set_homeবিকল্প।

বিকল্পভাবে আপনি পাস করতে চান এমন env_fileএকটি নির্দিষ্ট পরিবেশ নির্দিষ্ট করতে ব্যবহার করতে পারেন। যাইহোক, আমি মনে করি আপনি সেরা env_*বিকল্পগুলি থেকে বিকল্পগুলি পরীক্ষা করে দেখুন man sudoers, কারণ /etc/sudoersএটি সমস্ত নিয়ন্ত্রণ করে এবং এটাই পয়েন্টটি।

আমি env_resetআমার sudoersফাইলের অভ্যন্তরে যে প্রসঙ্গটি ব্যবহার করি তা এখানে :

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year

1

যখন sudo ing পরিবেশের ভেরিয়েবল সংরক্ষণ করা হয় না।

আমার ক্ষেত্রে, আমি এখানে-নথি ব্যবহার করি ।

আপনি my_script.shএখানে আপনার ডকুমেন্টের মতো আপনার ক্রিয়াগুলি রেখেছেন :

su -u some_user <<EOF
./my_script.sh
EOF

আপনার এখানে সরাসরি চলক রাখা উচিত নয়, কারণ এগুলি আপনার বর্তমান ব্যবহারকারীর দ্বারা ব্যাখ্যা করা হবে।

su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF

যদি $MY_VARস্ক্রিপ্ট চালাতে ব্যবহারকারীর জন্য সেট না করা হয়, এটিকে সেট করা হবে না।

আপনাকে পরিবর্তনশীলগুলি অবশ্যই আপনার স্ক্রিপ্টগুলির মধ্যে কল করা উচিত, বা আপনাকে অবশ্যই এগুলি দিয়ে পালাতে হবে \

যেমন।

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

এখানে, $MY_VARথাকবে some_userপ্রাসঙ্গিক মান।


ভাল উত্তর. একটি ছোট সংশোধন: এটি এর su - some_userপরিবর্তে হওয়া উচিত su -u some_user
রডলফবাইকার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.