আমার মূলত এটি করা দরকার:
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
এটি কাজ করে না। আমি কীভাবে env ভেরিয়েবল $ ডামি পাস করতে পারি? -p -l এর সাথে কাজ করে না।
আমার মূলত এটি করা দরকার:
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
এটি কাজ করে না। আমি কীভাবে env ভেরিয়েবল $ ডামি পাস করতে পারি? -p -l এর সাথে কাজ করে না।
উত্তর:
আপনি লগইন শেল কল না করে এটি করতে পারেন:
sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'
বা:
sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'
-pবিকল্প suকমান্ড বিভিন্ন পরিবেশের সংরক্ষণ।
-pবিকল্প suনয়sudo
-mভেরিয়েবল সংরক্ষণ করে, অন্যরা বলে -cকী পার্থক্য? এবং এই উত্তরের দিনগুলির একটি মন্তব্য -E stackoverflow.com/questions/10488758/…
প্রো টিপ: সত্যিই চালানোর জন্য একটি ভাল কারণ না হয়sudo su । ভিন্ন ব্যবহারকারী হিসাবে একটি কমান্ড চালাতে, ব্যবহার করুন sudo -u username command। আপনি যদি একটি রুট শেল চান, চালান sudo -iবা sudo -l। আপনি যদি রুট অ্যাকাউন্টটি সক্রিয় করে থাকেন তবে আপনি একাও চালাতে পারেন su, তবে sudo suএটি কার্যকর নয়। এবং হ্যাঁ, আমি জানি আপনি এটি সর্বত্র দেখেন।
এটি বলেছে, ব্যবহারকারীর অধিবেশনটির পরিবেশ সংরক্ষণ করবে sudoএমন -Eসুইচটি রয়েছে :
-E, --preserve-env
Indicates to the security policy that the user wishes to preserve
their existing environment variables. The security policy may
return an error if the user does not have permission to
preserve the environment.
সুতরাং, আপনাকে প্রথমে আপনার পরিবর্তনশীল রফতানি করতে হবে এবং তারপরে চালনা করুন sudo -E:
$ export DUMMY=dummy
$ sudo -Eu bob bash -c 'echo $DUMMY'
dummy
এর bash -cদরকার নেই। যাইহোক, যদি আমি চালনা করি তবে sudo -Eu bob echo "$DUMMY"রুট শেলটি চালু হওয়ার আগে ভেরিয়েবলটি প্রসারিত করা হয় যাতে এটি প্রদর্শিত না হয় যে কমান্ডটি আসলে কাজ করে:
$ sudo -u bob echo $DUMMY ## looks like it works but doesn't
dummy
$ sudo -u bob bash -c 'echo D:$DUMMY' ## now we see it failed
D:
$ sudo -Eu bob bash -c 'echo D:$DUMMY' ## works as expected
D:dummy
env_keepমধ্যে sudoers। সম্ভবত এটি পছন্দ: Defaults env_keep += "DUMMY"।
sudo। এটি একটি একক ভেরিয়েবলের জন্য আরও জটিল। এটি কেবল এমন কিছু ক্ষেত্রে কার্যকর যা সর্বদা রফতানি করা উচিত।
LD_PRELOADএবং বহন করার মধ্যে যথেষ্ট পার্থক্য রয়েছে LESSCHARDEF। আমি মনে করি না
- আমি আমার জন্য কাজ করি। মানুষ থেকে sudo-
-E, সুরক্ষা নীতিতে ইঙ্গিত করে যে ব্যবহারকারী তাদের বিদ্যমান পরিবেশের পরিবর্তনশীলগুলি পরিবেশন করতে চান ‐ যদি পরিবেশটি সংরক্ষণের জন্য ব্যবহারকারীটির অনুমতি না থাকে তবে সুরক্ষা নীতি একটি ত্রুটি ফিরিয়ে দিতে পারে।--preserve-env
নিম্নলিখিতটি একটি সমাধান যা সুরক্ষা নীতি পরিবর্তন করার প্রয়োজন হয় না is
আমি suঅংশটি উপেক্ষা করব , যেহেতু আমরা --userবিকল্পটি ব্যবহার করতে পারি sudo।
আমরা পরিবেশের ভেরিয়েবলগুলি একটি commandরান দিয়ে যেতে চাই sudo। তবে sudoএনভায়রনমেন্ট ভেরিয়েবলগুলি একটি কমান্ডের কাছে যেতে দেয় না (এর জন্য বৈধ সুরক্ষার কারণ রয়েছে, কিছু ভেরিয়েবল বিপজ্জনক হতে পারে)। এনভায়রনমেন্ট ভেরিয়েবল সেট করতে শেল ব্যবহার করা যেতে পারে এবং এতে sudoস্ক্রিপ্ট দিয়ে একটি শেল চালানো যায়। সুতরাং sudoএকটি স্ক্রিপ্ট চালনা করতে বলুন যা পরিবেশের ভেরিয়েবলগুলি সেট করে।
var_a=someThing
var_b=someOtherThing
sudo bash -c "
export var_a=\"${var_a}\"
export var_b=\"${var_b}\"
the_command some_args
"
sudo -iu ec2-user echo $DUMMY?