อนุญาต SFTP แต่ไม่อนุญาต SSH หรือไม่


94

ฉันเริ่มต้นเป็น บริษัท โฮสติ้งเล็ก ๆ สำหรับเพื่อนสนิทและลูกค้ารายย่อย

ฉันต้องการให้สิทธิ์แก่ "ลูกค้า" ในการจัดการไฟล์ของพวกเขาบนเซิร์ฟเวอร์ ฉันเกลียด FTP เนื่องจากไม่ปลอดภัยและอยู่ในความคิดของฉันล้าสมัย

ดังนั้นฉันต้องการอนุญาตให้ผู้ใช้ของฉันเชื่อมต่อผ่าน SFTP แต่ไม่อนุญาตให้พวกเขาเชื่อมต่อผ่าน SSH (ฉันรู้ว่าฉันรู้ SFTP ใช้ SSH) แต่ฉันแค่สงสัยว่ามันเป็นไปได้หรือไม่

ดังนั้นฉันไม่ต้องติดตั้งบริการ FTP บนเซิร์ฟเวอร์และทุกอย่างจะยอดเยี่ยม!

คำตอบ:


121

เริ่มต้นด้วยรุ่น 4.9 OpenSSH (ไม่มีใน centos 5.x แต่ฟีเจอร์ ChrootDirectory ได้รับการ backported) มีinternal-sftpระบบย่อย:

Subsystem sftp internal-sftp

แล้วบล็อกการใช้งานอื่น ๆ :

Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

เพิ่มผู้ใช้ของคุณในsftponlyกลุ่ม คุณมีการเปลี่ยนแปลง homedirectory ของผู้ใช้เพื่อ/เพราะ chroot และควรจะเป็นเจ้าของโดย/home/user rootฉันจะตั้ง/bin/falseเป็นเปลือกของผู้ใช้


ว้าว! Super-น่ากลัว! ฉันจะทดสอบสิ่งนี้และกลับมาที่นี่เพื่อตรวจสอบความถูกต้อง ขอบคุณมาก!
Tommy B.

+1 สำหรับสิ่งที่ ChrootDirectory!
Kyle Hodgson

1
หลังจากทำสิ่งนี้ผู้ใช้ sftponly ของฉันไม่สามารถเข้าถึงโดย ssh และสามารถเชื่อมต่อด้วย sftp อย่างไรก็ตามมันไม่สามารถเห็นไฟล์ใด ๆ เลย! ทั้งๆที่ไฟล์เหล่านี้มีสิทธิ์สำหรับผู้ใช้รายนี้ :-(
Emilio Nicolás

3
ในกรณีที่คุณต้องการทำสิ่งนี้และค้นหารายการใน sshd_config ของคุณด้วย "/ usr / lib / openssh / sftp-server" ที่มีอยู่แล้วตรวจสอบที่นี่: serverfault.com/questions/660160/… - internal-sftp คือ "ใหม่กว่า ดีกว่าและง่ายกว่า "
Xosofox

19

มีเชลล์ตัวหนึ่งทำหน้าที่นี้ มันสามารถchrootเกินไป


สิ่งนี้จะเป็นสิ่งที่ดีหากคุณต้องการทั้งผู้ใช้ SFTP และผู้ใช้ SSH คุณเพียงแค่แทนที่เชลล์ใน / etc / passwd สำหรับผู้ที่ถูก จำกัด เพียง SFTP
Dragos

4

Checkout rssh ซึ่งเป็นเชลล์ปลอมที่อนุญาตให้ใช้ sftp แต่ปฏิเสธ ssh

เพิ่มเติมเกี่ยวกับ RSSH

http://www.pizzashack.org/rssh/

RPMs

http://pkgs.repoforge.org/rssh/

คุณสามารถกำหนดค่า rssh เพื่ออนุญาต / ปฏิเสธพฤติกรรมที่แตกต่างเช่น sft, scp เป็นต้น


ดี นี่เป็นวิธีที่ง่ายที่สุดในการกำหนดค่าโดยไม่ต้องแตะ sshd_config เลย เพียงแค่เปลี่ยนเปลือกในไฟล์ passwd และทำ
Tomofumi

2

คุณสามารถแก้ไข / etc / passwd และให้เชลล์แก่ผู้ใช้นั้นเพื่อให้เขาไม่สามารถใช้ ssh ได้


11
คุณทดสอบสิ่งนี้หรือไม่?
splattne

8
เมื่อฉันลองตั้งค่า shell เป็น/bin/falsessh หรือ sftp ทำงานไม่ได้
Brad Mace

2
/ bin / false คือการไม่อนุญาตการเข้าสู่ระบบทุกประเภทซึ่งไม่ใช่วิธีการที่ถูกต้องที่นี่ คำตอบที่ได้รับการยอมรับจาก Rob Wouters คือวิธีที่คุณควร จำกัด ผู้ใช้เป็น SFTP เท่านั้นไม่ใช่โดยการเปลี่ยนเชลล์ หากคุณต้องการเปลี่ยนแอสเวิร์สของเชลล์ @ Stone จะเป็นความคิดที่ดี
jwbensley

1
ดังนั้นควรใช้เชลล์อะไรสมมติว่า / bin / bash ไม่ยอมรับและ / bin / false หรือ / sbin / nologin ปฏิเสธการเข้าถึง
Putnik

1

ฉันใช้วิธีการระบุเชลล์ผู้ใช้เป็น / bin / false ดังกล่าว อย่างไรก็ตามคุณต้องมั่นใจว่า / bin / shell อยู่ใน / etc / shells จากนั้นก็ใช้งานได้ ssh = no ftp = ok

ฉันยังใช้ vsftpd และเพิ่ม
chroot_local_user = YES นี้เพื่อ/etc/vsftpd/vsftpd.conf เพื่อให้ ftp-ers ไม่สามารถเห็นวันอื่น ๆ ได้ด้วยตนเอง

ข้อดีของการเปลี่ยนแปลงง่ายๆคือไม่มีการกำหนดค่าที่น่ารำคาญสำหรับการกำหนดค่า ssh สำหรับผู้ใช้แต่ละคน


1

อย่าลืมที่จะหาบรรทัดUsePAM yesและแสดงความคิดเห็น:

#UsePAM yes

หากไม่มีการปิดใช้งานสิ่งนี้เซิร์ฟเวอร์ SSH ของคุณจะผิดพลาดในการโหลด / รีสตาร์ท เนื่องจากคุณไม่ต้องการฟังก์ชั่นแฟนซีของ PAM นี่เป็นเรื่องปกติ


0

การกำหนดค่า SSH เพื่อเปิดใช้งานเพียง SFTP สำหรับผู้ใช้ที่เลือกบางส่วนเป็นความคิดที่ดีและทำงานอย่างถูกต้องโดยที่คุณที่คุณติดตั้งอย่างใดอย่างหนึ่งหรือscponlyrssh

rsshใช้งานได้ดีเว้นแต่คุณจะต้องกำหนดค่าคุกในกรณีนี้ลองทำตามคำแนะนำของคู่มือ CHROOT ซึ่งนำไปสู่การ "คัดลอก" ส่วนใหญ่ของระบบปฏิบัติการและไลบรารีด้านล่าง "คุกผู้ใช้แต่ละคน" รวมถึงrsshเชลล์เอง มันเป็นวิธีการเสียพื้นที่

scponly จำเป็นต้องมีความเข้าใจอย่างลึกซึ้งในการกำหนดค่าที่นำไปสู่ปัญหาในปัจจุบันของการปฏิเสธการเข้าสู่ระบบในกรณีของการติดตั้งคุก

วิธีที่ตรงไปตรงมาเพื่อให้ฟังก์ชั่น "ftp" กับคุกทำงานอย่างถูกต้องรองรับ SSL / TLS สำหรับการทำธุรกรรมที่ปลอดภัยและการเข้าสู่ระบบคือการใช้ VSFTPD "เก่า - แต่ - ทำงาน" ซึ่งติดตั้งได้อย่างรวดเร็วและหมดจด แต่ไม่ท้ายสุดมันใช้งานได้!

Maurizio


0

คำตอบทั้งหมดทำให้เข้าใจผิดอย่างมากโชคไม่ดี: โปรดทำสิ่งต่อไปนี้:

  1. ขั้นแรกให้สร้างผู้ใช้ sftp และกลุ่ม sftp

  2. สร้างไดเรกทอรีแยกเป็น root สำหรับไฟล์ SFTP: sudo mkdir -p /home/sftpdir

  3. มีไฟล์ sshd_config ทดสอบที่อนุญาตให้ SSH ผ่านพอร์ต 22 แต่ยัง SFTP บนพอร์ตสุ่มด้วยเหตุผลด้านความปลอดภัย
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. รีสตาร์ทและตรวจสอบสถานะของบริการ sshd

    บริการ sudo รีสตาร์ท sshd

    สถานะบริการ sshd

  2. สร้างไฟล์เชลล์ เพิ่มการดำเนินการเพื่อสะท้อนข้อความแจ้งเตือน

    sudo touch / bin / sftponly echo -e '#! / bin / sh \ necho "บัญชีนี้ถูก จำกัด การเข้าถึง SFTP เท่านั้น"' | sudo tee -a / bin / sftponly

  3. ให้สิทธิ์การดำเนินการและผนวกเข้ากับไฟล์ shells

    sudo chmod a + x / bin / sftponly echo "/ bin / sftponly" | sudo tee -a / etc / shells

  4. ในที่สุดการทดสอบและคุณไม่ควรเชื่อมต่อได้

  5. เทมเพลตที่ใช้ไคลเอนต์ SFTP ด้วยคีย์ SSH และ verbosity พื้นฐาน:

    sftp -v -oPort = $ RANDOM_PORT -i ~ / .ssh / $ SSH_KEY.pem sftpuser @ $ HOST

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.