เซิร์ฟเวอร์ OpenSSH SFTP ใช้ umask หรือสงวนสิทธิ์ฝั่งไคลเอนต์หลังจากวางคำสั่ง (สภาพแวดล้อม chrooted) หรือไม่


13

ฉันรู้ว่าคำถามนี้ถูกพูดถึงแล้ว แต่จากการอ่านโพสต์ฉันไม่สามารถหาคำตอบได้เพราะบางคนพูดว่า "ใช่ umask สามารถทำงานได้" และคนอื่น ๆ พูดว่า "คำสั่ง OpenSSH ใส่คำสั่งสงวนสิทธิ์เสมอ"

ก่อนอื่นเพียงเพื่อความแม่นยำ:

  • ฉันใช้ OpenSSH 5.9 บน RHEL 6.2
  • ฉันได้กำหนดค่าเซิร์ฟเวอร์ SFTP chrooted ใช้internal-sftpระบบย่อยด้วย-u 0002สำหรับ umask
  • ฉันแม่นยำฉันไม่ได้ใช้-pหรือ-Pตัวเลือก

จากสิ่งที่ฉันได้อ่านในมือข้างหนึ่ง:มีหลายวิธีในการกำหนด umask สำหรับการถ่ายโอน SFTP:

  • ตัวเลือก-uของinternal-sftp(หรือsftp-server) ตั้งแต่ OpenSSH 5.4
  • สร้าง wrapper เป็นsftp-server(ซึ่งเราตั้ง umask ไว้อย่างชัดเจน - สิ่งนี้ไม่เหมาะกับ chrooted environment btw)
  • เพิ่มการกำหนดค่าเฉพาะในpam.d/sshdไฟล์

ในทางกลับกันฉันได้อ่าน:

ไคลเอนต์และเซิร์ฟเวอร์ OpenSSH SFTP ทำการถ่ายโอนการอนุญาต (เป็นส่วนขยาย) และสร้างไฟล์ระยะไกลด้วยการอนุญาตด้านโลคัล AFAICT ไม่มีวิธีใดที่จะปิดการทำงานนี้

ดังนั้นฉันจึงทำการทดสอบต่อไปนี้:

ในไคลเอนต์ของฉันฉันสร้างไฟล์MYFILEและไดเรกทอรีที่MYDIRมีสิทธิ์ 600 และ 700

จากนั้นด้วยsftpคำสั่ง:

mkdir => the new directory has permissions following the umask (OK)
put MYFILE => MYFILE has same permissions as on client (KO)
put -r MYDIR => MYDIR has same permissions as on client (KO)

ถ้าฉันเปลี่ยนการอนุญาตของMYFILEและMYDIRบนฝั่งไคลเอ็นต์และอัปโหลดอีกครั้งฉันจะได้รับสิทธิ์ใหม่ในฝั่งเซิร์ฟเวอร์

ฉันลองpam.dวิธีแก้ปัญหาด้วย แต่ก็ไม่เปลี่ยนอะไรเลย

ดังนั้นตอนนี้ฉันสับสน:

จากสิ่งที่ฉันทดสอบและเป็นส่วนหนึ่งของสิ่งที่ฉันอ่านฉันจะบอกว่า OpenSSH รักษาสิทธิ์ไว้เสมอ แต่เนื่องจากมีโพสต์มากมายที่บอกว่าสามารถกำหนด umask ได้ฉันสามารถจินตนาการว่าฉันทำสิ่งที่ผิดในการกำหนดค่าการทดสอบของฉัน

ฉันขอขอบคุณข้อเสนอแนะที่มีประสบการณ์บางอย่าง

ขอขอบคุณ.

คำตอบ:


12

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

อย่างไรก็ตามสิ่งที่ไคลเอ็นต์ OpenSSH SFTP ทำ:

  • putโดยไม่มีการ-Pตั้งค่าสถานะมันจะขอให้เซิร์ฟเวอร์สร้างไฟล์ที่มีสิทธิ์แบบเดียวกับไฟล์โลคอล จากนั้นเซิร์ฟเวอร์ OpenSSH (โดยนัย * กฎ nix) จะใช้ umask

  • putด้วย-Pแฟล็กจะเริ่มต้นเหมือนเดิม แต่หลังจากการอัปโหลดเสร็จสมบูรณ์ไคลเอ็นต์จะขอให้เซิร์ฟเวอร์ตั้งค่าการอนุญาตให้เหมือนกันกับไฟล์โลคัลที่มีการร้องขอ ("chmod") อย่างชัดเจน สำหรับ "chmod" umask ใช้ไม่ได้

  • mkdirมันขอให้เซิร์ฟเวอร์สร้างไดเรกทอรีที่มีสิทธิ์ 0777 umask ใช้โดยนัย

อย่างไรก็ตามฉันเชื่อว่า umask 0002 ไม่มีผลกับไฟล์ที่มีการอนุญาต 0600 เนื่องจากสิ่งเหล่านี้เป็นสิทธิพิเศษร่วมกัน คุณควรลอง umask ของคุณกับไฟล์ที่มีสิทธิ์เช่น 0644

ดังนั้นจริง ๆ แล้วมันควรจะทำงานถ้าคุณมีการกำหนดค่าระบบของคุณตามที่คุณอธิบาย ดูหลักฐานจากกล่องของฉัน (Ubuntu พร้อม OpenSSH 6.2p2)

Match user user2
  ChrootDirectory /home/user2/chroot
  ForceCommand internal-sftp -u 0077
  AllowTcpForwarding no
  PermitTunnel no
  X11Forwarding no

ดูความแตกต่างในการอนุญาตหลังจากputกับput -P:

user1:~$ touch file.txt
user1:~$ ls -l
total 0
-rw-r--r-- 1 user1 ftpuser    0 Oct 23 15:34 file.txt
user1:~$ sftp user2@localhost
user2@localhost's password: 
Connected to localhost.
sftp> cd somefolder 
sftp> put file.txt
Uploading file.txt to /somefolder/file.txt
file.txt                                         100%     0    0.0KB/s    0:00
sftp> ls -l
-rw-------    1 1003 1001    0 Oct 23 15:35 file.txt
sftp> put -P file.txt
Uploading file.txt to /somefolder/file.txt
file.txt                                         100%     0    0.0KB/s    0:00
sftp> ls -l
-rw-r--r--    1 1003 1001    0 Oct 23 15:34 file.txt

Btw ข้อมูลจำเพาะ SFTP ล่าสุดกำหนดพฤติกรรมของลูกค้าและเซิร์ฟเวอร์เกี่ยวกับ umask อย่างที่คุณเห็น OpenSSH ละเมิดจริงแม้ว่า OpenSSH จะใช้ SFTP เวอร์ชัน 3 ที่ยังไม่ได้พูดถึง umask

7.6 สิทธิ์

...

เซิร์ฟเวอร์ไม่ควรใช้ 'umask' กับบิตโหมด แต่ควรตั้งค่าโหมดบิตตามที่ระบุโดยไคลเอนต์ ลูกค้าต้องใช้ 'umask' ที่เหมาะสมกับบิตโหมดก่อนที่จะส่ง


ฉันได้ลองใช้สิทธิ์ที่แตกต่างกันแล้วตอนแรกฉันมี 755 สำหรับไดเรกทอรีของฉันที่ฝั่งไคลเอ็นต์และต้องการรับ 775 แทน แต่มันไม่ทำงาน ผมไม่เห็นด้วยกับคุณสำหรับ -P โดยการอ่านเอกสาร แต่แม้จะไม่มีธงว่าผมเคยได้รับบนเซิร์ฟเวอร์สิทธิ์ที่เหมือนกันมากกว่าลูกค้า (สิทธิ์อะไรก็ตามที่มี)
drkzs

ขอบคุณสำหรับคำพูดฉันพยายามปรับปรุงชื่อและแก้ไขคำบางคำ
drkzs

มันใช้งานได้จริงดูการอัปเดตของฉัน
Martin Prikryl

ใช่ตัวอย่างของคุณใช้งานได้ ... แต่ถ้าคุณเปลี่ยน umask เป็น 0002 จะไม่ทำงานอีกต่อไป บางทีโพสต์นี้กำลังก่อปัญหาเดียวกัน ยกเว้นความจริงที่ว่าฉันอยู่ใน openssh5.9 และตัวเลือก umask นั้นควรใช้งานได้ ความแตกต่างระหว่างกับการกำหนดค่า SSHD ของคุณกับของฉันคือฉันไม่ได้ใช้ ForceCommand ดังนั้นฉันจึงระบุ umask ในบรรทัดระบบย่อย (ฉันจะพยายามโพสต์การกำหนดค่าและผลลัพธ์ แต่การทดสอบเครือข่ายไม่สามารถเข้าถึงได้อย่างง่ายดาย)
drkzs

1
เพียงเพื่อจะชัดเจนในประเด็นว่าThe server SHOULD NOT apply a 'umask' ใช้เฉพาะเมื่อลูกค้าส่งข้อมูลได้รับอนุญาต เมื่อลูกค้าไม่ได้ส่งข้อมูลการอนุญาตมันเป็นพฤติกรรมที่ตั้งใจที่จะใช้ umask!
heiglandreas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.