تسمح للمستخدم لإنشاء نفق SSH, ولكن لا شيء آخر

StackOverflow https://stackoverflow.com/questions/8021

  •  08-06-2019
  •  | 
  •  

سؤال

أود أن تتيح للمستخدم انشاء نفق SSH إلى جهاز معين على منفذ معين (مثلا ، 5000) ، ولكن أريد أن تقييد هذا المستخدم قدر الإمكان.(مصادقة سوف يكون مع القطاعين العام والخاص keypair).

وأنا أعلم أنني بحاجة إلى تحرير ذات الصلة ~/.ssh/authorized_keys الملف, ولكن لست متأكدا بالضبط ما المحتوى وضعت في هناك (عدا المفتاح العام).

هل كانت مفيدة؟

المحلول

على أوبونتو 11.10, وجدت أنني يمكن أن كتلة ssh الأوامر المرسلة مع و دون ر ، و كتلة scp النسخ ، بينما يسمح ميناء الشحن من خلال الذهاب.

على وجه التحديد لدي رديس-server على "somehost" لا بد أن localhost:6379 أود أن حصة آمن عبر ssh الأنفاق إلى أخرى يستضيف أن يكون المفتاح و سوف ssh مع:

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

هذا سوف يسبب رديس-الملقم "المضيف المحلي" ميناء 6379 على "somehost" تظهر محليا على المضيف تنفيذ الأوامر ssh, إعادة تعيين إلى "localhost" ميناء 16379.

على جهاز التحكم عن بعد "somehost" هنا هو ما كنت تستخدم authorized_keys:

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 المحاولات التي تريد فتح المعبر.

على permitopen يفسر ما المنافذ يجوز توجيهها في هذه الحالة ميناء 6379 رديس-منفذ خادم أردت إلى الأمام.

Command="/بن/صدى عدم إرسال الأوامر" الصدى "عدم إرسال الأوامر" إذا كان شخص ما أو شيء ما لا يتمكنون من إرسال الأوامر إلى المضيف عن طريق ssh -T أو غير ذلك.

من حديث أوبونتو man sshd, authorized_keys / الأمر هو على النحو التالي:

command="القيادة" ينص على أن يتم تنفيذ الأمر كلما يتم استخدام هذا المفتاح من أجل المصادقة.الأمر توفيره من قبل المستخدم (إذا وجدت) تجاهلها.

محاولات استخدام scp تأمين نسخ الملف سوف تفشل أيضا مع صدى "عدم إرسال الأوامر" لقد وجدت sftp فشل أيضا مع هذا التكوين.

أعتقد المقيدة قذيفة على الاقتراح الذي قدمه في بعض الأجوبة السابقة ، هو أيضا فكرة جيدة.كما أود أن نتفق على أن كل مفصل هنا يمكن تحديد من القراءة "رجل sshd" والبحث فيه عن "authorized_keys"

نصائح أخرى

ربما كنت سوف ترغب في تعيين المستخدم إلى شل المقيدة قذيفة.تعيين المتغير المستخدم في ~/.bashrc أو ~/.bash_profile ، وأنها لن تكون قادرة على تنفيذ أي أوامر.في وقت لاحق إذا كنت ترغب في السماح المستخدم(s) لتنفيذ مجموعة محدودة من الأوامر مثل less أو tail على سبيل المثال, ثم يمكنك نسخ يسمح الأوامر إلى دليل منفصل (مثل /home/restricted-commands) و تحديث مسار للإشارة إلى هذا الدليل.

إلى جانب authorized_keys الخيار لا-X11-إعادة توجيه المكالمات, هناك في الواقع هو واحد بالضبط كنت طالبا:permitopen="host:port".باستخدام هذا الخيار ، يمكن للمستخدم فقط انشاء نفق إلى المضيف المحدد و الميناء.

عن تفاصيل AUTHORIZED_KEYS تنسيق الملف تشير إلى رجل sshd.

الحل هو تزويد المستخدم الذي قد يكون النفقي ، دون تفاعلية قذيفة, إلى مجموعة شل في /etc/passwd إلى /usr/bin/tunnel_shell.

مجرد إنشاء الملف القابل للتنفيذ /usr/bin/tunnel_shell مع حلقة لانهائية.

#!/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-please/

أنا قادرة على إعداد authorized_keys الملف مع الجمهور مفتاح تسجيل في.ما أنا غير متأكد حول معلومات إضافية أحتاج إلى تقييد ما هذا الحساب هو مسموح به.على سبيل المثال, أعرف أنني أستطيع أن وضع الأوامر مثل:

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

كنت تريد خط في authorized_keys الملف الذي يبدو مثل هذا.

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

إذا كنت تريد أن تفعل تسمح بالوصول فقط من أجل أمر معين-مثل svn-يمكنك أيضا تحديد هذا الأمر في أذن مفاتيح الملف:

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-tricks

هنا لديك لطيفة بعد أن وجدت المفيدة:http://www.ab-weblog.com/en/creating-a-restricted-ssh-user-for-ssh-tunneling-only/

الفكرة هي:(مع تقييد اسم المستخدم "sshtunnel")

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

علما بأن نستخدم rbash (مقيد باش) تقييد ما يمكن للمستخدم القيام به:لا يمكن للمستخدم cd (تغيير الدليل) و لا يمكن تعيين أي متغيرات البيئة.

ثم أننا تعديل مسار المستخدم env متغير في /home/sshtunnel/.profile أن لا شيء - خدعة من شأنها أن تجعل باش العثور على أي أوامر تنفيذ:

PATH=""

واخيرا عدم السماح للمستخدم تعديل أي ملفات عن طريق تعيين الأذونات التالية:

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

لقد صنعت برنامج C والتي تبدو مثل هذا:

#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, لأن الأوامر يتم تنفيذها باستخدام قذيفة ، وهذا قذيفة لا يتم تنفيذ أي شيء.

انظر هذا المنصب على مصادقة المفاتيح العامة.

اثنين من أهم الأشياء التي تحتاج إلى تذكر هي:

  1. تأكد chmod 700 ~/.ssh
  2. إلحاق المفتاح العمومي كتلة أذن-مفاتيح

سوف إنشاء مفتاح على مستخدمي الجهاز عبر مهما عميل ssh الذي تستخدمه.المعجون على سبيل المثال لديه فائدة أن تفعل هذا الشيء بالضبط.فإنه سيتم توليد كلا العامة والخاصة الرئيسية.

محتويات ملف المفتاح العام ولدت سيتم وضعها في authorized_keys الملف.

القادمة التي تحتاج إلى تأكد من أن ssh تكوين العميل لاستخدام المفتاح الخاص الذي ولدت المفتاح العام.إنها إلى حد ما على التوالي إلى الأمام ، ولكن مختلفة قليلا اعتمادا على العميل استخدامها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top