ssh
rsh
কমান্ডগুলি কার্যকর করতে পাসওয়ার্ড ফাইল থেকে ব্যবহারকারীর শেল প্রোগ্রামটি ব্যবহার করে the তিহ্য অনুসরণ করে ।
এর অর্থ হ'ল আমরা কোনওভাবেই ssh
কনফিগারেশন জড়িত না করে এটি সমাধান করতে পারি ।
আপনি যদি না চান যে ব্যবহারকারী শেল অ্যাক্সেস রাখতে সক্ষম হন, তবে কেবল সেই ব্যবহারকারীর শেলটি একটি স্ক্রিপ্টের সাথে প্রতিস্থাপন করুন। আপনি যদি ভিতরে তাকান/etc/passwd
তবে দেখতে পাবেন যে একটি ক্ষেত্র রয়েছে যা প্রতিটি ব্যবহারকারীর জন্য শেল কমান্ড দোভাষী দেয় assign স্ক্রিপ্টটি তাদের ইন্টারেক্টিভ লগইন ssh user@host
এবং কমান্ডের জন্য উভয়ই শেল হিসাবে ব্যবহৃত হয়ssh user@host command arg ...
।
এখানে একটি উদাহরণ। আমি এমন একটি ব্যবহারকারী তৈরি করেছি foo
যার শেল একটি স্ক্রিপ্ট। স্ক্রিপ্টটি my arguments are:
তার আর্গুমেন্টগুলির পরে বার্তাটি মুদ্রণ করে (প্রতিটি পৃথক লাইনে এবং কোণ বন্ধনীতে) এবং সমাপ্ত হয়। লগ ইন ক্ষেত্রে, কোন যুক্তি আছে। যা ঘটে তা এখানে:
webserver:~
foo@localhost's password:
Linux webserver [ snip ]
[ snip ]
my arguments are:
Connection to localhost closed.
যদি ব্যবহারকারী কোনও কমান্ড চালানোর চেষ্টা করে তবে এটি দেখতে এরকম দেখাচ্ছে:
webserver:~
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 )
;;
( * )
printf "command not allowed\n"
exit 1
;;
esac
gitpath=$(readlink -f "$2")
case "$gitpath" in
( /git/* )
;;
( * )
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]
।