অনিচ্ছাকৃত ব্যবহারকারী হিসাবে আপস্টার্ট কাজ চালানো


142

একটি আপস্টার্ট জব তার ইউজারিড পরিবর্তন করতে এবং স্ক্রিপ্টটিকে একটি অনিবদ্ধ ব্যবহারকারী হিসাবে চালানোর আধ্যাত্মিক উপায় কী?

স্পষ্টতই একটি ব্যবহার করতে পারে suবা sudo, তবে এটি হ্যাকি মনে হয় (এবং অযথা লগ লাইন তৈরি করতে পারে)।

উত্তর:


108

ভুঁইফোড় v1.4 সঙ্গে, setuid এবং setgid কনফিগ ফাইলে নেটিভ সমর্থিত।



10
অন্য কথায়, এটি যথার্থ (12.04) এবং আরও নতুনতে সমর্থিত।
এডওয়ার্ড অ্যান্ডারসন

8
অন্য কথায়,
সেন্টোস

5
রেকর্ডের জন্য, initctl --versionআপনার আপস্টার্টের বর্তমান সংস্করণটি সন্ধান করতে।
মাহন

4
বিরক্তিকরভাবে, এডাব্লুএসে অ্যামাজন লিনাক্স ডিস্ট্রো আরএইচইল 6 এর আপস্টার্ট সংস্করণ (0.6.5 !!!!) ব্যবহার করে যাতে যে কেউ এটি ব্যবহার করে তাকে 'সু' সমাধানটি ব্যবহার করতে হবে।
আসফ্যান্ড কাজী

86

ফ্রিনোডে # আপস্টার্ট চ্যানেলে জিজ্ঞাসা করা, বিষয়টি সরকারীভাবে গ্রহণ করা হ'ল:

ভবিষ্যতের আপস্টার্টের মুক্তির জন্য এর জন্য দেশীয় সমর্থন থাকবে, তবে আপাতত, আপনি এর মতো কিছু ব্যবহার করতে পারেন:

exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]

7
এটিই একমাত্র উত্তর যা আমাজন লিন্য ইসি 2 তে কাজ করেছিল (আমি - - এসিওশন-কমান্ড, -সি, অ্যাড নাক্সাম সহ সুডো এবং সুনির সমস্ত প্রকারের চেষ্টা করেছি); তাদের কেউই একবার প্রক্রিয়া শুরু করার অনুমতি দেয়নি; এই জন্য অনেক ধন্যবাদ.
কাতো

এটি কিছু অভিনব শেল যাদু, +1।
স্টিভ কেহলেট 4'14

6
এটি আমার জন্য CentOS 6 (আপস্টার্ট 0.6.5) এ কাজ করে না। কাঁটাগুলির একটি সিরিজ রয়েছে (4 গভীর আমি মনে করি) এর suঅর্থ সূচিত হয়েছিল expect forkএবং এটি এমনকি expect daemonচূড়ান্ত পিআইডিও ধরবে না।
লাকাটা

2
জেনকিনস প্রক্রিয়াটি বুট আপ করতে আমি এটি অ্যামাজন লিনাক্সে (আপস্টার্ট 0.6.5) ব্যবহার করেছি (যা নিজেকে ধন্যবাদ জানায় না), এবং এটি কার্যকর হয়েছে! লগ ফাইলে স্ট্যান্ডার্ড আউটপুট পুনর্নির্দেশ করতে এবং কিছু পরিবেশের ভেরিয়েবল সেট করতে আমাকে কিছুটা পরিবর্তন করতে হয়েছিল, তবে এটি কার্যকর হয়েছিল! আমার সংস্করণটি দেখে মনে হচ্ছে:exec su -s /bin/sh -c 'HOME=/foo/bar exec "$0" "$@" &>/var/log/foobar.log' username -- /path/to/command [parameters...]
আসফ্যান্ড কাজী

17

স্টার্ট-স্টপ-ডিমন ব্যবহার সম্পর্কে কীভাবে?

exec start-stop-daemon --start --chuid daemonuser --exec /bin/server_cmd

আপস্টার্ট কুকবুক থেকে :

ডেবিয়ান এবং উবুন্টু সিস্টেমগুলির জন্য প্রস্তাবিত পদ্ধতি হ'ল সহায়ক ইউটিলিটিটি ব্যবহার করা start-stop-daemon। […] start-stop-daemonপিএএম ("প্লাগেবল অথেনটিকেশন মডিউল") শুরু হওয়ার প্রক্রিয়াটির সীমাবদ্ধতা চাপায় না।

দ্রষ্টব্য: start-stop-daemonআরএইচইএলে সমর্থিত নয়।


2
আপনার প্রয়োজন হলে আপনি গ্রুপটিও ব্যবহার করতে পারেন। --Chuid daemonuser সঙ্গে: daemongroup
Evgeny

13

এটি করার বিভিন্ন উপায় রয়েছে, সমস্ত কিছু আলাদা শব্দার্থক, বিশেষত গ্রুপ সদস্যতার সাথে সম্পর্কিত:

  • setuidgid আপনাকে নির্দিষ্ট করা গ্রুপে রাখবে।

    • আসল ডিমনটোলগুলি setuidgidআপনাকে কেবলমাত্র সেই গোষ্ঠীতে ফেলে দেবে, সুতরাং আপনি যে গ্রুপের সদস্য সেগুলিও অন্তর্ভুক্ত ফাইলগুলিতে অ্যাক্সেস করতে পারবেন না।
    • setuidgidDaemontools-আর একবার থেকে এবং setuidgidজখলাবার টুলসেট থেকে উভয় আছে -s(ওরফে --supplementary) বিকল্প যা সব গোষ্ঠীর আপনি করা হবে, এবং এছাড়াও আপনি করা সম্পূরক গ্রুপ ব্যবহারকারী যে আপনি উল্লেখ জন্য।
  • newgrpএকবার আপনি স্বল্প সুবিধাপ্রাপ্ত ব্যবহারকারী হয়ে গেলে ব্যবহার করে আপনার গ্রুপসেটে একটি গোষ্ঠী যুক্ত হবে, তবে একটি নতুন সাবশেল তৈরি করবে, যাতে স্ক্রিপ্টগুলির অভ্যন্তরে ব্যবহার করা জটিল হবে।

  • start-stop-daemon আপনার গ্রুপের সদস্যপদ সংরক্ষণ করে এবং কেবল সেটুড / সেটগিডের চেয়ে আরও অনেক কিছু করে।

  • chpst -u username:group1:group2:group3... commandnameআপনাকে কোন গ্রুপের সদস্যপদ গ্রহণ করতে হবে তা নির্দিষ্ট করে দেবে, তবে ( উবুন্টুতে ) এটি কেবল runitপ্যাকেজটি নিয়ে আসে , যা একটি বিকল্প upstart

  • su -c commandname usernameব্যবহারকারীর নাম অনুসারে সমস্ত গ্রুপ সদস্যতা বাছাই করে sudo -u username commandname, তাই তারা সম্ভবত অন্তত বিস্মিত হওয়ার পথ।


8

setuidgidপ্যাকেজ থেকে ব্যবহার করুন daemontools

এখানে ডকুমেন্টেশন: http://cr.yp.to/daemontools/setuidgid.html


7
ডিমনটোলগুলি পূর্ব-পূর্বের পূর্বশর্ত নয়, সুতরাং এটি 'ক্যানোনিকাল' জবাবের মতো বলে মনে হচ্ছে না
অ্যাডাম নেলসন

2
তদ্ব্যতীত, ডিমনটোলগুলি মহাবিশ্বে রয়েছে (উবুন্টু 10.04), এবং আপস্টার্ট মূলত।
jtimberman

4

অ্যামাজন ইসি 2-তে একটি উবুন্টু 10.10 উদাহরণে, start-stop-daemonকমান্ডটি দিয়ে আমার ভাগ্য ভাল হয়েছিল ।

আমি অন্যান্য কিছু উঁচু স্তম্ভের সাথেও লড়াই করেছি । আমি virtualenvআমার নির্বাহিত প্রোগ্রামটিতে একটি নির্দিষ্ট এবং কিছু পরামিতি সহ পাইথন অ্যাপ্লিকেশনটি কল করছি ।

নিম্নলিখিতটি আমার পক্ষে কাজ করেছিল।

script
  export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/
  exec start-stop-daemon --start  --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 &
end script

PYTHONPATHমধ্যে কিছু প্যাকেজ উৎস থেকে ইনস্টল পেতে হয় পাইথন এই ভুঁইফোড় কাজ চালায় মডিউল পথ। আমাকে chdirসর্বাত্মক পথে সমস্ত কিছু করতে হয়েছিল কারণ স্তবকটি কাজ করছে বলে মনে হয় না।


এক্সিকিউটিভ স্টার্ট-স্টপ-ডেমনের সাথে ব্যবহৃত এনভি ভেরিয়েবলগুলির সাথেও আমার সমস্যা ছিল
টমাস ব্র্যাট

3

আমি CentOS 6 ব্যবহার করছিলাম, এবং আমার জন্য কাজ করার জন্য প্রস্তাবিত হ্যাক (আপস্টার্ট 0.6.5) পেতে পারি না, বা 'সু' কৌশলটিও জড়িত কাঁটা সংখ্যা (4 আমি মনে করি না) 'প্রত্যাশিত কাঁটাচাঁটি দ্বারা ট্র্যাক করা হয়নি, কারণ 'বা' প্রত্যাশা ডেমন '।

আমি অবশেষে সবেমাত্র করেছি

chown user:group executable
chmod +s executable

(অর্থাত্ সেটুইড বিট সেট করুন এবং মালিকানা পরিবর্তন করুন)।

এটি সবচেয়ে নিরাপদ পদ্ধতি নাও হতে পারে তবে কোনও অভ্যন্তরীণ গবেষণা ও উন্নয়ন প্রকল্পের জন্য এটি আমাদের ক্ষেত্রে গুরুত্বপূর্ণ নয়।


আপনি যদি সেখানে ন্যায়বিচারের পরিবর্তে একটি chmod 1700বা কমপক্ষে কিছু করতে chmod u+sx,go-xথাকেন তবে +sএটি "যথেষ্ট সুরক্ষিত" হিসাবে যোগ্যতা অর্জন করবে। :)
ড্যানিসাউয়ার

0

আপনি কী অর্জন করার চেষ্টা করছেন তার উপর নির্ভর করে তৃতীয় সম্ভাবনা রয়েছে। আপনি সক্ষম হতে পারে প্রশ্নযুক্ত ফাইল / ডিভাইসে অ্যাক্সেস নিয়ন্ত্রণগুলি আলগা । এটি একটি অনিবদ্ধ ব্যবহারকারীকে আইটেমগুলি মাউন্ট করার বা অ্যাক্সেস করার মঞ্জুরি দেয় যা তাদের সাধারণত অনুমতি দেয় না। কেবলমাত্র নিশ্চিত হন যে আপনি এই প্রক্রিয়াতে কিংডমের চাবিগুলি দিচ্ছেন না।

আপনি এটিও করতে পারেন সুডো পাসওয়ার্ড ক্যাশে টাইমআউটও পরিবর্তন । তবে আপনার মেশিন শারীরিকভাবে সুরক্ষিত না হওয়া পর্যন্ত আমি এটির প্রস্তাব দিই না (যেমন, আপনি বিশ্বাস করেন যে কোনও পথিকই সুডো অ্যাক্সেস অর্জনের চেষ্টা করবেন না) এর সম্ভাবনা কম।

সুবিধাজনক ক্রিয়াকলাপ করার খুব কম উপায় রয়েছে এবং তারা অযথা সম্পাদন করার একটি ভাল কারণ রয়েছে প্রয়োজনীয় লগিং । আলগা বিধিনিষেধগুলি আপনার সিস্টেমের জন্য একটি সুরক্ষিত বিপত্তি হতে পারে এবং লগিংয়ের অভাবে বোঝা যায় যে আপনি যখন আপস করেছেন তখন কী হয়েছিল তা জানার কোনও উপায় নেই।

যদি আপনার লগ ফাইলগুলির আকারটি উদ্বেগজনক হয় তবে সম্ভবত কিছু ভুল। সুডো সাধারণ পরিস্থিতিতে ব্যবহারের জন্য কেবল একটি লাইন উত্পন্ন করে।


0

সেন্টোস 0-তে, ০..6.৫ আপস্টার্টে, নিম্নলিখিতটি আমার পক্ষে কাজ করেছে।

script

    exec su user_name << EOF
        exec /path/to/command [parameters...]
EOF

end script

বা:

script

    exec su user_name << EOF
       ..... what you want to do ....
EOF

end script

যখন ব্যবহার

exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]

কাজ প্রক্রিয়া দ্বারা থামানো যাবে না initclt stop। আমি মনে করি কারণটি হ'ল:

1. the job forked and the main process is not tracked.
2. the main process changed its process group,because of `su -c`
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.