আমার মূলত এটি করা দরকার:
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
?