প্রশ্ন 1
আমার প্রশ্ন হ'ল আমি কীভাবে উত্সাহিত পাবলিক কীতে কেবল এই এসএফটিপি স্থানান্তরের কমান্ডকে সীমাবদ্ধ করব?
এটি করার জন্য 2 টি পদ্ধতি রয়েছে।
1. - sshd- এর মাধ্যমে সীমাবদ্ধ
এই পদ্ধতিতে আপনার এসএসএইচ ডেমন এর মধ্যে এসএফটিপি বৈশিষ্ট্য সেট আপ করা জড়িত sshd। এটি /etc/ssh/sshd_configকনফিগারেশন ফাইলের মাধ্যমে নিয়ন্ত্রণ করা হয় । দ্রষ্টব্য: এটি backupকেবলমাত্র সার্ভারে এসএফটিপি-র অনুমতি দেওয়ার জন্য ব্যবহারকারীকে সীমাবদ্ধ করবে ।
# /etc/ssh/sshd_config
Subsystem sftp internal-sftp
## You want to put only certain users (i.e users who belongs to sftpusers
## group) in the chroot jail environment. Add the following lines at the end
## of /etc/ssh/sshd_config
Match User backup
ForceCommand internal-sftp
২ - অনুমোদিত_কিজের মাধ্যমে সীমাবদ্ধ
এই পদ্ধতিতে sshd_configফাইলটিতে কোনও পরিবর্তন জড়িত না । আপনি command=ইতিমধ্যে আপনার প্রশ্নে উল্লেখ করেছেন এমন বৈশিষ্ট্যটির মাধ্যমে আপনি একটি ব্যবহারকারী + একটি এসএসএইচ কী একক কমান্ডের মধ্যে সীমাবদ্ধ করতে পারেন । কৌতুকটি আপনাকে কোন আদেশে অন্তর্ভুক্ত করবে। আপনি এই command=লাইনে এসএফটিপি সার্ভারটি রাখতে পারেন , এটি আপনার sshd_configফাইলে এসএফটিপি সার্ভার সেটআপ করার মতোই প্রভাব ফেলবে ।
# User backup's $HOME/.ssh/authorized_keys file
command="/usr/libexec/openssh/sftp-server" ssh-dss AAAAC8ghi9ldw== backup@host
দ্রষ্টব্য: যদি ব্যবহারকারীর লেখার অ্যাক্সেস থাকে তবে ~/.ssh/authorized_keysতারা এটি পড়তে এবং / বা সংশোধন করতে পারে। উদাহরণস্বরূপ, তারা এটি ডাউনলোড করতে, এডিট করতে এবং commmand=...শেল সহ তাকে নিরপেক্ষ কমান্ড অ্যাক্সেসের অনুমতি দিয়ে পুনরায় আপলোড করতে পারে । যদি ব্যবহারকারীর লেখার অ্যাক্সেস থাকে তবে ~/.sshতারা কেবল ফাইলটিকে লিঙ্কমুক্ত এবং পুনরায় তৈরি করতে পারে, বা chmodএটি অ্যাক্সেস লেখার জন্য। অনেকগুলি সম্ভাব্য সমাধান রয়েছে যেমন ~/.ssh/authorized_keysফাইলগুলি অ-ব্যবহারকারী-লেখার যোগ্য জায়গায় রেখে দেওয়া যেমন:
Match Group sftponly
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
প্রশ্ন # 2
এবং যেহেতু আমি একটি গতিশীল আইপি ঠিকানায় আছি, প্রতিবার আমার আইপি পরিবর্তন হওয়ার সাথে সাথে আমি কীভাবে "অনুপস্থিত পরিচিত হোস্ট" সমস্যাটি কাটিয়ে উঠব?
এটি কৌশলযুক্ত তবে ফাইলের from=মধ্যেও বৈশিষ্ট্যটি ব্যবহার করে ডাবল authorized_keys। এখানে আমরা কেবল হোস্ট থেকে অ্যাক্সেস সীমাবদ্ধ করছি somehost.dyndns.org,।
from = "somehost.dyndns.org", কমান্ড = "/ usr / Libxec / openssh / sftp-server", নো-পোর্ট-ফরওয়ার্ডিং, নন-এক্স 11-ফরওয়ার্ডিং, কোনও এজেন্ট-ফরোয়ার্ডিং, নো-পিটিএসআইএসএস-ডিএসএস এএএএসি 8 জিআইডাব্লুডাব্লু == ব্যাকআপ @ হোস্ট
এর পরে অতিরিক্ত সেটিংস command=সমান গুরুত্বপূর্ণ, যেহেতু তারা এসএসএইচ কী ব্যবহার আরও সীমাবদ্ধ রাখবে।
বৈশিষ্ট্যগুলির ভাঙ্গন
from='hostname1,hostname2,'' - নির্দিষ্ট আইপি বা হোস্টনেম নিদর্শনগুলি থেকে অ্যাক্সেসকে সীমাবদ্ধ করে
command='command' - প্রমাণীকরণের পরে নির্দিষ্ট কমান্ড চালায়
no-pty - একটি পিটিআই বরাদ্দ দেয় না (ইন্টারেক্টিভ লগইন অনুমতি দেয় না)
no-port-forwarding - পোর্ট ফরওয়ার্ডিং অনুমতি দেয় না
no-X11-forwarding - ব্যবহারকারী এক্স 11 জিইউআই ডিসপ্লেটি সরাতে পারবেন না
no-agent-forwarding - ব্যবহারকারী এই হোস্টের মাধ্যমে অন্য অভ্যন্তরীণ হোস্টগুলিতে ফরোয়ার্ড করতে পারবেন না
"অনুপস্থিত পরিচিত হোস্টগুলি" সম্পর্কে বার্তাটি পরিত্রাণ পেতে আপনি ক্লায়েন্টের সাথে এটির সংযোগ স্থাপনের সময় এই এসএসএইচ বিকল্পটি যুক্ত করতে পারেন:
$ ssh -o StrictHostKeyChecking=no ....
ssh_configএই স্যুইচ সম্পর্কে পুরো বিশদ জানতে ম্যান পৃষ্ঠাটি দেখুন ।
ব্যবহারকারীর শেল সীমাবদ্ধ
উপরের উভয় সমাধানের জন্য আপনি সম্ভবত ফাইলটিতে backupএই ব্যবহারকারীর শেলও সীমাবদ্ধ রেখে ব্যবহারকারীকে লক করতে চান /etc/passwd। সাধারণত আপনি এটি সেট করতে চাইবেন scponlyতবে এর জন্য অন্যান্য পছন্দও রয়েছে। এটি করার উপায়গুলির জন্য এই U&L প্রশ্নোত্তর শিরোনামটি দেখুন: " এসসিপির জন্য আপনার কি শেল দরকার? "
ব্যবহারের /sbin/nologinযদি আপনার কাছ থেকে chroot বৈশিষ্ট্যটি ব্যবহার করতে নির্বাচন করতে পারেন ব্যবহার করা sshd_configযেমন রূপরেখা # 1 উপরে। তবে আপনি যদি # 2 তে বর্ণিত পদ্ধতিটি ব্যবহার করতে চান, তবে আপনাকে সম্ভবত scponlyব্যবহারকারীর শেলের জন্য বা অন্য কিছু ব্যবহার করতে হবে /etc/passwd।
বোনাস - উপরে # 2 বাড়ানো হচ্ছে
আপনার যদি এই ব্যবহারকারীর জন্য কোনও কমান্ডের সেট প্রকাশ করতে হয় তবে আপনি এটিও করতে পারেন। এর মতো স্ক্রিপ্ট তৈরি করুন /home/backup/commands.sh:
#!/bin/sh
case $SSH_ORIGINAL_COMMAND in
"diskspace")
df -h
;;
"dirlist")
ls -1
;;
"apache_restart")
/etc/init.d/apache restart
;;
*)
echo "Unknown command"
esac
তারপরে আপনি authorized_keysফাইলটি সেটআপ করুন :
command="/bin/sh /home/user/commands.sh" ssh-dss AAAAC8ghi9ldw== user@host
backupব্যবহারকারী তারপর তাই মত এই কমান্ড চালাতে পারেন:
# diskspace
$ ssh -q user@remote_host diskspace
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/dev-root 39G 2.2G 35G 6% /
# dirlist
$ ssh -q remote_host dirlist
commands.sh
dump.sql
তথ্যসূত্র