วิธีการตั้งค่าเซิร์ฟเวอร์ SFTP ที่ถูก จำกัด บน Ubuntu?


81

ฉันต้องการทราบวิธีการตั้งค่าบัญชีผู้ใช้ root, sudo, sftp-only ซึ่งไม่จำเป็นต้องมีการตรวจสอบสิทธิ์กุญแจสาธารณะเมื่อเข้าสู่ระบบฉันต้องการทราบวิธีตั้งค่าโฮมไดเรกทอรีผู้ใช้ sftp เท่านั้น ไม่สามารถเข้าถึงไดเรกทอรีอื่นระดับบน

คำตอบ:


91

ทรัพยากรที่ดีที่สุดที่จะช่วยให้คุณเริ่มต้นการตั้งค่าบริการ SSH บนเครื่องโฮสต์โดยใช้อูบุนตูเป็นOpenSSH เซิร์ฟเวอร์ สิ่งนี้จะช่วยให้คุณใช้SSH File Transfer Protocol (เช่น Secure File Transfer Protocol หรือ SFTP) เพื่อเข้าถึงถ่ายโอนและจัดการไฟล์ผ่าน SSH จากเครื่องไคลเอนต์

ภาพรวมของโซลูชัน

  • บน Ubuntu คุณสามารถตั้งค่าOpenSSH serverบนเครื่องโฮสต์และผู้ใช้สามารถใช้sshเชื่อมต่อจากไคลเอนต์กับเซิร์ฟเวอร์ของโฮสต์โดยใช้ชื่อผู้ใช้และรหัสผ่านเท่านั้น อย่างไรก็ตามขอแนะนำให้ใช้การรับรองความถูกต้องของรหัสสาธารณะ

"ตรวจสอบให้แน่ใจว่าคุณมีรหัสผ่านที่รัดกุมก่อนติดตั้งเซิร์ฟเวอร์ SSH (คุณอาจต้องการปิดการใช้งานรหัสผ่านทั้งหมด )"

  • บัญชีผู้ใช้สำหรับผู้ดูแลระบบที่สร้างขึ้นบนโฮสต์จะมีสิทธิ์ใช้งาน sudo บัญชีผู้ใช้มาตรฐานที่สร้างขึ้นบนโฮสต์จะไม่

ติดตั้งและกำหนดค่าเซิร์ฟเวอร์ OpenSSH ของคุณบนโฮสต์

ในการติดตั้งเซิร์ฟเวอร์ OpenSSH บนโฮสต์:

sudo apt-get install openssh-server

ให้ที่อยู่ IP แบบคงที่กับโฮสต์ของคุณเพื่อให้คุณสามารถเชื่อมต่อได้อย่างเชื่อถือได้:

nm-connection-editor

ในการกำหนดค่าเซิร์ฟเวอร์ OpenSSH ของคุณ "ก่อนอื่นให้ทำการสำรองไฟล์ sshd_config ของคุณโดยการคัดลอกไปยังโฮมไดเร็กตอรี่ของคุณหรือโดยการทำสำเนาแบบอ่านอย่างเดียวใน / etc / ssh โดยทำ:"

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults

"เมื่อคุณสำรองsshd_configไฟล์แล้วคุณสามารถทำการเปลี่ยนแปลงได้ด้วยโปรแกรมแก้ไขข้อความใด ๆ ตัวอย่างเช่น:"

sudo -H gedit /etc/ssh/sshd_config

คุณต้องรีสตาร์ทบริการ ssh บนโฮสต์เพื่อให้การเปลี่ยนแปลงเหล่านี้มีผล

sudo service ssh restart

พิจารณามาตรการรักษาความปลอดภัยต่อไปนี้

  • อย่าเปิดใช้งานการส่งต่อพอร์ตบนเราเตอร์ของคุณ: เมื่อบุคคลภายนอกขอให้เราเตอร์ของคุณเชื่อมต่อกับบุคคลภายนอกกับพอร์ต 22 เป็นต้นเราเตอร์ของคุณจะไม่ปฏิบัติตามเว้นแต่ว่าคุณได้เปิดใช้งานการส่งต่อพอร์ต
  • ปิดการใช้งานเข้าสู่ระบบราก: แสดงความคิดเห็นออกมาPermitRootLogin without-password; เพิ่มPermitRootLogin noไปยังโฮสต์ของ/etc/ssh/sshd_config
  • เลือกพอร์ต SSH ที่ไม่เป็นมาตรฐาน: ใส่ความเห็นPort 22; เพิ่มPort <new-port-number>ไปยังโฮสต์ของ/etc/ssh/sshd_config
  • อนุญาตการเชื่อมต่อท้องถิ่นเท่านั้น: เพิ่ม ListenAddress 192.168.0.10
  • อนุญาตผู้ใช้บางรายในพอร์ตที่แน่นอน: เพิ่มAllowUsers <username>@<IP_address_1> <username>@<IP_address_2>หรือAllowUsers <username>@111.222.333.*ไปยังโฮสต์/etc/ssh/sshd_config
  • อนุญาตให้เฉพาะคีย์ RSA (passwordless) การเชื่อมต่อ: ผนวกเนื้อหาของจากแต่ละไคลเอนต์เป็นบรรทัดใหม่ของโฮสต์~/.ssh/id_rsa.pub ~/.ssh/authorized_keysจากนั้นเพิ่มPasswordAuthentication noไปยังโฮสต์ของ/etc/ssh/sshd_config
  • ความพยายามในการถอดรหัสของผู้โจมตีช้าลง: ใช้ ufw (ไฟร์วอลล์ที่ไม่ซับซ้อน) บน Host เพื่อให้คะแนนการเชื่อมต่อขาเข้าที่ 10 / นาที: sudo apt-get install ufw && sudo ufw limit OpenSSH
  • สำหรับแนวคิดเพิ่มเติมโปรดดูที่การรักษาความปลอดภัยการเข้าถึง SSH

หากคุณรู้สึกว่าคุณต้องเปิดใช้งานPasswordAuthenticationในsshd_configไฟล์ของคุณ

ค้นหาบรรทัดที่มีวลีPasswordAuthenticationและทำให้อ่าน:

PasswordAuthentication yes

บันทึกsshd_configไฟล์ใหม่ของคุณแล้วเริ่มsshบริการของโฮสต์ใหม่:

sudo service ssh restart

หากคุณต้องการเข้าถึงได้จากทุกที่ทางอินเทอร์เน็ตให้ตั้งค่าการส่งต่อพอร์ตบนเราเตอร์ท้องถิ่นของคุณเพื่อรับส่งข้อมูลโดยตรงไปยังเซิร์ฟเวอร์ OpenSSH ของคุณ

หมายเหตุsshบริการของโฮสต์โฮสต์รับฟังในsshd_configไฟล์และตั้งค่าเราเตอร์ของคุณเพื่อส่งต่อการรับส่งข้อมูล TCP / UDP ที่มุ่งไปที่พอร์ตนี้ไปยังที่อยู่ IP ของเซิร์ฟเวอร์ OpenSSH ของคุณ

เชื่อมต่อกับโฮสต์และล็อกอินผ่านทางบรรทัดคำสั่งหรือเทอร์มินัล

  • ในการเปิดเทอร์มินัลเชลล์ SFTP เหมือนกับ<username>โฮสต์ให้เปิดเทอร์มินัลบนไคลเอ็นต์และป้อนคำสั่งต่อไปนี้แทนที่123.123.1.23ด้วยที่อยู่ IP ของโฮสต์:

    sftp <username>@123.123.1.23
    
    • หากคุณเปลี่ยนหมายเลขพอร์ตเซิร์ฟเวอร์ OpenSSH ของโฮสต์ฟังให้ทำ:

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • ในการเปิดเทอร์มินัลเชลล์ SSH เป็น<username>บนโฮสต์ให้เปิดเทอร์มินัลบนไคลเอ็นต์และป้อนคำสั่งต่อไปนี้แทนที่123.123.1.23ด้วยที่อยู่ IP ของโฮสต์:

    ssh <username>@123.123.1.23
    
    • หากคุณเปลี่ยนหมายเลขพอร์ตเซิร์ฟเวอร์ OpenSSH ของโฮสต์ฟังให้ทำ:

      ssh -p <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      

เชื่อมต่อกับโฮสต์และเข้าสู่ระบบผ่านตัวจัดการไฟล์ GUI (เช่น Nautilus) เพื่อการเข้าถึง SFTP ที่มองเห็นได้มากขึ้นเพื่อเปิดใช้งานการถ่ายโอนไฟล์

  1. เปิด Nautilus บนไคลเอ็นต์
  2. เลือกไฟล์> เชื่อมต่อกับเซิร์ฟเวอร์
  3. ประเภท: SSH
  4. เซิร์ฟเวอร์: ป้อนที่อยู่ IP ของโฮสต์
  5. พอร์ต: หมายเลขพอร์ตที่ระบุในsshd_configไฟล์โฮสต์
  6. ชื่อผู้ใช้: ชื่อผู้ใช้
  7. รหัสผ่าน: รหัสผ่าน

ป้อนคำอธิบายรูปภาพที่นี่

ใน 14.04:

  1. เปิด Nautilus บนไคลเอ็นต์
  2. เชื่อมต่อกับเซิร์ฟเวอร์
  3. ประเภท: `ssh @ 123.123.1.23:

สร้างบัญชีผู้ใช้มาตรฐานบนโฮสต์โดยมีการ จำกัด สิทธิ์การใช้งานไฟล์นอกโฟลเดอร์โฮม

สิทธิ์การใช้ไฟล์ที่เหมาะสมในโฮสต์รับประกันว่าผู้ใช้มาตรฐานแต่ละคน (ไม่มีสิทธิ์ sudo) ที่คุณสร้างบนโฮสต์จะเป็นเจ้าของ/home/new_userไดเรกทอรีของพวกเขาแต่มีสิทธิ์ จำกัด กับส่วนที่เหลือของโครงสร้างไดเรกทอรี

  • สิทธิ์ที่ จำกัด ไม่ได้หมายความว่าพวกเขาไม่สามารถดูชื่อไฟล์และโครงสร้างไดเรกทอรี

หวังว่าจะเป็นประโยชน์!


9
ดูเหมือนว่าคำตอบของฉันในขณะที่ดูเหมือนจะครอบคลุมมากจริง ๆ แล้วไม่สามารถตอบคำถามที่ยากที่สุดของคำถาม OPs: "ที่พวกเขาไม่สามารถเข้าถึงไดเรกทอรีอื่น ๆ ระดับบน" หากดำเนินการตามข้างบนผู้ใช้จะสามารถอ่านโครงสร้างไดเรกทอรีส่วนใหญ่ได้
ostergaard

2
หากต้องการขยายความคิดเห็นของ @ ajostergaard สิ่งนี้จะสร้างผู้ใช้ยูนิกซ์ปกติและอนุญาตให้พวกเขาเข้าถึง SSH และ SFTP ผู้ใช้ยูนิกซ์ทั่วไป (ไม่ใช่รูท) ยังสามารถเข้าถึงและดูไฟล์สำคัญจำนวนมากเช่นการกำหนดค่าเว็บเซิร์ฟเวอร์และอีกมากมาย สิ่งนี้ไม่ปลอดภัยแน่นอนและไม่เป็นไปตามข้อ จำกัด ที่ OP กำหนดไว้
Simon Woodside

50

ขั้นตอนที่ 1: ติดตั้งแพ็คเกจ OpenSSH หากไม่ได้ติดตั้ง

sudo apt-get install openssh-server

ขั้นตอนที่ 2: สร้างกลุ่มแยกสำหรับผู้ใช้ SFTP

sudo addgroup ftpaccess

ขั้นตอนที่ 3: แก้ไข/etc/ssh/sshd_configไฟล์และทำการเปลี่ยนแปลงดังนี้ ค้นหาและแสดงความคิดเห็นด้านล่างบรรทัด

#Subsystem sftp /usr/lib/openssh/sftp-server

และเพิ่มบรรทัดเหล่านี้ในตอนท้ายของไฟล์

Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

ขั้นตอนที่ 4: เริ่มบริการ sshd ใหม่

sudo service ssh restart

ขั้นตอนที่ 5: เพิ่มผู้ใช้ด้วยกลุ่ม ftpaccess และสร้างรหัสผ่าน

sudo adduser paul --ingroup ftpaccess --shell /usr/sbin/nologin

ขั้นตอนที่ 6: ปรับเปลี่ยนการอนุญาตไดเรกทอรีบ้าน

sudo chown root:root /home/paul

ขั้นตอนที่ 7: สร้างไดเรกทอรีภายในบ้านเพื่ออัพโหลดและแก้ไขสิทธิ์กับกลุ่ม

sudo mkdir /home/paul/www
sudo chown paul:ftpaccess /home/paul/www

แค่นั้นแหละ .

อ้างอิง: การตั้งค่า SFTP บน Ubuntu


นี่ดูเหมือนจะเป็นคำตอบที่ถูกต้อง ฉันไม่ได้ทดสอบ แต่อย่างน้อยมันก็พูดถึงความยากลำบากหลัก ๆ โดย จำกัด เส้นทางการท่องเว็บ
Mohammed Noureldin

ฉันทดสอบมันและมันก็อนุญาตมากเกินไปเนื่องจากการอนุญาตเริ่มต้นในโฟลเดอร์บ้านเป็น 755 ฉันทำsudo chmod 711ในโฟลเดอร์บ้านและมันอนุญาตให้ฉัน ftp ไปยังโฟลเดอร์ www เท่านั้น ดูเหมือนว่าจะดี แต่บางทีคนอื่น ๆ สามารถตีระฆังใน ...
moodboom

0

Denyhostsเป็นอีกเครื่องมือหนึ่งนอกเหนือจากที่กล่าวถึงโดย "jtd" ที่คุณอาจต้องการดู สามารถบล็อกการพยายามเชื่อมต่อซ้ำ ๆ กับเซิร์ฟเวอร์ SSH ของคุณโดยอัตโนมัติ สามารถติดตั้งได้ในที่เก็บ Ubuntu


Paket denyhosts นั้นว่างสำหรับ lucid (10.04LTS) และเที่ยงตรง (12.04LTS) เท่านั้น packages.ubuntu.com/search?suite=all&keywords=denyhosts
AB

Denyhosts ไม่มีอยู่ในที่เก็บของ Ubuntu อีกต่อไปถึงแม้ว่ามันจะยังคงสามารถติดตั้งได้ด้วยวิธีอื่น แต่ก็ยังไม่ได้รับการอัปเดตมานาน ดังนั้นจึงไม่ควรใช้ Denyhosts
Faizan Akram Dar

0

จำกัด การเข้าถึงผู้ใช้

ที่นี่เราจะอนุญาตให้ผู้ใช้ทำการถ่ายโอนไฟล์เท่านั้นและเราจะปิดการเข้าถึงเทอร์มินัล

สำหรับที่เพิ่มรหัสต่อไปนี้ที่ด้านล่างของไฟล์การกำหนดค่า

$ sudo nano /etc/ssh/sshd_config

ตอนนี้ไฟล์จะเปิดและวางรหัส

/etc/ssh/sshd_config

. . .

Match User filemg

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

แทนที่filemgด้วยชื่อผู้ใช้ของคุณ จากนั้นบันทึกและปิดไฟล์

แค่นั้นแหละ.

อ้างอิง: วิธีใช้ SFTP ใน Ubuntu 16.04

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