লগ-ইন করার পরে কীভাবে এসএসএইচ ব্যবহারকারীদের একটি পূর্বনির্ধারিত কমান্ডের সীমাবদ্ধ করবেন?


88

এটি একটি সুরক্ষার জন্য একটি ধারণা। আমাদের কর্মচারীদের একটি লিনাক্স সার্ভারে কিছু কমান্ডের অ্যাক্সেস থাকবে তবে সমস্তটি নয়। তাদের উদাহরণস্বরূপ একটি লগ ফাইল ( less logfile) প্রবেশ করতে বা বিভিন্ন কমান্ড ( shutdown.sh/ run.sh) শুরু করার সম্ভাবনা থাকবে ।

পটভূমির তথ্য:

সমস্ত কর্মচারী একই ব্যবহারকারীর নামের সাথে সার্ভার অ্যাক্সেস করে: আমাদের পণ্যটি "সাধারণ" ব্যবহারকারীর অনুমতি নিয়ে চলে, কোনও "ইনস্টলেশন" প্রয়োজন হয় না। এটি কেবল আপনার ব্যবহারকারী দিরে আনজিপ করুন এবং এটি চালান। আমরা বেশ কয়েকটি সার্ভার পরিচালনা করি যেখানে আমাদের অ্যাপ্লিকেশনটি "ইনস্টলড" রয়েছে। প্রতিটি মেশিনে একজন ব্যবহারকারী থাকে johndoe। আমাদের কর্মচারীদের মাঝে মাঝে লগ ফাইল অ্যাক্সেস করতে এবং পরীক্ষা করতে বা হাত দ্বারা অ্যাপ্লিকেশনটি পুনরায় চালু করতে কমান্ড লাইনের অ্যাপ্লিকেশনটিতে অ্যাক্সেসের প্রয়োজন হয়। কেবলমাত্র কিছু লোকেরই সম্পূর্ণ কমান্ড লাইন অ্যাক্সেস থাকবে।

আমরা সার্ভারে পিপিকে প্রমাণীকরণ ব্যবহার করছি।

এটি দুর্দান্ত হবে যদি কর্মচারী 1 কেবল লগফাইলে অ্যাক্সেস করতে পারে এবং কর্মচারীরা এক্স ইত্যাদিও করতে পারে ...

সমাধান: সমাধান হিসাবে আমি commandবিকল্পটি গ্রহণযোগ্য উত্তরে বর্ণিত হিসাবে ব্যবহার করব । আমি আমার নিজের শেল স্ক্রিপ্টটি তৈরি করব যা একমাত্র ফাইল যা কিছু কর্মচারীর জন্য কার্যকর করা যেতে পারে । স্ক্রিপ্টটি বেশ কয়েকটি আদেশ দেয় যা কার্যকর করা যেতে পারে তবে অন্য কোনও নয়। আমি এখানেauthorized_keys বর্ণিত হিসাবে নিম্নলিখিত পরামিতি ব্যবহার করব :

command="/bin/myscript.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
ssh-dss AAAAB3....o9M9qz4xqGCqGXoJw= user@host

এটি আমাদের জন্য যথেষ্ট সুরক্ষা। ধন্যবাদ, সম্প্রদায়!


স্ট্যান্ডার্ড লিনাক্স এসিএল অনুমতি-ভিত্তিক সুরক্ষা কি যথেষ্ট নয়? আপনার অতিরিক্ত বৈশিষ্ট্যগুলি কী দরকার?
জেমস ব্র্যাডি

22
মার্সেল এটি একটি ভয়াবহ ধারণা।
ভিঙ্কো ভার্সালোভিক

14
@ ভিঙ্কো, @ ইপিজেড: আমি কিছু ব্যাকগ্রাউন্ড তথ্য যুক্ত করেছি। "বোকা ধারণা" বলার পরিবর্তে আপনি মূল্য দিয়ে মন্তব্য সরবরাহ করতে পারেন। আপনার মতে একটি ভাল ধারণা কি?
মার্সেল

8
একাধিক ব্যবহারকারীর একই ব্যবহারকারীর ভাগ করে নেওয়ার কোনও অজুহাত আমি এখনও দেখছি না।
এল্ডেলশেল

4
"আমার নিজের ছোট্ট শেল স্ক্রিপ্ট"? এটি বেশ বিপজ্জনক বলে মনে হচ্ছে। আপনি যদি না বিশেষজ্ঞ না হন তবে এটি থেকে পুরো শেলটি থেকে পালানোর সম্ভবত অনেকগুলি উপায় রয়েছে। আমি বরং একটি লিখিত, ডিবাগড এবং রক্ষণাবেক্ষণ প্রোগ্রামে বিশ্বাস করব (বেশ কয়েকটি উল্লেখ করা হয়েছে)।
বোর্টজমায়ার

উত্তর:


70

আপনি অনুমতিযোগ্য কমান্ডগুলিতে কী কী সীমাবদ্ধ করতে পারেন (অনুমোদিত_কিস ফাইলে)।

অর্থাত্ ব্যবহারকারী এসএসএসের মাধ্যমে লগইন করবেন না এবং তারপরে একটি সীমাবদ্ধ কমান্ডের সেট থাকবে না বরং কেবল এসএসএসের মাধ্যমে সেই কমান্ডগুলি চালিত করার অনুমতি পাবে (যেমন "ssh somehost bin / showlogfile")


এটি আকর্ষণীয় দেখায়। একাধিক আদেশের সংজ্ঞা দেওয়া কি সম্ভব?
মার্সেল

13
এই নিবন্ধটি আপনাকে অনুমোদিত_কাইজ ফাইলটি ব্যবহার করে একাধিক কমান্ডের জন্য কয়েকটি বিকল্প দেয়: linuxj Journal.com/article/8257
বাশ

@ আরডি 834 ...: অনেক ধন্যবাদ। আমি মনে করি এটি আমাকে একটি "ভাল" সমাধান দিয়েছে ... (প্রশ্নে যুক্ত হয়েছে)। আমি এই উত্তরটিকে "সঠিক" হিসাবে গ্রহণ করব।
মার্সেল

11
ও'রিলি এসএসএইচ বইতে কীভাবে এটি করা যায় তার একটি দুর্দান্ত ব্যাখ্যা রয়েছে, এতে এসএসএইচ_আরআইজিআইএনএল_মোমন্ড পরিবেশের পরিবর্তনশীলকে দেখায় এমন স্ক্রিপ্ট সেটআপ করে একাধিক কমান্ডের অনুমতি প্রদান সহ। oreilly.com/catolog/sshtdg/chapter/ch08.html
অ্যালেক্স

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

33

sshrshকমান্ডগুলি কার্যকর করতে পাসওয়ার্ড ফাইল থেকে ব্যবহারকারীর শেল প্রোগ্রামটি ব্যবহার করে the তিহ্য অনুসরণ করে ।

এর অর্থ হ'ল আমরা কোনওভাবেই sshকনফিগারেশন জড়িত না করে এটি সমাধান করতে পারি ।

আপনি যদি না চান যে ব্যবহারকারী শেল অ্যাক্সেস রাখতে সক্ষম হন, তবে কেবল সেই ব্যবহারকারীর শেলটি একটি স্ক্রিপ্টের সাথে প্রতিস্থাপন করুন। আপনি যদি ভিতরে তাকান/etc/passwd তবে দেখতে পাবেন যে একটি ক্ষেত্র রয়েছে যা প্রতিটি ব্যবহারকারীর জন্য শেল কমান্ড দোভাষী দেয় assign স্ক্রিপ্টটি তাদের ইন্টারেক্টিভ লগইন ssh user@host এবং কমান্ডের জন্য উভয়ই শেল হিসাবে ব্যবহৃত হয়ssh user@host command arg ...

এখানে একটি উদাহরণ। আমি এমন একটি ব্যবহারকারী তৈরি করেছি fooযার শেল একটি স্ক্রিপ্ট। স্ক্রিপ্টটি my arguments are:তার আর্গুমেন্টগুলির পরে বার্তাটি মুদ্রণ করে (প্রতিটি পৃথক লাইনে এবং কোণ বন্ধনীতে) এবং সমাপ্ত হয়। লগ ইন ক্ষেত্রে, কোন যুক্তি আছে। যা ঘটে তা এখানে:

webserver:~# ssh foo@localhost
foo@localhost's password:
Linux webserver [ snip ]
[ snip ]
my arguments are:
Connection to localhost closed.

যদি ব্যবহারকারী কোনও কমান্ড চালানোর চেষ্টা করে তবে এটি দেখতে এরকম দেখাচ্ছে:

webserver:~# ssh foo@localhost cat /etc/passwd
foo@localhost's password:
my arguments are:
<-c>
<cat /etc/passwd>

আমাদের "শেল" a -c আর্গুমেন্ট হিসাবে পুরো কমান্ড সহ ঠিক একইভাবে স্টাইল অনুরোধ করে/bin/sh এটি গ্রহণ করবে।

সুতরাং আপনি দেখতে পাচ্ছেন, আমরা এখন যা করতে পারি তা হ'ল স্ক্রিপ্টটি আরও বিকাশ করা যাতে এটি যখন -cআর্গুমেন্টের সাহায্যে আবেদন করা হয় তখন কেসটি স্বীকৃতি দেয় এবং তারপরে স্ট্রিংটিকে পার্স করে (প্যাটার্ন ম্যাচিংয়ে বলে)। অনুমোদিত সেই স্ট্রিংগুলি পুনরাবৃত্তভাবে অনুরোধ করে সত্য শেলের কাছে প্রেরণ করা যেতে পারে /bin/bash -c <string>। প্রত্যাখ্যানযোগ্য কেসটি একটি ত্রুটি বার্তা মুদ্রণ করতে পারে এবং শেষ করতে পারে ( -cনিখোঁজ থাকা অবস্থায় কেস সহ )।

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

দ্রষ্টব্য: আপনি যদি হন তবে আপনি rootশেলটি ওভাররাইড করে এই অ্যাকাউন্টে লগইন করতে পারেনsu কমান্ডেরsu -s /bin/bash foo । (পছন্দের বিকল্প শেল itute) অ-রুট এটি করতে পারে না cannot

এখানে একটি উদাহরণ স্ক্রিপ্ট: কেবলমাত্র অধীনে থাকা সংগ্রহস্থলগুলিতে অ্যাক্সেসের sshজন্য ব্যবহারকারীকে সীমাবদ্ধ করুন ।git/git

#!/bin/sh

if [ $# -ne 2 ] || [ "$1" != "-c" ] ; then
  printf "interactive login not permitted\n"
  exit 1
fi

set -- $2

if [ $# != 2 ] ; then
  printf "wrong number of arguments\n"
  exit 1
fi

case "$1" in
  ( git-upload-pack | git-receive-pack )
    ;; # continue execution
  ( * )
    printf "command not allowed\n"
    exit 1
    ;;
esac

# Canonicalize the path name: we don't want escape out of
# git via ../ path components.

gitpath=$(readlink -f "$2")  # GNU Coreutils specific

case "$gitpath" in
  ( /git/* )
     ;; # continue execution
  ( * )
    printf "access denied outside of /git\n"
    exit 1
    ;;
esac

if ! [ -e "$gitpath" ] ; then
   printf "that git repo doesn't exist\n"
   exit 1
fi

"$1" "$gitpath"

অবশ্যই, আমরা বিশ্বাস করি যে এই গিট প্রোগ্রামগুলি git-upload-pack এবং git-receive-packগর্ত বা পালানোর হ্যাচ নেই যা ব্যবহারকারীদের সিস্টেমে অ্যাক্সেস দিতে পারে।

এটি এই জাতীয় বিধিনিষেধ প্রকল্পের অন্তর্নিহিত। ব্যবহারকারী একটি নির্দিষ্ট সুরক্ষিত ডোমেনে কোড চালানোর জন্য অনুমোদনপ্রাপ্ত এবং আমরা সেই ডোমেনটিকে একটি সাবডোমেনে সীমাবদ্ধ করার জন্য একটি সীমাবদ্ধতার মধ্যে পড়ছি। উদাহরণস্বরূপ আপনি যদি কোনও ব্যবহারকারীকে vimসম্পাদনা করার জন্য কোনও নির্দিষ্ট ফাইলের কমান্ড চালানোর অনুমতি দেন তবে ব্যবহারকারী কেবল একটি শেলটি পেতে পারে :!sh[Enter]


6
গম্ভীরভাবে, এটি খুব বিপজ্জনক। আমাকে মৃত্যুদন্ড কার্যকর করা থেকে কী থামাবে git-receive-pack '/git/';dd if=/dev/urandom of=/dev/sda?
ইয়েতি

@ ইয়েতি কি আমাদের এখানে কমান্ড ইঞ্জেকশন গর্ত আছে? সেদিকে নজর দেওয়া দরকার। এছাড়াও, ফাইলের ধরণগুলির যে অপব্যবহারের ঘটনা আমি ঘটিয়েছি caseতা আমার কাছে সঠিক দেখাচ্ছে না।
কাজ

4
হ্যাঁ, /bin/bash -c "$2"এটি নিরাপত্তাহীন (এসকিউএল ইঞ্জেকশন কীভাবে কাজ করে তার সমান)। আপনি পিএইচপি এর মতো "ম্যাজিক কোটস" দিয়ে স্ট্রিং ফিল্টার করতে পারেন। তবে সুরক্ষা একেবারে নিশ্চিত করার সহজ উপায় হ'ল একটি কমান্ডটি ম্যানুয়ালি কল করা এবং তারপরে ডাবল কোটের মধ্যে প্যারামিটারগুলি পাস করা। কারণ পুরো বিষয়টির সুরক্ষা তখন সেই আদেশটি দুর্বলতম লিঙ্ক হওয়া (যাচাই করা আরও কঠিন) উপর নির্ভর করে। আপনার উত্তরটিতে কীভাবে 22 টি upvotes রয়েছে তা সর্বাধিক আকর্ষণীয়, তবে কেউ এটি লক্ষ্য করেনি;) আপনি কি নিজের উত্তর আপডেট করবেন?
ইয়েতি

4
@ ইয়েতি হ্যাঁ; আমি করেছি. আমি স্ক্রিপ্টটি এমন একটি দিয়ে প্রতিস্থাপন করেছি যা এর সাথে -c যুক্তিটি ভেঙে দেয় setএবং এর থেকে কেবল প্রথম দুটি শব্দ নেয়। প্রথমটি অবশ্যই একটি অনুমোদিত git-আদেশ হতে হবে এবং দ্বিতীয়টি অবশ্যই এমন একটি পথ হতে হবে যা প্রজ্ঞাযুক্ত, অনুমোদিত উপসর্গের বিরুদ্ধে পরীক্ষা করা এবং অস্তিত্বের জন্যও পরীক্ষা করা উচিত। আপনি এটি ভাঙ্গার কোন উপায় সম্পর্কে চিন্তা করতে পারেন?
কাজ

4
যদি না প্রদত্ত কোনও আদেশের জন্য কেউ একটি উপাধি (বা একটি আদেশকে ওভাররাইড) না করে, তবে না, বাশ ডাবল উদ্ধৃতিগুলি নিরাপদ হওয়া উচিত (এবং যদি তা না হয় তবে এটি বাশ-এ একটি বাগ)।
ইয়েতি

15

আপনি যা খুঁজছেন তাকে নিষিদ্ধ শেল বলে । বাশ এমন একটি মোড সরবরাহ করে যেখানে ব্যবহারকারীরা কেবলমাত্র তাদের হোম ডিরেক্টরিতে উপস্থিত কমান্ডগুলি কার্যকর করতে পারে (এবং তারা অন্যান্য ডিরেক্টরিতে যেতে পারে না), এটি আপনার পক্ষে যথেষ্ট ভাল হতে পারে।

আমি এই থ্রেডটি খুব উদাহরণস্বরূপ বলে মনে করেছি , যদি কিছুটা তারিখ হয়।


4
যদি ব্যবহারকারী "! / বিন / শ" বা কম প্রম্পট থেকে এমন কিছু করেন?
PEZ

4
@ উবারসোলাত: দয়া করে আপনার সমস্ত পোস্টে আগ্রাসনটি কমিয়ে তুলুন। তিনি জিজ্ঞাসা করছিলেন যে এই বাধা কেবল বাশ বা শিশু প্রসেসের ক্ষেত্রেও প্রযোজ্য কিনা (এবং তার প্রশ্নের উত্তর দেওয়ার জন্য, এটি সক্রিয় নয়)

সীমাবদ্ধ শেল সহ একটি বড় সমস্যা হ'ল এটি সুরক্ষিত করার জন্য আপনাকে অবশ্যই PATH সীমাবদ্ধ করতে, বিল্টইনগুলি অক্ষম করতে ইত্যাদির জন্য। প্রোফাইল বা .bashrc ব্যবহার করতে হবে, তবে এই ফাইলগুলি কেবল ইন্টারেক্টিভ শেলগুলির জন্যই আহ্বান জানানো হয়। কোনও ব্যবহারকারী যদি রিমোট কমান্ড চালাতে ssh ব্যবহার করেন তবে সেগুলি চাওয়া হবে না। এটি SHELL = / bin / rbash এর সাথে একটি অ্যাকাউন্টে ssh অ্যাক্সেস সহ একটি অ-ইন্টারেক্টিভ তবে অবিচ্ছিন্ন শেল পেতে "ssh রিমোটহোস্ট ব্যাশ" এর মতো কিছু করতে সক্ষম করে। এইচডি পরামর্শ অনুসারে আপনার এসএসএইচ জোরপূর্বক কমান্ডের প্রয়োজন, তবে পিইজেড যেমন জিজ্ঞাসা করেছিলেন (শনিবারে প্যাচটি লক হয়ে যায় - এতে ডিফল্টরূপে / বিন: / ইউএসআর / বিন অন্তর্ভুক্ত থাকে) এটি শেল পলায়নের হাত থেকে রক্ষা করতে পারে।
অ্যালেক্স ডুপুয়

4
আমি এটি ফিরিয়ে নিয়েছি, এসএইচডি এর অধীনে অ-ইন্টারেক্টিভভাবে চলাকালীন ব্যাশ .bashrc (প্রফাইলে নয়) ডেকে আনবে ; তবে আপনাকে নিশ্চিত করতে হবে যে আপনি PATH স্পষ্টতই সেট করেছেন এবং .bashrc- এ বিল্টইনস এবং উপকরণগুলি অক্ষম করেছেন - PATH বা .ssh / অথবা .brcrc এর / উপরে নয় এমন একটি উপ-ডিরেক্টরিতে পরিবর্তন করাও একটি ভাল ধারণা। যথেচ্ছ ফাইলগুলিতে লিখতে পারে এমন কোনও কমান্ড থাকা একটি সমস্যা তৈরি করবে - এগুলি সর্বদা সুস্পষ্ট হয় না, উদাহরণস্বরূপ '' w 'কমান্ডটি .bashrc ওভাররাইট করতে এবং ব্রেকআউট করতে ব্যবহৃত হতে পারে। আপনি যদি এটি ব্যবহার করতে পারেন তবে একটি ক্রুট জেল সর্বদা নিরাপদ হবে এবং এসএসএস জোর করা আদেশগুলি আরও সীমাবদ্ধ থাকবে।
অ্যালেক্স দুপুয়

5

আপনি কেন নিজের লগইন-শেল লিখছেন না? এটির জন্য ব্যাশ ব্যবহার করা বেশ সহজ হবে তবে আপনি যে কোনও ভাষা ব্যবহার করতে পারেন।

বাশ উদাহরণ

ফাইলটি তৈরি করতে আপনার প্রিয় সম্পাদক ব্যবহার করুন /root/rbash.sh(এটি কোনও নাম বা পথ হতে পারে, তবে হওয়া উচিত chown root:rootএবং chmod 700):

#!/bin/bash

commands=("man" "pwd" "ls" "whoami")
timestamp(){ date +'%Y-%m-%s %H:%M:%S'; }
log(){ echo -e "$(timestamp)\t$1\t$(whoami)\t$2" > /var/log/rbash.log; }
trycmd()
{
    # Provide an option to exit the shell
    if [[ "$ln" == "exit" ]] || [[ "$ln" == "q" ]]
    then
        exit
        
    # You can do exact string matching for some alias:
    elif [[ "$ln" == "help" ]]
    then
        echo "Type exit or q to quit."
        echo "Commands you can use:"
        echo "  help"
        echo "  echo"
        echo "${commands[@]}" | tr ' ' '\n' | awk '{print "  " $0}'
    
    # You can use custom regular expression matching:
    elif [[ "$ln" =~ ^echo\ .*$ ]]
    then
        ln="${ln:5}"
        echo "$ln" # Beware, these double quotes are important to prevent malicious injection
        
        # For example, optionally you can log this command
        log COMMAND "echo $ln"
    
    # Or you could even check an array of commands:
    else
        ok=false
        for cmd in "${commands[@]}"
        do
            if [[ "$cmd" == "$ln" ]]
            then
                ok=true
            fi
        done
        if $ok
        then
            $ln
        else
            log DENIED "$cmd"
        fi
    fi
}

# Optionally show a friendly welcome-message with instructions since it is a custom shell
echo "$(timestamp) Welcome, $(whoami). Type 'help' for information."

# Optionally log the login
log LOGIN "$@"

# Optionally log the logout
trap "trap=\"\";log LOGOUT;exit" EXIT

# Optionally check for '-c custom_command' arguments passed directly to shell
# Then you can also use ssh user@host custom_command, which will execute /root/rbash.sh
if [[ "$1" == "-c" ]]
then
    shift
    trycmd "$@"
else
    while echo -n "> " && read ln
    do
        trycmd "$ln"
    done
fi

আপনাকে যা করতে হবে তা হ'ল আপনার লগইন শেল হিসাবে এই নির্বাহযোগ্যকে সেট করা। উদাহরণস্বরূপ, আপনার /etc/passwdফাইল সম্পাদনা করুন এবং সেই ব্যবহারকারীর /bin/bashসাথে আপনার বর্তমান লগইন শেলটি প্রতিস্থাপন করুন /root/rbash.sh

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

আপনার সাথে এটি পরীক্ষা করতে পারেন: su -s /root/rbash.sh

সাবধান , পুরো কমান্ডটি মেলাতে ভুলবেন না, এবং ওয়াইল্ডকার্ডগুলির সাথে সাবধান! বেটার অগ্রাহ্য যেমন ব্যাশ-চিহ্ন ;, &, &&, ||, $, এবং ব্যাকটিক নিশ্চিত হতে।

আপনি ব্যবহারকারীকে যে স্বাধীনতা দিয়েছেন তার উপর নির্ভর করে এটি এর চেয়ে বেশি নিরাপদ হবে না। আমি খুঁজে পেয়েছি যে প্রায়শই আমাকে এমন একটি ব্যবহারকারী তৈরি করা দরকার যা কেবলমাত্র কয়েকটি প্রাসঙ্গিক কমান্ড অ্যাক্সেস পায় এবং সে ক্ষেত্রে এটিই আরও ভাল সমাধান। তবে, আপনি কি আরও বেশি স্বাধীনতা দিতে চান, একটি জেল এবং অনুমতিগুলি আরও উপযুক্ত হতে পারে। ভুলগুলি সহজেই করা হয় এবং কেবল ইতিমধ্যে যখন খুব বেশি দেরি হয় কেবল তখনই তা লক্ষ্য করা যায়।


আমি সত্যিই এই পদ্ধতির পছন্দ। "পরিষেবাদি httpd পুনঃসূচনা" জাতীয় মাল্টি-ওয়ার্ড কমান্ডগুলি কীভাবে আমরা পরিচালনা করতে পারি তার কোনও ধারণা আছে?
ফারজান

4
@Farzan আপনি কমান্ড একটি পরিবর্তনশীল মধ্যে, নির্বাহ করতে পারেন যেমন ln="service httpd restart", সঙ্গে: ${ln[@]}। সুরক্ষার সমস্যাগুলি নিয়ে এখনও ভাবতে ভুলবেন না, কেবলমাত্র বর্ণানুক্রমিক অক্ষর এবং শ্বেত স্পেসগুলির জন্য একটি শ্বেত তালিকা এমন ক্ষেত্রে কার্যকর হবে। তবে আপনি কেবল এটি করতে পারেন: if [[ "$ln" == "restart-httpd"];then service httpd restart;fiএবং এর মতো সহজ কমান্ডের সাথে কাজ করুন।
ইয়েতি

/root/rbash.sh: Permission denied আমি chmod 777 পাশাপাশি চেষ্টা করেছি
খ্রিস্টান

@ খ্রিস্টিয়ান, আপনি কি যুক্ত /root/rbash.shকরেছেন /etc/shells? এটি বিতরণের উপর নির্ভর করে। আপনি সাময়িকভাবে অক্ষম করার চেষ্টা করতে পারেন এবং selinuxফাইলগুলিতে ক্লুগুলির জন্য টাইমস্ট্যাম্পটি দেখুন (টাইমস্ট্যাম্পটি দেখুন) /var/log
ইয়েতি

@ ইয়েটি নং, / রুটে যুক্ত করার জন্য ব্যাখ্যা করা হয়েছিল :) এখন চেষ্টা করবে।
খ্রিস্টান

4

আপনার `আরএসএস ', সীমাবদ্ধ শেল নেওয়া উচিত

আপনি উপরে বর্ণিত বিধিনিষেধের গাইডগুলি অনুসরণ করতে পারেন, এগুলি সকলেই বরং স্ব-ব্যাখ্যামূলক এবং অনুসরণ করা সহজ। 'ক্রুট জেল' শর্তাদি এবং কীভাবে কার্যকরভাবে sshd / টার্মিনাল কনফিগারেশন প্রয়োগ করতে হবে ইত্যাদি Unders

আপনার বেশিরভাগ ব্যবহারকারীরাই আপনার টার্মিনালগুলিকে sshd এর মাধ্যমে অ্যাক্সেস করার কারণে, আপনাকে সম্ভবত এসএসএইচ এর মাধ্যমে নির্দিষ্ট বিধিনিষেধ প্রয়োগ করার জন্য এসএসএইচডি_কণিফগ, এসএসএইচ ডেমন কনফিগারেশন ফাইলটিও দেখতে হবে। তবে সাবধান! আপনি কার্যকর করার চেষ্টা করছেন তা সঠিকভাবে বুঝতে পারেন, কারণ ভুল কনফিগারেশনের বিষয়টি সম্ভবত মারাত্মক are


4
নোট করুন যে pizzashack.org/rssh আপনি যে বিশেষ ক্ষেত্রে scp / sftp / rdist / rsync / cvs (এবং একটি ক্রুট জেলের বাইরে কোনও কিছুর অ্যাক্সেসের প্রয়োজন নেই) কে অনুমতি দিতে চান সেই বিশেষ মামলার জন্য একটি দুর্দান্ত (সম্ভবত সেরা) সমাধান - , এটি মূল পোস্টারটির সাধারণ প্রশ্নের সমাধান করে না, যারা ব্যবহারকারীরা লগ ফাইলগুলি দেখতে এবং নির্দিষ্ট রান / শাটডাউন স্ক্রিপ্টগুলি চালাতে সক্ষম হতে চেয়েছিল।
অ্যালেক্স ডুপুয়

4
rsshদেবিয়ান বুস্টার থেকে সরানো হয়েছিল। আমার মনে হয় নতুন হটনেস হ'ল জিএনইউ রাশ
থমাস

4
@Thomas আমি বিশ্বাস করি rssh এখন unmaintained, এবং একটি জ্ঞাত সুরক্ষা সমস্যা রয়েছে: sourceforge.net/p/rssh/mailman/message/36519118
ম্যাক্স Barraclough

2

এটি সম্পাদন করার জন্য জিএনইউ রাশ সবচেয়ে নমনীয় এবং সুরক্ষিত উপায় হতে পারে:

জিএনইউ রাশ হ'ল একটি সীমাবদ্ধ ব্যবহারকারী শেল, এমন সাইটগুলির জন্য ডিজাইন করা হয়েছে যা তাদের সংস্থানগুলিতে সীমাবদ্ধ দূরবর্তী অ্যাক্সেস সরবরাহ করে, যেমন এসএনএন বা গিট সংগ্রহস্থল, স্কিপ, বা এর মতো। একটি পরিশীলিত কনফিগারেশন ফাইল ব্যবহার করে, জিএনইউ রাশ আপনাকে ব্যবহারকারীরা যে কমান্ড লাইনগুলি চালিত করে, তেমনি সিস্টেম রিসোর্সের ব্যবহার যেমন ভার্চুয়াল মেমরি, সিপিইউ সময় ইত্যাদি উপর সম্পূর্ণ নিয়ন্ত্রণ দেয় gives



0

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

আরেকটি বিষয় লক্ষ্য করা যায় হ'ল পলিসিকিট

এই মুহূর্তে লিনাক্সের শক্তি না হওয়ায় সবকিছু কাজ করার জন্য আপনাকে বেশ কিছুটা গুগলিং করতে হবে।


0

[প্রকাশ: আমি sshdo লিখেছি যা নীচে বর্ণিত হয়েছে]

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

এটি করার জন্য sshdo নামে একটি প্রোগ্রাম রয়েছে। এটি নিয়ন্ত্রণ করে যে আগত এসএসএস সংযোগের মাধ্যমে কোন আদেশগুলি কার্যকর করা যেতে পারে। এটি ডাউনলোডের জন্য এখানে পাওয়া যায়:

http://raf.org/sshdo/ (ম্যানুয়াল পৃষ্ঠাগুলি এখানে পড়ুন) https://github.com/raforg/sshdo/

এটিতে চেষ্টা করা সমস্ত কমান্ডের অনুমতি দেওয়ার জন্য একটি প্রশিক্ষণ মোড এবং স্থায়ীভাবে শেখা কমান্ডগুলির অনুমতি দেওয়ার জন্য প্রয়োজনীয় কনফিগারেশন তৈরি করার জন্য --leear বিকল্প রয়েছে। তারপরে প্রশিক্ষণ মোডটি বন্ধ করা যেতে পারে এবং অন্য কোনও কমান্ড কার্যকর করা হবে না।

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

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

তবে এটি একই ধরণের কমান্ড উপস্থাপন করতে সাধারণ প্যাটার্ন সমর্থন করে যা কেবলমাত্র কমান্ড লাইনে উপস্থিত অঙ্কগুলিতে পরিবর্তিত হয় (যেমন ক্রম সংখ্যা বা তারিখ / সময় স্ট্যাম্প))

এটি ssh কমান্ডগুলির জন্য ফায়ারওয়াল বা শ্বেত তালিকা নিয়ন্ত্রণের মতো।

এবং এটি বিভিন্ন ব্যবহারকারীর জন্য অনুমোদিত বিভিন্ন কমান্ডকে সমর্থন করে।

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