কীভাবে `sudo` সংরক্ষণ $ पथ তৈরি করবেন?


123

আমার কাছে / অপ্ট / গডি / এসবিনে (একটি কাস্টম ডিরেক্টরি) ইনস্টল থাকা একটি প্রোগ্রাম চালানো দরকার। আমি যদি সেই ডিরেক্টরিটি আমার প্যাথএইচ-তে যুক্ত করি তবে আমার .bashrc ফাইলটিতে নিম্নলিখিত লাইনটি যুক্ত করে

export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin

তারপরে আমি কমান্ডটি ঠিকঠাকভাবে চালানোর চেষ্টা করতে পারি (এটি ব্যর্থ হওয়ায় এটির জন্য সুডোর প্রয়োজন)। যাইহোক, যখন আমি sudo ব্যবহার করার চেষ্টা করি:

sudo godi_console

আমি নিম্নলিখিত ত্রুটি পেয়েছি

sudo: godi_console: command not found

Sudo ব্যবহারের পরে PATH ভেরিয়েবল পরিদর্শন করা থেকে জানা যায় যে এটি সাধারণ ব্যবহারকারীর মতো আমার যেমন প্যাথকে অন্তর্ভুক্ত করে না:

$ sudo sh
# echo $PATH                 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

পথ এক নয় কেন? আমি কি ভুল কিছু করছি? আমি ডেবিয়ান জেসিতে আছি এবং দুর্ভাগ্যক্রমে আমি গডি_কনসোলের পরম লিঙ্কটি পাস করে সমস্যাটি ঘটাতে পারছি না কারণ গডি_কনসোল নিজেও প্যাথ সঠিকভাবে সেট হওয়ার উপর নির্ভরশীল।


2
ব্যবহার করে দেখুন sudo -E godi_console-E"পরিবেশ সংরক্ষণ" এর অর্থ।
ডি_বাই

5
@ ডি_বাই, secure_pathএবং এবং / অথবা এনভি_সেটটি যেমন কনফিগার করা হয়েছে তেমন কাজ করবে না sudoডেবিয়ানের মতো অনেক স্থাপনার ক্ষেত্রে ।
স্টাফেন চেজেলাস

@ স্টাফেন চ্যাজেলাস তথ্যের জন্য ধন্যবাদ - আমি ডেবিয়ান ব্যবহার করি না, তাই সম্ভবত আমার চুপ করে থাকা উচিত ছিল!
ডি_বাই


একজন সংশ্লিষ্ট প্রশ্ন সম্পর্কে suনা sudoহয় unix.stackexchange.com/questions/460478
জেডিবিপি

উত্তর:


149

আপনি সর্বদা করতে পারেন:

sudo env "PATH=$PATH" godi_console

ডেবিয়ান উপর একটি নিরাপত্তা ব্যবস্থা হিসাবে, /etc/sudoersরয়েছে secure_pathবিকল্প একটি নিরাপদ মানে সেট।

মনে রাখবেন যে:

sudo "PATH=$PATH" godi_console

কোথায় sudoএকইরূপে ধারণকারী আর্গুমেন্ট নেতৃস্থানীয় =নিজে এনভায়রনমেন্ট ভেরিয়েবল বরাদ্দকরণ যেমন অক্ষর, এছাড়াও চলমান এ কাজ করবে godi_consoleসঙ্গে আপনার $PATH (যেমন বিরোধিতা secure_pathতার পরিবেশে), কিন্তু প্রভাব পড়বে না sudo'এর অনুসন্ধান এক্সিকিউটেবল জন্য পথ, তাই সাহায্য করবে না sudoযে খোঁজার godi_console


5
আমি এই উত্তরটি সবচেয়ে পছন্দ করি যেহেতু এটি বিশ্বব্যাপী সেটিংস পরিবর্তন করার প্রয়োজন এড়িয়ে যায় (অর্থাত্ ন্যূনতম সুযোগ-সুবিধার নীতি সংরক্ষণ করে)
অ্যালোস মাহডাল

5
sudo "PATH=$PATH" godi_console উপায় দ্বারা CentOs7 এ কাজ করে নি। এনভির প্রয়োজন
হাকান বাবা

1
@ স্টাফেনচেজেলাস কি sudo "PATH=$PATH" godi_consoleআসলেই কাজ করে? sudoগ্রহণ VAR=valueযুক্তি কমান্ড এটা রান পরিবেশ প্রভাবিত, কিন্তু অসদৃশ envবা bash, sudoএই প্রভাবিত কিভাবে দিন বলে মনে হচ্ছে না এটা কমান্ড আপ দেখায়। আমি কেবল এটি (সম্প্রতি) উবুন্টু 16.04 এ পরীক্ষা করেছি। তবে আমি exempt_groupবিকল্পটি যুক্ত করার চেষ্টা করেছি sudoers(কেবল পরীক্ষার জন্য - আমি এটিকে কোনও সমাধান মনে করি না!) এবং ফলাফলগুলি আলোকিত করে। ফর্মের কমান্ডগুলি PATH="$PATH" sudo some-commandকাজ শুরু করেছিল, তবে ফর্মটির সেগুলি sudo PATH="$PATH" some-command এখনও কার্যকর হয়নি।
এলিয়াহ কাগান

2
@ballsatballsdotballs। যেহেতু যে উপনামটি কেবল আপনার ইন্টারেক্টিভ শেলগুলিকে প্রভাবিত করবে, এটি তুলনামূলকভাবে নিরীহ হতে হবে।
স্টাফেন চেজেলাস

2
আমি এই ধরণের মামলার জন্য কেবল স্যুডো নামে একটি উপকরণ তৈরি করেছি, যেখানে: ওরফ স্যুডো = "সুডো এনভ \" PATH = $ পথ \ ""। তারপরে আমার স্বাভাবিক সুডো ব্যবহারটি প্রভাবিত নয়।
মাইকট্রোনিক্স

46

আপনি এখানে ডিফল্ট PATH সেট করতে পারেন /etc/sudoers

ব্যবহার করে ফাইলটি সম্পাদনা করুন visudo

এবং আপনি যা চান তার লাইনটি আপডেট করুন: Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin


18

SUDO ডিফল্ট হিসাবে env ভেরিয়েবল রিসেট করছে।

Env_reset নামক এর ম্যানুয়াল এবং বিকল্পটি দেখুন।

আপনাকে কেবল এটি / etc / sudoers এ অক্ষম করতে হবে।


5
কুল! উবুন্টুতে আপনি নিরাপদ_পথ এবং এনভ_রেসেট লাইনগুলি দেখতে এবং মন্তব্য করতে পারেন। সিস্টেমটিকে যথেষ্ট কম সুরক্ষিত করে তোলে, তাই সাবধান হন।
RawwrBag

অক্ষম env_resetকরার ফলে sudoW / r / t PATH এর আচরণ প্রভাবিত হবে না বলে মনে হচ্ছে ।
Zanna

5

এইটা কাজ করে :

sudo $(which your_command)

আমার gpsস্ক্রিপ্টকে কল করার উদাহরণ যা এনভিডিয়া জিপিইউর প্রক্রিয়াগুলি তালিকাভুক্ত করে:

$ sudo gps
sudo: gps: command not found
$ sudo $(which gps)
  PID TTY          TIME CMD
 9922 tty7     02:42:47 Xorg

ব্যাখ্যা:

$ set -x;sudo $(which gps);set +x
++ which gps
+ sudo /home/xyztuv/myScripts/shl/gps
  PID TTY          TIME CMD
 9922 tty7     02:42:39 Xorg
+ set +x

3
sudo --preserve-env=PATH env [command]

এই ovverrides নিরাপদ_পথ আমার শেষ


1

এটি কাজ করেছে:

sudo "PATH=$PATH" [your command]

আপনার পথের মান দিয়ে $ PATH পরিবর্তন করবেন না, আপনি কেবল এটি এইভাবে লিখুন

উদাহরণ: $ sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....


0

সম্ভবত ওপি যা চেয়েছে তা অবিকল না, তবে এটি সাহায্য করতে পারে:

sudo -u the_user PATH=$PATH:/opt/godi/bin sh -c 'echo $PATH'

এই পথটি পরিবর্তন ভিতরে sudoed কমান্ড।

সম্পাদনা করুন: উপরেরটি বেশ বোকামি বলে আমি কী বোঝাতে চেয়েছি তা নিশ্চিত নয়। পরিবর্তে নিম্নলিখিত ব্যবহার করুন:

sudo -u the_user sh -c 'PATH=$PATH:/opt/godi/bin echo $PATH'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.