বাশ স্ক্রিপ্টে সুডো উপেক্ষা করুন


9

আমার একটি ছোট বাশ স্ক্রিপ্ট রয়েছে:

#!/bin/bash

touch dummy.txt

আমি যদি এই স্ক্রিপ্টটি দিয়ে sudoচালিত করি তবে এটি তৈরি dummy.txtকরবে যা মূল সুরক্ষিত থাকবে

আমি যা করতে চাই তা হ'ল:

এই স্ক্রিপ্টটি ব্যবহার করে sudoবা একটি সাধারণ ব্যবহারকারী ব্যবহার করা হোক না কেন , ফাইলটি মূল সুরক্ষিত dummy.txtহওয়া উচিত নয়


4
তোরা যে যা দ্বারা "মূল সংরক্ষিত" বলতে চাচ্ছি, আপনি ব্যবহার করতে পারেন chownএবং chmodসেট মালিকানা ও অনুমতি আপনার স্ক্রিপ্টের হিসেবে পছন্দসই।
fkraiem

1
আপনি "মূল সুরক্ষিত" বলতে কী বোঝায় তা পরিষ্কার নয়। আপনি কি বোঝাতে চেয়েছেন যে কেবলমাত্র রুট ব্যবহারকারীরা পড়তে / লিখতে পারে (যেমন ফাইলের অনুমতিগুলি 700 এর মতো কিছুতে সেট করা থাকে), বা রুট ব্যবহারকারী ফাইলের মালিক?

1
@ ডরিটোস্টাইল বিভ্রান্তির জন্য দুঃখিত। দ্বারা রুট সংরক্ষিত , আমি বোঝানো রুট ব্যবহারকারী ফাইল মালিক।
অজ্ঞাতনামা

উত্তর:


22

স্ক্রিপ্টটি যদি চলকগুলি এবং ভেরিয়েবলগুলি sudoব্যবহার করে চালিত হয় তবে আপনি পরীক্ষা করে দেখতে পারেন এবং ঠিক যদি সত্য - যেমন কিছু কার্যকর করা হয় somethingEUIDSUDO_USERtouchSUDO_USER

#!/bin/bash

if [[ $EUID -eq 0 ]] && [[ -n $SUDO_USER ]]; then
  sudo -u "$SUDO_USER" touch dummy.txt
else
  touch dummy.txt
fi

2
নোট যে ==স্ট্রিং তুলনা জন্য ব্যবহৃত। যেহেতু $EUIDপূর্ণসংখ্যার মান ফেরত দেওয়ার কথা, তাই আমি আপনাকে -edতুলনাটি ব্যবহার করার পরামর্শ দিই । ব্যবহারকারীর নামগুলিতে স্পেসগুলি অনুমোদিত , তাই সম্ভবত $SUDO_USERভেরিয়েবলের উদ্ধৃতি দিন । অন্যথায়, ভাল উত্তর - এটি আমি ব্যক্তিগতভাবে ব্যবহার করব।
সের্গেই কোলডিয়াজহনি

@ স্টাইলড্রাইভার এটিই আমি খুঁজছিলাম ধন্যবাদ !!
বেনামে

1
স্ক্রিপ্টটি নিজেই আবার চালাতে পারে sudo -uযদি এটি সনাক্ত করে যে এটি মূল হিসাবে চলছে। ওপি এক স্ক্রিপ্টে একাধিক কমান্ড থাকার বিষয়ে কথা বলেছিল। তবে ত্রুটিগুলির একটি অসীম লুপ এড়াতে সাবধান হন।
পিটার কর্ডেস

1
কোন শব্দ বিভাজন মধ্যে আছে [[...]]মধ্যে পরিবর্তনশীল উদ্ধৃত করা যদি বিবৃতি @Serg এবং আমি অনুমান তাই কঠোরভাবে প্রয়োজন নেই -edএকটি টাইপো ছিল-eq
Arronical

@ অ্যারোনিকাল হ্যাঁ, এটি টাইপও ছিল -eq[[শব্দ বিভাজন নেই জানতাম না। ধন্যবাদ। ব্যক্তিগতভাবে, আমি এখনও স্ক্রিপ্টিংয়ের ভাল অভ্যাসের জন্য উদ্ধৃতি দিয়েছিলাম
সের্গি কলডিয়াজহনি

9

যদি আপনার স্ক্রিপ্টটি চালিত না করে বোঝানো হয় root, সমস্যাটি সমাধানের সবচেয়ে নিরাপদ উপায় হ'ল প্রথম দিকে স্ক্রিপ্টটির সম্পাদন বাতিল করা:

if [ "$EUID" = 0 ]; then
   echo "This script must NOT be run as root" 
   exit 1
fi

Allyচ্ছিকভাবে, আপনি আপনার স্ক্রিপ্টটিকে ফালব্যাক ব্যবহারকারী হিসাবে পুনরায় সম্পাদন করতে পারেন (উদাঃ sudo -u FALLBACK_USER "$0") কেবল গর্ভপাতের পরিবর্তে।

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


6

ডিফল্টরূপে মূলের সাথে তৈরি ফাইলগুলিতে এরকম অনুমতি থাকে:

-rw-r--r-- 1 root root 0 11 17 23:25 rootfile.txt

এখানে ফাইলটি রুট ব্যবহারকারী এবং মূল গোষ্ঠীর অন্তর্ভুক্ত, এবং এটি রুট দ্বারা পাঠযোগ্য এবং লিখনযোগ্য, তবে অন্যরা কেবল পাঠযোগ্য।

সহজ chownব্যবহারকারীর ফাইলটি আসল ব্যবহারকারীর কাছে ফিরে আসবে।

chown username:group_name dummy.txt

আপনি $SUDO_USERকেবল তখনই sudoডাকা হয় যখন অ্যাক্সেসযোগ্য ভেরিয়েবল ব্যবহার করতে পারেন , যেমন:

chown "$SUDO_USER":"$SUDO_USER" dummy.txt

আপনি যদি নিয়মিত ব্যবহারকারীরূপে স্ক্রিপ্ট চালাচ্ছেন, chownঅংশটি মোটেই প্রয়োজন হয় না, তাই &&স্ক্রিপ্টটি যখন রুট হিসাবে চালিত হয় তখন আপনি যদি স্টেট-স্টেটমেন্ট বা পরীক্ষার ক্ষেত্রে পরীক্ষার জন্য পরীক্ষাটি ব্যবহার করে বিবেচনা করতে পারেন এবং এই লাইনগুলি বরাবর কিছু করেন:

#!/bin/bash
touch dummy.txt
[ $UID -eq 0 ] && chown "$SUDO_USER":"$SUDO_USER" dummy.txt

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


আপনার উত্তর দেওয়ার জন্য ধন্যবাদ. তবে কিউআইতে কেবল আসল ক্ষেত্রে স্ক্রিনটি ব্যাখ্যা করা হয়েছে মূল স্ক্রিপ্ট অনেকগুলি ফাইল তৈরি করবে। লিনাক্সে আমরা কেবল সুডো উপেক্ষা করতে পারি না?
অজ্ঞাতনামা

1
@ অজ্ঞাতনামা আপনি যদি পুরো স্ক্রিপ্টটি দিয়ে এর সাথে চালাচ্ছেন sudo, তবে না - আপনি এটিকে উপেক্ষা করতে পারবেন না। আপনার বিকল্পটি হয় নিয়মিত ব্যবহারকারী হিসাবে স্ক্রিপ্ট চালানো (যা আপনি কেন করবেন না তা আমি বুঝতে পারি না, যেহেতু আপনি কেবল এখানে আপনার ব্যবহারকারীর জন্য একটি ফাইল তৈরি করছেন) বা আমার উত্তরটিতে যেমন দেখানো হয়েছে তেমন ফাইলের মালিকানা পরিবর্তন করুন।
সের্গেই কোলডিয়াজহনি

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