টিএল; ডিআর - "নিষেধাজ্ঞাগুলি প্রয়োগ করা" উত্তরের নীচে যান
একটি সীমাবদ্ধ ব্যবহারকারী যুক্ত করার দুটি অংশ রয়েছে: 1. ব্যবহারকারী তৈরি করা 2. এসএসএইচ ডেমন কনফিগার করা (এসএসডিডি)
Sshd কনফিগার করা হচ্ছে
এসএসএইচের সম্ভাব্যতা জানার জন্য সবচেয়ে ভাল জায়গাটি সম্পর্কিত ম্যানুয়াল পৃষ্ঠাগুলি পড়ে:
এসএসএইচ ক্লায়েন্ট কোথায় কর্ম করতে পারে?
আপনি কিছু সীমাবদ্ধ করার আগে আপনাকে এসএসএইচ এর বৈশিষ্ট্যগুলি জানতে হবে know ম্যানুয়াল পৃষ্ঠাগুলির মাধ্যমে থুথু ফল দেয়:
- শেল কার্যকর করার আদেশ দেয়
- Sftp এর মাধ্যমে ফাইল আপলোড করুন
- পোর্ট ফরওয়ার্ডিং
- ক্লায়েন্ট সার্ভারে একটি (আন) ব্যবহার করা পোর্ট ফরওয়ার্ড করে
- সার্ভার ক্লায়েন্টের কাছে তার পোর্ট ফরওয়ার্ড করে
- সার্ভার ক্লায়েন্টের কাছে অন্য হোস্টের একটি পোর্ট ফরওয়ার্ড করে (প্রক্সি-ইশ)
- এক্স 11 ফরোয়ার্ডিং (প্রদর্শন ফরওয়ার্ডিং)
- প্রমাণীকরণ এজেন্ট ফরওয়ার্ডিং
- একটি টানেল ডিভাইস ফরওয়ার্ডিং
Sshd (8) এর ম্যানুয়াল পৃষ্ঠার প্রমাণীকরণ বিভাগ থেকে :
ক্লায়েন্ট যদি সাফল্যের সাথে নিজের প্রমাণীকরণ করে তবে সেশনটি প্রস্তুত করার জন্য একটি ডায়ালগ প্রবেশ করানো হয়। এই মুহুর্তে ক্লায়েন্ট একটি সিডো-টিটি বরাদ্দকরণ, এক্স 11 সংযোগগুলি ফরোয়ার্ড করা, টিসিপি সংযোগগুলি ফরোয়ার্ড করা, বা সুরক্ষিত চ্যানেলের উপর প্রমাণীকরণ এজেন্ট সংযোগটি ফরোয়ার্ড করার মতো জিনিসগুলির জন্য অনুরোধ করতে পারে
।
এর পরে, ক্লায়েন্ট হয় শেল বা একটি আদেশের প্রয়োগের জন্য অনুরোধ করে । পক্ষগুলি তারপরে সেশন মোডে প্রবেশ করে। এই মোডে, উভয় পক্ষ যেকোন সময় ডেটা প্রেরণ করতে পারে এবং সার্ভারের পাশের শেল বা কমান্ড থেকে / এবং ক্লায়েন্টের পাশের ব্যবহারকারী টার্মিনালে এই জাতীয় ডেটা প্রেরণ করা যেতে পারে।
এসএসএইচ বৈশিষ্ট্যগুলিকে সীমাবদ্ধ করার জন্য বিকল্পসমূহ
ফাইলগুলি এবং তাদের বিকল্পগুলি যা আচরণকে পরিবর্তন করে:
~/.ssh/authorized_keys
- এমন কী রয়েছে যা সংযোগের জন্য অনুমোদিত যা বিকল্পগুলি দেওয়া যেতে পারে:
command="command"
- ব্যবহারকারী দ্বারা সরবরাহিত কমান্ডটি (যদি থাকে) উপেক্ষা করা হয়। নোট করুন ক্লায়েন্ট টিসিপি এবং / অথবা এক্স 11 ফরোয়ার্ডিং নির্দিষ্ট করতে পারে যদি না তারা স্পষ্টভাবে নিষিদ্ধ হয় । নোট করুন যে এই বিকল্পটি শেল, কমান্ড বা সাবসিস্টেম এক্সিকিউশনের ক্ষেত্রে প্রযোজ্য।
no-agent-forwarding
- এই কীটি যখন প্রমাণীকরণের জন্য ব্যবহৃত হয় তখন নিষিদ্ধ প্রমাণীকরণ এজেন্ট ফরোয়ার্ডিং।
no-port-forwarding
- এই কীটি যখন প্রমাণীকরণের জন্য ব্যবহৃত হয় তখন ফোবিডস টিসিপি ফরোয়ার্ডিং
no-X11-forwarding
- "এই কীটি প্রমাণীকরণের জন্য ব্যবহৃত হলে ফরবিডস এক্স 11 ফরোয়ার্ডিং।"
permitopen="host:port"
- স্থানীয় 'ssh -L' পোর্ট ফরওয়ার্ডিং সীমাবদ্ধ করুন যাতে এটি কেবলমাত্র নির্দিষ্ট হোস্ট এবং পোর্টের সাথে সংযোগ স্থাপন করতে পারে।
~/.ssh/environment
- এই ফাইলটি লগইন-এ পরিবেশের মধ্যে পড়ে (যদি তা বিদ্যমান থাকে)। পরিবেশ প্রক্রিয়াকরণ ডিফল্টরূপে অক্ষম থাকে এবং পারমিট ইউজার-পরিবেশ বিকল্পের মাধ্যমে নিয়ন্ত্রিত হয়
~/.ssh/rc
- ব্যবহারকারীর হোম ডিরেক্টরি অ্যাক্সেসযোগ্য হওয়ার আগে চালনা করার সূচনা রুটিন ধারণ করে।
/etc/ssh/sshd_config
- সিস্টেম-ব্যাপী কনফিগারেশন ফাইল
AllowAgentForwarding
- ssh- এজেন্ট (1) ফরোয়ার্ডিং অনুমোদিত কিনা তা নির্দিষ্ট করে।
AllowTcpForwarding
ForceCommand
- "ক্লায়েন্ট এবং ~ / .ssh / rc উপস্থিত কোনও কমান্ড উপেক্ষা করে ফোর্সকমন্ড দ্বারা সুনির্দিষ্ট কমান্ডটি কার্যকর করতে জোর করে c
GatewayPorts
- "ক্লায়েন্টের জন্য ফরোয়ার্ড করা পোর্টগুলিতে দূরবর্তী হোস্টগুলি সংযোগ করার অনুমতি দেওয়া হয়েছে কিনা তা নির্দিষ্ট করে default যে sshd- র দূরবর্তী পোর্ট ফরওয়ার্ডিংকে নন-লুপব্যাক ঠিকানাগুলিতে আবদ্ধ করার অনুমতি দেওয়া উচিত, এইভাবে অন্যান্য হোস্টকে সংযোগ স্থাপনের অনুমতি দেয়। "
PermitOpen
:
যে গন্তব্যগুলিতে টিসিপি পোর্ট ফরওয়ার্ডিংয়ের অনুমতি দেওয়া হয়েছে তা নির্দিষ্ট করে। ফরোয়ার্ডিং স্পেসিফিকেশন অবশ্যই নিম্নলিখিত ফর্মগুলির একটি হতে হবে:
PermitOpen host:port
PermitOpen IPv4_addr:port
PermitOpen [IPv6_addr]:port
একাধিক ফরোয়ার্ড শ্বেত স্পেস দিয়ে আলাদা করে নির্দিষ্ট করা যেতে পারে। 'যে কোনও' একটি যুক্তি সমস্ত বিধিনিষেধ অপসারণ এবং যে কোনও ফরওয়ার্ডিংয়ের অনুরোধের অনুমতি দিতে ব্যবহার করা যেতে পারে। ডিফল্টরূপে সমস্ত বন্দর ফরওয়ার্ডিং অনুরোধ অনুমোদিত।
PermitTunnel
- টিউন (4) ডিভাইস ফরওয়ার্ডিং অনুমোদিত কিনা তা উল্লেখ করে। ডিফল্টটি 'না'
X11Forwarding
- এক্স 11 ফরওয়ার্ডিং অনুমোদিত কিনা তা উল্লেখ করে। ডিফল্টটি 'না'
সীমাবদ্ধতা প্রয়োগ করা
সিস্টেম-ওয়াইড কনফিগারেশন ফাইলটি সংশোধন /etc/ssh/sshd_config
করা পাসওয়ার্ড-ভিত্তিক প্রমাণীকরণ প্রয়োগ করা থাকলে বা এতে থাকা বিধিনিষেধগুলি ~/.ssh/authorized_keys
ঘটনাক্রমে অপসারণ করা হলেও কনফিগারেশনটি প্রয়োগ করতে দেয় । আপনি যদি বিশ্বব্যাপী ডিফল্টগুলি সংশোধন করে থাকেন তবে সেই অনুসারে আপনার বিকল্পগুলি অসুবিধা করা উচিত।
Match User limited-user
#AllowTcpForwarding yes
#X11Forwarding no
#PermitTunnel no
#GatewayPorts no
AllowAgentForwarding no
PermitOpen localhost:62222
ForceCommand echo 'This account can only be used for [reason]'
এখন একটি ব্যবহারকারী যুক্ত করুন:
sudo useradd -m limited-user
ForceCommand
শেলটি একটি অ-শেলের মতো /bin/false
(বা /bin/true
) যেমন /bin/false -c [command]
কিছু না করে সেট করা থাকে তবে বিকল্পটি বাদ দেওয়া যেতে পারে।
এখন ক্লায়েন্টটি কেবল এসএসএইচ-এর মাধ্যমে সার্ভারের লুপব্যাক ঠিকানায় 62222 পোর্টের সাথে সংযোগ করতে পারে (এটি পাবলিক আইপি ঠিকানায় শুনবে না)
অক্ষম AllowTcpForwarding
করাও এর ব্যবহারকে নিষিদ্ধ করবে -R
, এভাবে একটি পোর্ট ফরওয়ার্ড করার জন্য এই জাতীয় সীমাবদ্ধ অ্যাকাউন্টের ব্যবহারকে পরাস্ত করবে। PermitOpen localhost:62222
ধরে নেওয়া হয়েছে যে সার্ভারে 62222 পোর্টটি কখনই ব্যবহারযোগ্য নয় কারণ ক্লায়েন্টটি আনন্দের সাথে এটিতে সংযুক্ত হতে পারে এবং এটি শুনতেও পারে।
যদি সিস্টেম-বিস্তৃত কনফিগারেশন এবং অক্ষম পাসওয়ার্ড-ভিত্তিক প্রমাণীকরণে টিসিপি ফরোয়ার্ডিং অনুমোদিত হয় তবে আপনি প্রতি-কী সেটিংসও ব্যবহার করতে পারেন। (বিকল্পগুলির মধ্যে একটি স্থান সহ ) এর ~/.ssh/authorized_keys
আগে পরবর্তী বিকল্পগুলি সম্পাদনা করুন এবং যুক্ত ssh-
করুন ssh-
:
command="echo 'This account can only be used for [reason]'",no-agent-forwarding,no-X11-forwarding,permitopen="localhost:62222"
যাচাই করুন
এটি প্রত্যাশা মতো কাজ করে তা নিশ্চিত হওয়ার জন্য কয়েকটি পরীক্ষার কেস চালানো দরকার। নীচের কমান্ডগুলিতে, host
যদি এটি সেট না করা থাকে তবে প্রকৃত লগইন দ্বারা প্রতিস্থাপন করা উচিত ~/.ssh/config
। কমান্ডের পিছনে, একটি কমান্ড প্রদর্শিত হয় যা ক্লায়েন্ট বা সার্ভারে নির্ধারিত হওয়া উচিত (নির্দিষ্ট হিসাবে)।
# connection closed:
ssh host
# connection closed (/bin/date is not executed):
ssh host /bin/date
# administratively prohibited (2x):
ssh host -N -D 62222 # client: curl -I --socks5 localhost:62222 example.com
ssh host -N -L 8080:example.com:80 # client: curl -I localhost:8080
sftp host
# should be possible because the client should forward his SSH server
ssh host -N -R 8080:example.com:80 # server: curl -I localhost:8080
# This works, it forwards the client SSH to the server
ssh host -N -R 62222:localhost:22
# unfortunately, the client can listen on that port too. Not a big issue
ssh host -N -L 1234:localhost:62222
উপসংহার
চেকলিস্ট: এসএসএইচ ব্যবহারকারীর পক্ষে এটি করা উচিত নয়:
- শেল কমান্ড এক্সিকিউট - সম্পন্ন
- ফাইল অ্যাক্সেস করুন বা সার্ভারে ফাইলগুলি আপলোড করুন - সম্পন্ন হয়েছে
- প্রক্সি হিসাবে সার্ভারটি ব্যবহার করুন (যেমন ওয়েবপ্রক্সি) - সম্পন্ন
- স্থানীয় পরিষেবাগুলিতে অ্যাক্সেস করুন যা অন্যথায় ফায়ারওয়ালের কারণে সর্বজনীনভাবে অ্যাক্সেসযোগ্য ছিল না - আংশিকভাবে , ক্লায়েন্ট 62222 এর চেয়ে অন্য পোর্টগুলিতে অ্যাক্সেস করতে পারে না, তবে সার্ভারে 62222 পোর্টটি শুনতে এবং সংযোগ করতে পারে
- সার্ভারটি মেরে ফেলুন - সম্পন্ন করুন
(নোট করুন যে এই চেকগুলি এসএসএইচ সার্ভারের মধ্যেই সীমাবদ্ধ।