CmndAlias ব্যবহার করা ALL
কখনই নিরাপদ হবে না
সেখানে চালানোর জন্য 1000 উপায় আছে service network restart
না করে sudo service network restart
। দুষ্টু ব্যবহারকারী কীভাবে চেষ্টা করতে পারে তার একটি উদাহরণ এখানে দেওয়া হয়েছে:
$ echo "service network restart" > /tmp/hax
$ chmod a+x /tmp/hax
$ sudo /tmp/hax
আপনি যদি ব্যবহারকারীদের ALL
কমান্ড ওরফে কমান্ড সরবরাহ করেন এবং একটি কালো তালিকা তৈরির চেষ্টা করেন তবে তারা সর্বদা এটির আশেপাশে কোনও উপায় সন্ধান করতে সক্ষম হবে। ব্ল্যাকলিস্ট ব্যাশ, এবং তারা অজগর ব্যবহার করবে। পাইথনকে ব্ল্যাকলিস্ট করুন এবং তারা পার্ল ব্যবহার করবে। ব্ল্যাকলিস্ট পার্ল, এবং তারা পিএইচপি ব্যবহার করবে। কেউ তা চায় না!
আপনি কি সত্যিই কেউ কিছু করতে না চান তাহলে, আপনি টমাস বলেন হিসেবে, এবং তারা একটি পরিচ্ছন্ন তালিকা তৈরি করা উচিত হয় না অনুমোদিত।
একটি ব্যতিক্রম সহ একটি শ্বেতলিস্ট সেট আপ
একটি বর্জন সহ একটি ছোট শ্বেতলিস্টের উদাহরণ নীচের অংশে পাওয়া যাবে man sudoers
:
pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
The user pete is allowed to change anyone's password except for root on the HPPA
machines. Note that this assumes passwd(1) does not take multiple user names
on the command line.
(আসলে ম্যানপেজটি থেকে এই উদাহরণটি অনিরাপদ এবং মূলের পাসওয়ার্ড পরিবর্তন করতে এটি ব্যবহার করা যেতে পারে! কীভাবে নীচের মন্তব্য দেখুন))
service
স্টাফ গ্রুপকে সমস্ত কমান্ড দেওয়ার জন্য আমরা আপনার ক্ষেত্রে এটি খাপ খাইয়ে নিতে চেষ্টা করতে পারি , তবে আপনাকে যে আদেশগুলি উদ্বিগ্ন তা বাদ দিন service network
:
%staff ALL = /usr/sbin/service *, \
! /usr/sbin/service *network*, \
! /usr/sbin/service *NetworkManager*
( ALL
সেই অবস্থানটি হোস্ট_আলিয়াসকে বোঝায়, সিমেন্ড_আলিয়াস নয় - বিভ্রান্তিকর তাই না?)
ব্যবহারকারী চালানোর জন্য সক্ষম হবেন না sudo bash
বা sudo tee
বা sudo wget
বা sudo /path/to/malicious_script
। আপনি যদি সাবধান হন তবে আপনার ব্যবহারকারীদের জন্য আরও প্রশাসক কমান্ড শ্বেত তালিকাতে রাখতে পারেন। শুধু নির্দিষ্ট করা!
দ্রষ্টব্য: আমি উপরের *
শব্দের আগে যুক্ত করেছি network
, কেবলমাত্র service
ভবিষ্যতে যদি কোনও ক্ষতিকারক পতাকা যোগ করা হয় । আসুন কল্পনা করুন যে --verbose
ভবিষ্যতে একটি পতাকা যুক্ত করা হয়েছে, তারপরে ব্যবহারকারীরা নিম্নলিখিতগুলি চালাতে সক্ষম হবেন:
$ sudo service --verbose network restart
সুতরাং আমাদের *
পরিষেবার নামের আগে কোনও পতাকা গ্রাস করতে হবে। এর একটি অসুবিধা হ'ল এটি অন্যান্য পরিষেবাগুলিকে অবরুদ্ধ করতে পারে যা আপনি ব্যবহারকারীদের চলমান মনে করেন না, যেমন একটি পরিষেবা বলা হয় safe-network
বা network-monitor
প্রত্যাখ্যানও করা হয়।
ব্যবহারকারীদের গ্রুপ অনুমতি ব্যবহার করে একটি ফাইল সম্পাদনা করতে দিন
নীচে আপনার ব্যবহার করা বিভিন্ন প্রচেষ্টা জানতে পারেন rnano
মাধ্যমে sudo
একটি ফাইল বা ফাইল দিন ব্যবহারকারীদের সম্পাদনা করুন। তবে প্রকৃতপক্ষে এগুলি তাদের চেয়ে জটিল ও বিপজ্জনক।
একটি সহজ এবং নিরাপদ সমাধান হ'ল যে নির্দিষ্ট ফাইলগুলির জন্য আপনি সম্পাদনা করার অধিকারগুলি খুলতে চান তার নির্দিষ্ট গোষ্ঠীর অনুমতিগুলি পরিবর্তন করা। এখানে উদাহরণ তুলে ধরা হলো:
### Give steve the ability to edit his nginx config:
$ chgrp steve /etc/nginx/sites-available/steves_dodgy_project
$ chmod g+rw /etc/nginx/sites-available/steves_dodgy_project
### Let all members of the staff group edit the group_website config:
$ chgrp staff /etc/nginx/sites-available/group_website
$ chmod g+rw /etc/nginx/sites-available/group_website
আপনার যদি আরও সূক্ষ্ম নিয়ন্ত্রণের প্রয়োজন হয় (উদাহরণস্বরূপ: মাত্র 3 ব্যবহারকারীর জন্য অ্যাক্সেস, তবে সমস্ত স্টাফ সদস্য নয়) আপনি addgroup
কমান্ডটি ব্যবহার করে একটি নতুন গোষ্ঠী তৈরি করতে পারেন এবং এতে কয়েকজন ব্যবহারকারী যুক্ত করতে পারেন।
ব্যবহারকারীদের মাধ্যমে একটি ফাইল সম্পাদনা করুন sudo
এই উত্তরটির বাকী sudo
অংশগুলি আপনার ব্যবহারকারীদের নমনীয়তার প্রস্তাব দেওয়ার সময় আপনার কনফিগারেশনের গর্তগুলি ছেড়ে দেওয়া কত সহজ তা তদন্তে পরিণত হয়েছিল । আমি নিম্নলিখিত কোনও কাজ করার পরামর্শ দেব না!
আপনি যদি একটি নির্দিষ্ট ফাইল সম্পাদনা করতে আপনার ব্যবহারকারীদের অ্যাক্সেস দিতে চান তবে আপনি এটি ব্যবহার করে দেখতে পারেন rnano
:
%staff ALL = /bin/rnano /etc/nginx/sites-available/host
rnano
কেবলমাত্র তাদের নির্দিষ্ট করা ফাইল সম্পাদনা করতে দেবে। এটি কোনও দূষিত ব্যবহারকারীকে আলাদা আলাদা আপস্টার্ট পরিষেবা (উদাহরণস্বরূপ /etc/init.d/urandom
) সম্পাদনা করা থেকে বিরত রাখা এবং এটিতে একটি লাইন যুক্ত করা যা গুরুত্বপূর্ণ service network restart
।
দুর্ভাগ্যক্রমে আমি rvim
পর্যাপ্ত পরিমাণে সীমাবদ্ধ করার কোনও উপায় পাইনি (ব্যবহারকারী এখনও ব্যবহার করে যে কোনও ফাইল খুলতে পারে :e
), তাই আমরা আটকে আছি nano
।
দুর্ভাগ্যক্রমে ব্যবহারকারীদের একাধিক ফাইল সম্পাদনা করার অনুমতি দেওয়া আরও শক্ত ...
ব্যবহারকারীদের একাধিক ফাইল সম্পাদনা করতে দিন (তার চেয়ে আরও বেশি জটিল উপায়)
1. অনিরাপদ পন্থা
ওয়াইল্ডকার্ড সম্পর্কে সাবধান! আপনি যদি খুব বেশি নমনীয়তা (বা কোনও নমনীয়তা) সরবরাহ করেন তবে এটি শোষণ করা যেতে পারে:
%staff ALL = /bin/rnano /etc/nginx/sites-available/* # UNSAFE!
এই ক্ষেত্রে, একটি দূষিত ব্যবহারকারী অন্য যে কোনও আপস্টার্ট পরিষেবা স্ক্রিপ্ট সম্পাদনা করতে সক্ষম হবে এবং তারপরে এটি চালাতে সক্ষম হবে:
$ sudo rnano /etc/nginx/sites-available/../../../any/file/on/the/system
(সুডো আসলে কমান্ডটি আটকাতে .
এবং ..
প্রসারিত করতে পারে , তবে দুর্ভাগ্যক্রমে যুক্তিগুলিতে নয়))
আমি আশা করছিলাম যে এটির মতো কিছু কার্যকর হতে পারে তবে এটি এখনও নিরাপদ নয়:
%staff ALL = /bin/rnano /etc/nginx/sites-available/[A-Za-z0-9_-]* # UNSAFE!
যেহেতু sudo
বর্তমানে কেবল গ্লোব নিদর্শন সরবরাহ করা হয়েছে, এটি *
কোনও কিছুর সাথে মিলবে - এটি কোনও রেজিপ্সপ নয়!
(সম্পাদনা: আমি বিবেচনা করে দেখেছেন যদি আপনি পারে আপনার অবস্থা উপরে দিয়ে পার পেতে, কারণ সেখানে তলদেশে কোন উপ-ফোল্ডার আছে sites-available
। আমরা হয়নি চাহিদা এক গৃহস্থালির কাজ ফোল্ডারের পর মিলেছে করা, এবং /..
। একটি ফাইলের নাম পরে ব্যর্থ উচিত তবে এই নয় হয় কার্যকর সমাধান, কারণ rnano
সাধারণভাবে যাহাই হউক না কেন একাধিক আর্গুমেন্ট। আর গ্রহণ এই এখনও হবে অনিরাপদ একটি ফোল্ডার যা সাবফোল্ডার ছিল উপর!)
আমাদের কোনও সাবফোল্ডার না থাকলেও এবং আমরা যে কোনও লাইন যুক্ত করে তা বাদ দিই /../
, *
তবুও গ্লোব সরবরাহকারী নিয়মটি কাজে লাগানো যেতে পারে, কারণ rnano
একাধিক যুক্তি গ্রহণ করে (তাদের মাধ্যমে সাইকেল চালানো <C-X>
, এবং স্থানটি *
সুখের সাথে বিশ্বজুড়ে গ্রহণ করা হয়েছে) ।
$ rnano /etc/nginx/sites-available/legal_file /then/any/file/on/the/system
2. খামে পুশ করা (চূড়ান্তভাবে অনিরাপদও)
সুতরাং যদি আমরা কোনও ফাঁকা স্থান যুক্ত লাইন প্রত্যাখ্যান করি বা পৌঁছানোর চেষ্টা করছি /..
? তারপরে একটি চূড়ান্ত কার্যক্ষম সমাধান হতে পারে:
# I tried hard to make this safe, but in the end I failed again.
# Please don't use this unless you are really smart or really stupid.
%staff ALL = /bin/rnano /etc/nginx/sites-available/*, \
! /bin/rnano */..*, \
! /bin/rnano /etc/nginx/sites-available/, \
! /bin/rnano */., \
! /bin/rnano * *
# CONCLUSION: It is still NOT SAFE if there are any subfolders, due to
# the bug in rnano described below.
আমরা "অধীনে" ফোল্ডারে কিছু গ্রহণ কিন্তু আমরা কোনো কল প্রত্যাখ্যান rnano
যদি /..
বা /.
বা
গৃহীত হয়, অথবা ফোল্ডার সরাসরি লক্ষ্যবস্তু হয়। (প্রযুক্তিগতভাবে /.
বাদ দেওয়া /..
ব্যতিক্রমকে অপ্রয়োজনীয় করে তোলে তবে আমি উভয়কেই স্পষ্টতার জন্য রেখে দিয়েছি))
আমি ফোল্ডারটি খুঁজে পেয়েছি এবং /.
ব্যতিক্রমগুলি প্রয়োজনীয় ছিল কারণ অন্যথায় ব্যবহারকারী ফোল্ডারটিকেই টার্গেট করতে পারে। এখন আপনি ভাবেন rnano
যে কোনও ফোল্ডারে দেখানো হলে অবরুদ্ধ হবে তবে আপনি ভুল হবেন। আসলে আমার সংস্করণ (2.2.6-1ubuntu1) একটি হালকা সতর্কতা এবং একটি খালি ফাইল দিয়ে শুরু হবে, তারপরে <C-X>
আমাকে নতুন আক্রমণকারীর ভেক্টর খোলার জন্য, যে ফাইল ফাইলটি সংরক্ষণ করতে চান তাতে ইনপুট করতে বলে ! ভাল কমপক্ষে এটি একটি বিদ্যমান ফাইল ওভাররাইট করতে অস্বীকার করেছিল (আমার এক পরীক্ষায়)। যাইহোক, যেহেতু সুডো সহ সাবফোল্ডারগুলিকে কালো তালিকাভুক্ত করার কোনও উপায় নেই, তাই আমাদের অবশ্যই সিদ্ধান্তে পৌঁছাতে হবে যে এই পদ্ধতিটি আবারও নিরাপদ নয়। দুঃখিত ব্যবহারকারীরা!
এই আবিষ্কারটি আমাকে nano
"সীমাবদ্ধ" মোডের পুরোপুরি সন্দেহ করতে বাধ্য করেছে। তারা বলে যে একটি চেইন কেবল তার দুর্বলতম লিঙ্কের মতোই শক্ত। আমি sudo
ব্ল্যাকলিস্ট ব্ল্যাক-ম্যাজিকের সংমিশ্রণ অনুভব করতে শুরু করেছি rnano
এবং ডেইজিদের শৃঙ্খলার চেয়ে আর নিরাপদ নাও হতে পারি।
৩. নিরাপদ তবে সীমিত পন্থা
গ্লোবগুলি খুব সীমাবদ্ধ - তারা আমাদের একাধিকবার একটি অক্ষর শ্রেণীর সাথে মেলে না। আপনি পারে একাধিক ফাইল সম্পাদনাগুলি প্রস্তাব, আপনার সব ফাইলের নামের একই দৈর্ঘ্য আছে যদি (এই ক্ষেত্রে host
একটি একক অঙ্ক দ্বারা অনুসরণ):
%staff ALL = /bin/rnano /etc/nginx/sites-available/host[0-9] # SAFE
তবে আপনি যদি ব্যবহারকারীকে বিভিন্ন ফাইল সম্পাদনা করতে অ্যাক্সেস দিতে চান তবে আপনার প্রতিটি ফাইলের স্পষ্ট করে উল্লেখ করতে হবে:
%staff ALL = /bin/rnano /etc/nginx/sites-available/hothost \
/bin/rnano /etc/nginx/sites-available/coldhost \ # SAFE
/bin/rnano /etc/nginx/sites-available/wethost \
/bin/rnano /etc/nginx/sites-available/steves_dodgy_project
*
কোনও বিন্দুতেএকটি ব্যবহার করার প্রলোভন করবেন না । উপরের বিভাগ 1 এবং 2 দেখুন কেন! মনে রাখবেন: একটি ছোট স্লিপ পুরো সুপারুজার অ্যাকাউন্ট এবং পুরো সিস্টেমের সাথে আপস করতে পারে।
4. আপনার নিজের যুক্তি পরীক্ষক লিখুন (সুরক্ষা এখন আপনার দায়িত্ব)
আমি আশা করি তারা sudo
ভবিষ্যতে রেজিপ্সপ সমর্থন যুক্ত করবে; সঠিকভাবে ব্যবহার করা হলে এটি অনেক সমস্যার সমাধান করতে পারে। তবে আমাদের আর্গুমেন্টের বৈশিষ্ট্যও পরীক্ষা করার দক্ষতা প্রয়োজন হতে পারে (কেবলমাত্র ফাইল, কেবল ফোল্ডার বা কেবলমাত্র কিছু নির্দিষ্ট ফ্ল্যাগের অনুমতি দেওয়ার জন্য)।
কিন্তু সুডোতে নমনীয়তা তৈরি করার একটি বিকল্প রয়েছে। বক পাস:
%staff ALL = /root/bin/staffedit *
তারপরে আপনার নিজস্ব staffedit
স্ক্রিপ্ট লিখুন বা ব্যবহারকারীর দ্বারা প্রদত্ত আর্গুমেন্টগুলি আইনী কিনা তা পরীক্ষা করতে এক্সিকিউটেবল এবং কেবল তাদের অনুরোধটি যদি তা হয় তবে তা সম্পাদন করুন।
networking
আরnetwork-manager
? এছাড়াও, আপনার ব্যবহারকারীদেরsudo
অ্যাক্সেস কেন ? আপনি না চাইলে তাদের উচিত নয় যে তারা সম্পূর্ণ মূল অধিকার পাবে।