কীভাবে ব্যবহারকারীকে সুডো দিয়ে পরিবেশ সংরক্ষণের অনুমতি দেওয়া যায়?


17

আমি চলমান চলাকালীন কিছু পরিবেশের ভেরিয়েবলগুলিকে নতুন পরিবেশে যাওয়ার অনুমতি দেওয়ার চেষ্টা করে নিম্নলিখিত ত্রুটিটি নিয়ে চলেছি sudo:

sudo: sorry, you are not allowed to preserve the environment

ডিবাগ করতে সহায়ক হতে পারে এমন কিছু তথ্য:

[deploy@worker1 ~]$ sudo -l
    Matching Defaults entries for deploy on this host:
    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
    XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin, env_keep+="GIT_WORK_TREE GIT_DIR", !requiretty

User deploy may run the following commands on this host:
    (ALL) NOPASSWD: /usr/bin/git, (ALL) /etc/init.d/httpd*, (ALL) /sbin/service, (ALL) /usr/bin/make, (ALL) /bin/echo

আমার চলমান উদাহরণ:

[deploy@worker1 ~]$ export GIT_DIR="/home/ashinn/testing"
[deploy@worker1 ~]$ sudo -E sh -c 'echo "$GIT_DIR"'
sudo: sorry, you are not allowed to preserve the environment

এই নির্দিষ্ট কনফিগারেশনের জন্য আমার sudoers.d ফাইল:

Defaults:deploy         env_keep += "GIT_WORK_TREE GIT_DIR", !requiretty
deploy  ALL=(ALL)       NOPASSWD: /usr/bin/git, /etc/init.d/httpd*, /sbin/service, /usr/bin/make, /bin/echo

আমি !env_resetডিফল্টগুলিতে যোগ করার চেষ্টা করেছি এবং এটি এখনও একই ত্রুটির সাথে ব্যর্থ হয়। আমার মনে হচ্ছে আমি স্পষ্ট কিছু মিস করছি এবং চোখের দ্বিতীয় সেট প্রয়োজন। আমি এখানে কি মিস করছি?


1
আমি বিশ্বাস করি যে আমাদের মধ্যে প্রায় 93% আপনার প্রশ্নের মূল বিষয়টি বোঝে, তবে আপনার উদাহরণ কমান্ডটি খুব ভাল নয়।  , যদি এটি সম্পূর্ণরূপে ব্যর্থ না হয় তবে এর প্রাক- মানটি প্রদর্শন করবে , কারণ শেলটি কমান্ড লাইনের আগে ভেরিয়েবলটি প্রসারিত করার আগেই প্রেরণ করা হয়। উন্নত পরীক্ষা নেই বা বা যেখানে আমরা আসলে যে তৈরী চলমান প্রক্রিয়ার পরিবেশ এ খুঁজছেন। sudo (option(s)) echo $GIT_DIRsudo$GIT_DIRsudosudo printenv GIT_DIRsudo env | grep GIT_DIRsudo sh -c 'echo "$GIT_DIR"'
জি-ম্যান বলছেন 'পুনরায় ইনস্টল করুন মনিকা'

উত্তর:


27

আপনি SETENVআপনার sudoersফাইলে "ট্যাগ" ব্যবহার করতে পারেন , যেমন:

deploy  ALL=(ALL)       SETENV: /usr/bin/git, /etc/init.d/httpd*, /sbin/service, /usr/bin/make, /bin/echo

বা, এটি NOPASSWD এর সাথে একত্রিত করতে:

deploy  ALL=(ALL)       NOPASSWD:SETENV: /usr/bin/git, /etc/init.d/httpd*, /sbin/service, /usr/bin/make, /bin/echo

Sudoers লোক থেকে প্রাসঙ্গিক অংশ:

SETENV এবং NOSETENV

এই ট্যাগগুলি প্রতি-কমান্ডের ভিত্তিতে setenv বিকল্পের মানকে ওভাররাইড করে। মনে রাখবেন যে যদি SETENV কোনও কমান্ডের জন্য সেট করা থাকে, ব্যবহারকারী -E বিকল্পের মাধ্যমে কমান্ড লাইন থেকে env_reset বিকল্পটি অক্ষম করতে পারে। উপরন্তু, বিভিন্ন পরিবেশের কমান্ড লাইন সেট দ্বারা আরোপিত বিধিনিষেধ বিষয়বস্তু নয় env_check, env_deleteঅথবা env_keep। যেমন, কেবলমাত্র বিশ্বস্ত ব্যবহারকারীদের এই পদ্ধতিতে ভেরিয়েবল সেট করার অনুমতি দেওয়া উচিত। কমান্ডটি মিলে গেলে সমস্ত হয়, সেটেনভ ট্যাগটি সেই আদেশের জন্য অন্তর্ভুক্ত থাকে; এই ডিফল্টটি NOSETENV ট্যাগ ব্যবহার করে ওভাররাইড করা যেতে পারে।


1

-Eবিকল্পটি নির্দিষ্ট করবেন না । আপনি ব্যবহার করে -Eবলছেন যে ব্যবহারকারীর জন্য সমস্ত পরিবেশের ভেরিয়েবলগুলি deployকেবল সংরক্ষণ করা উচিতGIT_DIR

চলমান sudo echo $GIT_DIRকাজ করা উচিত কারণ আপনার জুড়েছেন GIT_DIRকরার env_keepতালিকা

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