ব্যবহারকারীকে একটি এসএসএইচ টানেল সেট আপ করার অনুমতি দিন, তবে অন্য কিছু নয়


98

আমি কোনও ব্যবহারকারীকে একটি বিশেষ বন্দরে একটি বিশেষ মেশিনে এসএসএইচ টানেল সেট করার অনুমতি দিতে চাই (বলুন, 5000) তবে আমি এই ব্যবহারকারীর যথাসম্ভব সীমাবদ্ধ রাখতে চাই। (প্রমাণীকরণ পাবলিক / ব্যক্তিগত কীপায়ারের সাথে থাকবে)।

আমি জানি যে প্রাসঙ্গিক ~ / .ssh / अधिकृत_keys ফাইলটি সম্পাদনা করতে হবে, তবে সেখানে ঠিক কী কী বিষয়বস্তু রাখা উচিত তা আমি নিশ্চিত নই (পাবলিক কী ব্যতীত)।

উত্তর:


92

উবুন্টু ১১.১০-তে, আমি পোর্ট ফরোয়ার্ডিংয়ের মধ্য দিয়ে যেতে পারার সময় আমি খুঁজে পেয়েছিলাম যে আমি এসএসএস কমান্ডগুলি ব্লক করতে পারি, -T এর সাথে এবং ছাড়াই প্রেরণ করেছি এবং স্কিপ কপিটি ব্লক করতে পারি।

বিশেষত আমার "হিমোস্ট" -র লোকালহোস্টের কাছে আবদ্ধ একটি পুনরায় সার্ভার রয়েছে: 79৩79৯ যে আমি এসএসএস টানেলের মাধ্যমে নিরাপদে ভাগ করে নিতে চাই অন্য হোস্টগুলিতে যা একটি কীফাইল রয়েছে এবং এর সাথে এসএসএস করব:

$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost

এটি redis-সার্ভারের ফলে, "লোকালহোস্ট" পোর্ট 6379 "সোহেম" পোর্টটি স্থানীয়ভাবে উপস্থিত হবে হোস্টে ssh কমান্ড কার্যকর করার জন্য, "লোকালহোস্ট" পোর্ট 16329 এ পুনরায় সেট করা হবে।

রিমোট "সামহোস্ট" এ আমি অনুমোদিত_কিজের জন্য যা ব্যবহার করেছি তা এখানে:

cat .ssh/authorized_keys   (portions redacted)

no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here keyuser@keyhost

কোনও- pty বেশিরভাগ ssh প্রচেষ্টা ট্রিপ করে যা কোনও টার্মিনাল খুলতে চায়।

পারমিটোপেন ব্যাখ্যা করে যে কোন বন্দরগুলি ফরোয়ার্ড করার অনুমতি দেওয়া হয়েছে, এই ক্ষেত্রে বন্দরে 79৩79৯ রেডিস-সার্ভার পোর্টটি আমি ফরোয়ার্ড করতে চেয়েছিলাম।

কমান্ড = "/ বিন / ইকো-না-প্রেরণ-আদেশগুলি" প্রতিধ্বনিত করে "ডু-না-প্রেরণ-কমান্ডগুলি" প্রতিস্থাপন করে যদি কেউ বা কিছু হোস্টকে ssh -T এর মাধ্যমে কমান্ড প্রেরণ করতে পরিচালিত করে বা অন্যথায়।

সাম্প্রতিক উবুন্টু থেকে man sshd, অনুমোদিত_কিজ / কমান্ডটি নিম্নরূপ বর্ণিত হয়েছে:

কমান্ড = "কমান্ড" সুনির্দিষ্ট করে যে যখনই এই কীটি প্রমাণীকরণের জন্য ব্যবহৃত হয় তখনই আদেশটি কার্যকর করা হয়। ব্যবহারকারী দ্বারা সরবরাহিত কমান্ড (যদি থাকে) উপেক্ষা করা হয়।

Scp সুরক্ষিত ফাইল অনুলিপি ব্যবহারের চেষ্টাগুলি "do-not-send-কম্যান্ডস" এর প্রতিধ্বনির সাথে ব্যর্থ হবে যা আমি খুঁজে পেয়েছি sftp এই কনফিগারেশনে ব্যর্থও হয়েছে।

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


4
যদিও no-ptyইন্টারেক্টিভ সিওশন খোলার অনুমতি দেয় না এটি কমান্ড প্রয়োগ কার্যকর করতে বাধা দেয় না, তাই ব্যবহারকারীর authorized_keysযদি এমন কিছু দিয়ে অ্যাক্সেস থাকে তবে ফাইলটি সম্পাদনা করতে পারবেন ssh server 'sed -i -e s/no-pty// ~/.ssh/authorized_keys'
synapse

4
@ সাইনাপস কমান্ড = "/ বিন / প্রতিধ্বনি-না-প্রেরণ-কমান্ড", এছাড়াও উপরে তালিকাভুক্ত, আদেশগুলি অবরুদ্ধ করার উদ্দেশ্যে করা হয়েছে। এবং একটি বার্তা প্রদান। উপরের পুরো সেটিংসকে পরাভূত করার জন্য আপনি কি নিজের উদাহরণটি রেখেছিলেন বা আপনি কেবল নো-পিটিআই-তে মন্তব্য করছেন?
পল

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

?? @ ড্যানফ্যারেল কি এসএসএস / অনুমোদিত_কিজের মালিক হবে মূলের, বা চক্রের মালিকানাধীন, বা কার?
অ্যান্ড্রু ওল্ফ

@AndrewWolfe সাধারণত ~user/.ssh/authorized_keysমালিকানাধীন হবে user, এবং userঅ্যাকাউন্ট অ্যাক্সেস করার জন্য ব্যবহৃত অনুমোদিত কী না যায়। ' এসএসএইচ অনুমতি সম্পর্কে বাছাই এবং এটি ~/.ssh/এবং এর বিষয়বস্তু উপর প্রত্যাশা আরোপ করতে পারে । আমি একটি করেছি sudo chown root: .ssh/authorized_keysএবং দেখে মনে হচ্ছে এটি আমাকে লগ ইন করা থেকে বিরত রেখেছে, কিন্তু আমি পূর্বের অভিজ্ঞতা থেকে জানি যে ব্যবহারকারীকে সেই ফাইলটির মালিকানা নেই - rootআপনি পছন্দ করতে চাইলে এটি পরিচালনা করতে পারে।
ড্যানিয়েল Farrell

18

আপনি সম্ভবত ব্যবহারকারীর শেলটি সীমিত শেলটিতে সেট করতে চাইবেন । ব্যবহারকারীর ~ / .bashrc বা ~ / .bash_profile এ PATH ভেরিয়েবল আনসেট করুন এবং তারা কোনও কমান্ড কার্যকর করতে সক্ষম হবে না। পরবর্তীতে, আপনি যদি সিদ্ধান্ত নেন যে আপনি ব্যবহারকারী (গুলি) এর মতো সীমানা কমান্ডের মতো সেটগুলি চালানোর অনুমতি দিতে চান, যেমন lessবা tailউদাহরণস্বরূপ, তবে আপনি অনুমতিপ্রাপ্ত কমান্ডগুলিকে একটি পৃথক ডিরেক্টরিতে (যেমন /home/restricted-commands) অনুলিপি করতে পারেন এবং PATH আপডেট করার জন্য নির্দেশ করতে পারেন ডিরেক্টরি


4
তবে এটি ব্যবহারকারীকে ssh কমান্ড লাইনে একটি আলাদা কমান্ড নির্দিষ্ট করতে বাধা দেয় না, যেমন ssh use@host "/bin/bash"?
ফ্রিটজ

হ্যাঁ, এটি user@hostশেল হিসাবে rbash রয়েছে বলে ধরে নিচ্ছে। দেখুন বিধিনিষেধযুক্ত শেল
জেসন দিবস

ঠিক আছে, আমি চেষ্টা করেছিলাম এবং আপনি ঠিক বলেছেন। যেহেতু সুনির্দিষ্ট কমান্ডটি লগইন শেল দ্বারা সম্পাদন করা /bin/bashহয় , কার্যকর করা ব্যর্থ হয় কারণ এতে স্ল্যাশ রয়েছে।
ফ্রিটজ

4
যদিও এটি বলা উচিত যে lessমঞ্জুরি দেওয়া সম্ভবত একটি খারাপ ধারণা, কারণ সেখান থেকে আপনি একটি অনিরাপত্ত শেল থেকে পালাতে পারেন !/bin/bash। অন্যান্য উদাহরণের জন্য pen-testing.sans.org/blog/2012/06/06/… দেখুন । সুতরাং স্বতন্ত্র কমান্ডগুলির অনুমতি দেওয়া খুব, খুব সাবধানে করা উচিত, যদি তা না হয়।
ফ্রিটজ

17

নো-এক্স 11-ফরোয়ার্ডিংয়ের মতো অনুমোদিত_কি কী বিকল্প ছাড়াও আসলে আপনি যা বলছেন ঠিক তেমন একটি রয়েছে: পারমিটোপেন = "হোস্ট: পোর্ট"। এই বিকল্পটি ব্যবহার করে, ব্যবহারকারী কেবলমাত্র নির্দিষ্ট হোস্ট এবং পোর্টে একটি সুড়ঙ্গ স্থাপন করতে পারে।

AUTHORIZED_KEYS ফাইল ফর্ম্যাট বিশদের জন্য man sshd দেখুন।


13
বিকল্প সেটের অংশ হিসাবে আপনাকে "নো-পিটিআই" নির্দিষ্ট করতে হবে। আপনি যদি কেবল "পারমিটোপেন" ব্যবহার করেন তবে আপনি প্রদত্ত হোস্ট / বন্দরে টানেলগুলি সীমাবদ্ধ রাখবেন ... তবে আপনি এখনও ইন্টারেক্টিভ শেলগুলি অনুমতি দেবেন।
জন হার্ট

পার্মিটোপেন দিয়ে পোর্ট ফরওয়ার্ডিং সীমাবদ্ধ করা কীভাবে এসএসএস-ডাবলুতে অনুরোধ করা টানেল ডিভাইস ফরোয়ার্ডিংয়ের মতো লক ডাউন করে?
ফ্লাবডব্লেট

4
@ জোহান হার্ট: no-ptyশেল অ্যাক্সেসকে বাধা দেয় না, আপনি এখনও শেলটি পাবেন, এটি আপনাকে প্রম্পটটি প্রদর্শন করবে না; আপনি এখনও কমান্ড দিতে পারেন এবং আউটপুটটি ঠিকঠাক দেখতে পারেন। আপনি command="..."যদি শেল অ্যাক্সেসটি সীমাবদ্ধ করতে চান তবে আপনার বিকল্পটি দরকার .ssh/authorized_keys
আলেক্সি তোড়হামো

9

আমার সমাধান, ব্যবহারকারী যারা শুধুমাত্র টানেলিং হতে পারে প্রদান করা হয় একটি ইন্টারেক্টিভ শেল ছাড়া , যে শেল সেট করতে / etc / passwd করতে , / usr / বিন / tunnel_shell

কেবল অসীম লুপের সাথে এক্সিকিউটেবল ফাইল / usr / বিন / টানেল_শেল তৈরি করুন ।

#!/bin/bash
trap '' 2 20 24
clear
echo -e "\r\n\033[32mSSH tunnel started, shell disabled by the system administrator\r\n"
while [ true ] ; do
sleep 1000
done
exit 0

সম্পূর্ণরূপে এখানে ব্যাখ্যা করা হয়েছে: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no- Shell-p कृपया/


9
সিটিআরএল + জেড স্ক্রিপ্ট থেকে আপনাকে
বাশকে

4
ইঙ্গিতটি জন্য ধন্যবাদ, আমি কিছু বিঘ্ন সংকেত ফাঁদে আটকান যোগ
ড্যানিয়েল ডব্লিউ

4
আমি কেবল "শেল" এর জন্য / বিন / বিড়াল ব্যবহার করি। ঠিকঠাক কাজ মনে হচ্ছে। বিড়ালের বিরুদ্ধে কোনও শোষণ সম্পর্কে অবহিত নয় এবং এমনকি যদি আপনি এমন কোনও ইনপুট প্যাটার্নও পেয়েছিলেন যা এটি ক্র্যাশ করে পরিচালনা করে তবে আপনার এসএসএস সেশনটি সবেমাত্র শেষ হবে।
ফ্লাবড্যাবলেট

4
@ বিগপাপু: আপনি কি আসলে এটি পরীক্ষা করেছেন? এটি কোথায় পালাতে পারে তা আমি দেখতে পাচ্ছি না। আপনি যদি খোলের মধ্যে থাকেন এবং আপনি চালনা করেন তবে tunnel_shellআপনার হবেshell -> /bin/bash tunnel_shell অবশ্যই শেলটি থেকে পালাতে পারে তবে আপনি যদি ব্যবহারকারীর শেল tunnel_shell হিসাবে সেট করেন তবে আপনার কেবল /bin/bash tunnel_shellচালানো থাকবে, এতে কোনও শেল ছাড়ার দরকার নেই , যতটা আমি দেখতে পারেন. আমি এটি পরীক্ষা করেছি এবং ctrl-z দিয়ে পালাতে পারিনি। আপনি যদি এটি চেষ্টা করে থাকেন এবং পালাতে পারেন, আপনি কি সেটআপটি পোস্ট করতে পারেন? তেমনি, আপনি যদি এমন কোনও ডকুমেন্টেশন জানেন যা বলে যে এটির মতো কাজ করা উচিত, আপনি কি এটি পোস্ট করতে পারেন?
আলেকসি তোড়হামো

3

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

no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding

আপনি নিজের অনুমোদিত_ কি ফাইলগুলিতে এমন একটি লাইন চান যা দেখতে দেখতে চাই।

permitopen="host.domain.tld:443",no-pty,no-agent-forwarding,no-X11-forwardi
ng,command="/bin/noshell.sh" ssh-rsa AAAAB3NzaC.......wCUw== zoredache 

3

যদি আপনি কেবল একটি নির্দিষ্ট কমান্ড - এসএনএন-এর জন্য অ্যাক্সেসের অনুমতি দিতে চান তবে আপনি অনুমোদিত কীগুলিতে এই আদেশটি নির্দিষ্ট করতে পারেন:

command="svnserve -t",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding [KEY TYPE] [KEY] [KEY COMMENT]

Http://svn.apache.org/repos/asf/subversion/trunk/notes/ssh- কৌশলগুলি থেকে


3

এখানে আপনার একটি দুর্দান্ত পোস্ট রয়েছে যা আমি দরকারী বলে মনে করেছি: http://www.ab-weblog.com/en/creating-a-restricted-ssh-user-for-ssh-tunneling-only/

ধারণাটি হ'ল: ("স্শটুনেল" হিসাবে নতুন বিধিনিষেধযুক্ত ব্যবহারকারীর নাম সহ)

useradd sshtunnel -m -d /home/sshtunnel -s /bin/rbash
passwd sshtunnel

নোট করুন যে আমরা ব্যবহারকারী কী করতে পারে তা সীমাবদ্ধ করতে আমরা rbash (সীমাবদ্ধ-ব্যাশ) ব্যবহার করি: ব্যবহারকারী সিডি করতে পারবেন না (ডিরেক্টরি পরিবর্তন করুন) এবং কোনও পরিবেশের ভেরিয়েবল সেট করতে পারবেন না।

তারপরে আমরা ব্যবহারকারীর PATH env ভেরিয়েবলকে /home/sshtunnel/.profileকিছুতেই সম্পাদনা করি - এমন কৌশল যা বাশকে কার্যকর করতে কোনও আদেশের সন্ধান করতে পারে না:

PATH=""

অবশেষে আমরা ব্যবহারকারীকে নিম্নলিখিত অনুমতিগুলি সেট করে কোনও ফাইল সম্পাদনা করতে অস্বীকার করি:

chmod 555 /home/sshtunnel/
cd /home/sshtunnel/
chmod 444 .bash_logout .bashrc .profile

0

আমি একটি সি প্রোগ্রাম তৈরি করেছিলাম যা দেখতে এরকম দেখাচ্ছে:

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
void sig_handler(int signo)
{
    if (signo == SIGHUP)
        exit(0);
}

int main()
{
    signal(SIGINT, &sig_handler);
    signal(SIGTSTP, &sig_handler);

    printf("OK\n");
    while(1)
        sleep(1);
    exit(0);
}

আমি এই প্রোগ্রামটিতে সীমাবদ্ধ ব্যবহারকারীর শেল সেট করেছি।

আমি মনে করি না যে সীমাবদ্ধ ব্যবহারকারীর দ্বারা কিছু করা সত্ত্বেও তারা কিছু ssh server commandসম্পাদন করতে পারে কারণ শেল ব্যবহার করে আদেশগুলি কার্যকর করা হয় এবং এই শেলটি কিছু কার্যকর করে না।



-3

তারা যে কোনও ssh ক্লায়েন্ট ব্যবহার করছে তার মাধ্যমে আপনি ব্যবহারকারী মেশিনে একটি কী তৈরি করবেন। উদাহরণস্বরূপ pUTTY এই সঠিক জিনিস করতে একটি ইউটিলিটি আছে। এটি একটি প্রাইভেট এবং পাবলিক উভয় কী উত্পন্ন করবে।

উত্সাহিত পাবলিক কী ফাইলের বিষয়বস্তুগুলি অনুমোদিত_কাইজ ফাইলগুলিতে স্থাপন করা হবে।

এর পরে আপনাকে নিশ্চিত করতে হবে যে সর্বজনীন কী উত্পন্ন করে এমন প্রাইভেট কীটি ব্যবহার করতে ssh ক্লায়েন্টটি কনফিগার করা আছে। এটি মোটামুটি সোজা এগিয়ে, তবে ক্লায়েন্ট ব্যবহৃত হচ্ছে তার উপর নির্ভর করে কিছুটা আলাদা।

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