আমি কীভাবে আমার পরিবেশের পরিবর্তনশীলগুলি সংরক্ষণ করতে পারি?


47

সোলারিস ৫.১০-তে সুডো ১.7.৪.৪৪ এবং আরএইচইএল ৪ u6-তে sudo 1.6.7p5 ব্যবহার করে আমি কীভাবে আমার পরিবেশের পরিবর্তনশীলগুলি সংরক্ষণ করব তা দেখতে পাচ্ছি না, উদাহরণস্বরূপ Y পাইথনপথ। আমি এই লাইনটি sudoers এ যুক্ত করেছি, তবে এতে কোনও পার্থক্য নেই:

Defaults !env_reset

আমি কি কিছু ভুল করছি, বা সুডো ইনস্টলেশনটি কেবল env_reset পতাকাটিকে সম্মান করছে না?

সম্পাদনা করুন: কমপক্ষে সোলারিসে, আমরা খুঁজে পেয়েছি যে এই সমস্যাটি শেলের উপর নির্ভর করে! স্ট্যান্ডার্ড রুট শেলটি বোর্ন, যদি আমরা sudo bashঅন্যদিকে sudo ( ) এর অধীনে ব্যাশ চালনা করি তবে ! এটি বরং আমাকে বলতে হবে বিভ্রান্তিকর আচরণ।


উত্তর:


44

সাবধানে ব্যবহার করুন, সুডো এবং ভেরিয়েবলগুলি সহ সুরক্ষা সমস্যা রয়েছে।

থেকে man sudoersআমি দেখলাম যে ব্যবহার করা উচিত

ডিফল্ট env_reset
ডিফল্ট এনভ_কিপ ++ "পাইথনপথ অন্য চক্রের অন্যত্র"

উবুন্টুতে sudoকিছু পরিবর্তনশীল সংরক্ষণ করে। sudo -iমূল হিসাবে লগ ইন করা এবং তারপরে কমান্ড চালানোর মতো is উভয়ই অসুবিধাগ্রস্থ হতে পারে, sudo nano myfileআপনার ঘরের অভ্যন্তরে মূলের মালিকানাধীন ফাইলগুলির জন্য পূর্বের এবং পরেরগুলি sudo -i nano myfile/ রুট / মাইফাইল খোলার চেষ্টা করবে।


চালান

sudo printenv PATH

এবং দেখুন কি দেয়। এখানে এটি দেয়

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

উদাহরণ স্বরূপ. এখন চালান sudo visudoএবং লাইন যোগ করুন

Defaults        secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

আপনি ঠিক আগে যা খুঁজে পেয়েছিলেন তা প্রতিস্থাপন। আপনার প্রয়োজন হলে এটিতে একটি নতুন পথ যুক্ত করুন।

গ্রন্থাগার সম্পর্কে:

sudo LD_LIBRARY_PATH=/usr/lib/path/to/a/safe/library your command

লিনাক্স ডিস্ট্রিবিউশনের সাথে অনেক যত্ন নেওয়া হয় PATHএবং এটিকে খেলার আগে আপনার অবশ্যই যত্নবান হওয়া উচিত। " ." এর মতো পাথ যুক্ত করার বিষয়ে বিশেষভাবে সতর্ক থাকুন বা /home/usernameএটি অনিরাপদ।

পাথ যুক্ত করার অন্যতম একটি বিপত্তি হ'ল এটি এই পাথগুলিতে ফাইলগুলি কার্যকর করার সম্ভাবনা প্রকাশ করে rootএবং সিস্টেম সুরক্ষায় একটি উইন্ডো খোলে যা দূষিত সফ্টওয়্যার দ্বারা ব্যবহার করা যেতে পারে। অন্যান্য বিপদ হতে পারে। আপনি নিশ্চিত করছেন যে আপনি কী করছেন তা জানেন। বাইপাসিং sudoসুরক্ষা ব্যবস্থাগুলি আপনার সোলারিসকে উইন্ডোজ এক্সপি হিসাবে নিরাপদ হিসাবে রেন্ডার করতে পারে।


পরামর্শের জন্য ধন্যবাদ. কমপক্ষে সোলারিতে, এটি প্রদর্শিত হয় যে env_keep কেবলমাত্র কিছু অংশে কাজ করে, কারণ এটি PATH এবং এলডি_লিবারি_পথ উপেক্ষা করে। সম্ভবত সুডো সেটিংস দিয়ে তৈরি করা হয়েছে যা "বিপজ্জনক" ভেরিয়েবলগুলি সংরক্ষণ করতে অস্বীকার করে?
aknuds1

এটি কি একেএনউডিএস এর মতো আরও স্বচ্ছল সাথে কাজ করেছিল? আপনি সুডো সুডো-ভি চালাতে পারেন (হ্যাঁ, দুবার সুডো!) এবং এটি কী বলে তা দেখুন। এখানে উপরোক্ত সমাধানটি পাইথনপথের সাথে সূক্ষ্মভাবে কাজ করে, তবে পাঠ সত্যই বিশেষ বলে মনে হচ্ছে। আসল সমস্যাটি প্যাথ-এর সাথে। উবুন্টুতে তারা ইচ্ছাকৃতভাবে PATH পুনর্নির্মাণের জন্য sudo তৈরি করে।
user39559

env_keep আমার জন্য পাইথনপথ এবং হোম সংরক্ষণ করেছেন, সুতরাং স্পষ্টতই কিছু ফিল্টারিং চলছে।
aknuds1

আপনার সংশোধিত সমাধানে, আপনি পরামর্শ দিচ্ছেন যে আমি নিরাপদ_পথটি সংশোধন করে সুডো পাথকে শক্ত ওয়্যার করছি, তাই না? আমি মনে করি না যে আমি এটি করতে চাই। আমরা সম্ভবত আমার প্রশ্নের উত্তরের নিকটেই রয়েছি; আমার মনে হয় sudo পুনরায় সেট_ইনভ উপেক্ষা করার জন্য এবং এনএভি_কিপ দিয়ে নির্দিষ্ট করার সময় PATH এবং LD_LIBRARY_PATH এর মতো ভেরিয়েবলগুলিকে উপেক্ষা করার জন্য নির্মিত। আমি মনে করি আমি sudo এর অধীনে PATH / LD_LIBRARY_PATH সংরক্ষণ না করেই করতে পারি, এটি কোনও বড় কথা নয়, তবে এটি কেন কাজ করবে না তা জানা এখনও মজাদার নয় :)
aknuds1

এটি কাজ করবে না কারণ sudoলেখকরা আপনাকে এটি করা থেকে বিরত রাখতে সতর্ক ছিলেন। আপনি চান না যে দূষিত গ্রন্থাগারটি লোড হচ্ছে কারণ সেগুলি sudo দ্বারা ব্যবহৃত পথে পাওয়া গেছে। সুতরাং, সে কারণেই এটি পুনরায় সেট করা। আপনি যদি রুট দ্বারা চালিত বোঝার উদ্দেশ্যে কোডিং করে থাকেন তবে সেগুলি যথাযথ সিস্টেম ডিরেক্টরিতে অনুলিপি করুন।
ব্যবহারকারী39559

8

sudoersঅন্যরা যেমন বলেছে তেমন সাবধানতার সাথে ফিডলিং করা।

আপনি যখন সংরক্ষণ করতে চান নির্দিষ্ট পরিবেশের ভেরিয়েবলগুলি থাকে তখন সহজ ক্ষেত্রেগুলির জন্য একটি সহজ পদ্ধতির অর্থ হ'ল সরাসরি সুডোর মাধ্যমে আপনি চান এমন পরিবেশের পরিবর্তনশীলটি পাস করা ( [VAR=value]এটি সুডো সেমিডলাইন সহায়তা হিসাবে দেখানো হয়েছে )।

এই ছোট্ট উদাহরণটি দেখুন যেখানে আমি একাধিক ভেরিয়েবলের জন্য এটি প্রদর্শনও করেছি।

$ export MY_V1=1
$ export MY_V2=2
$ printenv | grep MY_V
MY_V2=2
MY_V1=1
$ sudo MY_V1=$MY_V1 MY_V2=$MY_V2 printenv | grep MY_V
MY_V2=2
MY_V1=1

PYTHONPATHপ্রশ্নের মূল উদাহরণের জন্য , কেবল নিম্নলিখিতটি ব্যবহার করুন:

$ sudo PYTHONPATH=$PYTHONPATH python some_script.py
<script_output_here>

এই ধরণের জিনিসটির জন্য একটি উপকরণ তৈরি করা সহজ। তাই ভালো:

$ alias sudopy='sudo PYTHONPATH=$PYTHONPATH python'

1
এটি করা ভাল হতে পারে - ওরফে সুডোপি = 'সুডো পাইথনপথ = $ পাইথনপথ অজগর' - তারপরে এটি সুডোপি ব্যবহার করুন some_script.py
সক্ষম ম্যাক

পছন্দ করুন এটি একটি ভুল ছিল ... আমি এটি ঠিক করব। ধন্যবাদ!
রাশ

3

আপনার Defaults !env_resetচেহারা ঠিক আছে, ধরে নিচ্ছেন আপনি -Eবিকল্পটির সাথে সুডোকেও কল করছেন না ।

আপনি এই প্রবেশটি সম্পূর্ণরূপে সরানোর চেষ্টা করতে পারেন।

আপনি যাচাই করেছেন আপনি সঠিক sudoers ফাইল সম্পাদনা করছেন? আমি অনুমান করছি এটি হতে পারে /etc/sudoersবা /usr/local/etc/sudoersএটি কীভাবে ইনস্টল করা হয়েছিল তার উপর নির্ভর করে। আপনি এটি ব্যবহার করে সম্পাদনা করেছেন visudo?

কেমন চলছে সুডো? sudo python, sudo su, sudo su -, sudo -s, অন্য কিছু? শুধুমাত্র sudo pythonএবং sudo suআপনার পরিবেশ সংরক্ষণ করবে।

কি env | grep PYTHONPATHবলে? যদি কিছু না হয়, নিশ্চিত হয়ে দৌড়াবেন যে পাইথনপথ রফতানি হয়েছে export PYTHONPATHএবং আবার চেষ্টা করুন।

কি sudo env | grep PYTHONPATHবলে? যদি এটি প্রত্যাশিত মানটি মুদ্রণ করে তবে অন্য কিছু আপনার পাইথোনপথ মানটি ওভাররাইট করে। রুটের .bashrc বা .bash_profile বা সিস্টেম-ব্যাপী কনফিগারেশন ফাইলগুলি।


1
আমি বেশ নিশ্চিত যে আমি সুডোর সাথে সম্পর্কিত ইনস্টলেশন উপসর্গটি সহ সঠিক সূডোরগুলি সম্পাদনা করছি। আমি সুডো "সুডো সু" হিসাবে চালাচ্ছি। দুর্ভাগ্যক্রমে, কয়েক দিনের মধ্যে আমি আপনার কাছে ফিরে আসব, আপনার পরামর্শের বাকী অংশটি ছড়িয়ে দিন। ধন্যবাদ!
aknuds1

1
গুরুত্বহীন সেটিং পরিবর্তন করার চেষ্টা করুন editorবা passpromptআপনার কাছে সঠিক ফাইল আছে কিনা তা দেখার জন্য। অথবা স্ট্রেস, ডিট্রেস, ট্রস বা অনুরূপ ব্যবহার করুন এবং এটি কী ফাইল খুলবে তা দেখুন।
মাইকেল

env | আমার ব্যবহারকারী হিসাবে গ্রেপ পাইথনপথ প্রত্যাশিত মানটি প্রিন্ট করে, সুডোর অধীনে, কিছুই মুদ্রিত হয় না। Sudoers সম্পাদনা করে, আমি নিশ্চিত করতে পারি যে "env_keep" সংশোধন করে পাইথনপথ সংরক্ষণ করা হয়েছে। তবে env_keep PATH বা LD_LIBRARY_PATH সংরক্ষণ করবে না। আমার ধারণা, PATH এবং LD_LIBRARY_PATH এর মতো ভেরিয়েবল সংরক্ষণ না করার জন্য সুডোর একটি সুরক্ষা বিধিনিষেধ আছে? একটি বিল্ড-টাইম সেটিং সম্ভবত?
aknuds1

1
env_reset যতদূর আমি বলতে পারি উপেক্ষা করা হয়েছে তবে আমি আগামীকাল ডাবল-চেক করতে পারি। আমি নিশ্চিত যে env_delete সেট করা হচ্ছে না, তবে আমি এটিও পরীক্ষা করতে পারি।
aknuds1

1
আমি নিশ্চিত করেছি যে env_reset উপেক্ষা করা হবে এবং env_delete সেট করা নেই।
aknuds1

-1

এলডি_লিবারি_প্যাথের জন্য উবুন্টু ডকুমেন্টেশন অনুসারে :

আপনাকে অবশ্যই /etc/ld.so.conf.d/*.conf কনফিগারেশন ফাইলগুলি ব্যবহার করতে হবে

তারপর:

  1. আপনার পথের সাথে একটি ld.soকনফিগারেশন ফাইল যুক্ত /etc/ld.so.conf.d/করুনLD_LIBRARY_PATH

  2. এর সাথে ক্যাশে আপডেট করুন:

    sudo ldconfig -v
    

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