কীভাবে পরিবেশ পরিবর্তনশীল sudo su এ পাস করবেন


30

আমার মূলত এটি করা দরকার:

DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'

এটি কাজ করে না। আমি কীভাবে env ভেরিয়েবল $ ডামি পাস করতে পারি? -p -l এর সাথে কাজ করে না।


সহজভাবে কি sudo -iu ec2-user echo $DUMMY?
মুড়ু

উত্তর:


39

আপনি লগইন শেল কল না করে এটি করতে পারেন:

sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'

বা:

sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'

-pবিকল্প suকমান্ড বিভিন্ন পরিবেশের সংরক্ষণ।


3
আমি মনে করি "-E" পরিবেশের ভেরিয়েবলগুলি সংরক্ষণ করে sudo.ws/man/sudo.man.html
অ্যান্ডি

1
@ অ্যান্ডি তবে এটি প্রায়শই সুডোর কনফিগারেশন দ্বারা নিষিদ্ধ।
গিলস 16'10

@ কুওগলম - ধন্যবাদ এইটা কাজ করে. লগইন শেল বলা উচিত ছিল না।
উমং

1
@ টেনরব: না, এই ক্ষেত্রে -pবিকল্প suনয়sudo
cuonglm

অন্যান্য থ্রেড রয়েছে যা বলে যে -mভেরিয়েবল সংরক্ষণ করে, অন্যরা বলে -cকী পার্থক্য? এবং এই উত্তরের দিনগুলির একটি মন্তব্য -E stackoverflow.com/questions/10488758/…
বিশ্রান্ত

49

প্রো টিপ: সত্যিই চালানোর জন্য একটি ভাল কারণ না হয়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

2
একটি পরিবেশ পরিবর্তনশীল সংরক্ষণ করা একটি ভাল উপায় এটি যোগ করতে হয় env_keepমধ্যে sudoers। সম্ভবত এটি পছন্দ: Defaults env_keep += "DUMMY"
lcd047

@ lcd047 কিন্তু যে পরিবেশ সংরক্ষণ করবে সব এর আমন্ত্রণ sudo। এটি একটি একক ভেরিয়েবলের জন্য আরও জটিল। এটি কেবল এমন কিছু ক্ষেত্রে কার্যকর যা সর্বদা রফতানি করা উচিত।
টেরডন

হ্যাঁ, এটি বাণিজ্য-বন্ধ, তবে পরিবেশের সমস্ত পরিবর্তনগুলি সমান ক্ষতিকারক নয়। ভার বহন LD_PRELOADএবং বহন করার মধ্যে যথেষ্ট পার্থক্য রয়েছে LESSCHARDEF। আমি মনে করি না
সুবিধাগুলি

1
@ lcd047 আপনার পরামর্শটি অবশ্যই উত্তর হিসাবে পোস্ট করার উপযুক্ত। আমার বক্তব্যটি হ'ল এটি স্বেচ্ছাচারী ভেরিয়েবল রফতানির জন্য ব্যবহারিক নয়। হ্যাঁ, যদি কোনও নির্দিষ্ট ভেরিয়েবল থাকে তবে আপনি সর্বদা রফতানি করতে চান, সেই উপায়টি কিন্তু আপনি যদি একবার এটি করতে চান এবং একই অধিবেশনটিতে একটি পরিবর্তনশীল সংজ্ঞায়িত করতে চান তবে তা নয়।
টেরডন

7

- আমি আমার জন্য কাজ করি। মানুষ থেকে sudo-

-E, সুরক্ষা নীতিতে ইঙ্গিত করে যে ব্যবহারকারী তাদের বিদ্যমান পরিবেশের পরিবর্তনশীলগুলি পরিবেশন করতে চান ‐ যদি পরিবেশটি সংরক্ষণের জন্য ব্যবহারকারীটির অনুমতি না থাকে তবে সুরক্ষা নীতি একটি ত্রুটি ফিরিয়ে দিতে পারে।--preserve-env


দুর্ভাগ্যক্রমে এটি তখনই কাজ করবে যদি আপনার প্রশাসক আপনাকে -E ব্যবহার থেকে সীমাবদ্ধ না করে।
টর্স্টেনস

0

নিম্নলিখিতটি একটি সমাধান যা সুরক্ষা নীতি পরিবর্তন করার প্রয়োজন হয় না 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
"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.