จะใส่ umask ด้วย SFTP ได้อย่างไร?


23

ฉันมีเซิร์ฟเวอร์ SFTP (openssh / sftp-server) และฉันต้องการตั้งค่า umask 002 สำหรับผู้ใช้ที่ใช้บริการนี้ ฉันพยายามตั้งค่า PAM (pam.d / common-session) และ. profile สำหรับผู้ใช้แต่ละคน แต่ไม่มีโชค

ทุกอย่างเข้าสู่ระบบด้วย SSH เป็นเรื่องปกติ แต่เมื่อฉันลองกับ SFTP (ด้วย gFTP) ฉันมีชุด 022 umask

ฉันได้ลองใช้ wrapper สำหรับ sftp-server ที่เปลี่ยน umask ก่อนที่จะเรียก sftp-server ไม่มีโชค

ความช่วยเหลือใด ๆ ขอบคุณมาก!

คำตอบ:


25

ตั้งแต่ OpenSSH 5.4p1 ฉันคิดว่าคุณสามารถใช้ตัวเลือก "-u" ตัวอย่างเช่น:

Subsystem sftp /usr/lib/openssh/sftp-server -u 022

จากหน้าคน:

 -u umask
         Sets an explicit umask(2) to be applied to newly-created files
         and directories, instead of the user's default mask.

ดีจัง !! ฉันจะดูโดยเร็วและรายงานการค้นพบของฉัน :)
mat_jack1

5
สำหรับผู้ที่ไม่มีตัวเลือก -u งานนี้:Subsystem sftp /bin/sh -c 'umask 0002; /usr/lib/openssh/sftp-server'
Steve Clay

1
ทางออกที่ดี มันแก้ปัญหากับไคลเอนต์เชลล์และแอพพลิเคชั่นเช่น CyberDuck ที่ตั้งค่าการอนุญาตเริ่มต้นโดยไม่คำนึงถึงระบบ umask ฉันพบว่ามีประโยชน์เพื่อให้แน่ใจว่าแอปไคลเอนต์ทุกตัวจะตั้งค่าการอนุญาตที่ถูกต้องเพื่อให้ผู้ใช้ของฉันทำงานร่วมกันในไฟล์กลุ่ม อาจมีประโยชน์ในการเพิ่มการตั้งค่านี้จะไม่หยุดผู้ใช้จากการกำหนดสิทธิ์ไฟล์เองหากต้องการ
gerlos

สิ่งสุดท้ายที่ต้องเพิ่ม: หากคุณต้องการเพียงคุณสมบัติ sftp และไม่จำเป็นต้องให้สิทธิ์การเข้าถึงแก่ผู้ใช้ของเชลล์คุณอาจพิจารณาใช้rsshแทนการใช้ bash สำหรับเชลล์ของพวกเขาและตั้ง umask เริ่มต้นไว้ใน /etc/rssh.conf . สิ่งนี้อาจทำให้เซิร์ฟเวอร์ของคุณปลอดภัยยิ่งขึ้น
gerlos

7

ฉันหวังว่านี่จะช่วยให้คนอื่นผิดหวังได้หลายชั่วโมง ...

หากคุณใช้แอปพลิเคชัน GUI SFTP ให้ตรวจสอบการตั้งค่าสำหรับการตั้งค่าการอนุญาตในการอัพโหลด

ฉันได้ลองวิธีแก้ปัญหาทั้งหมดข้างต้นแล้วและปรากฎว่าแอปพลิเคชันเพิ่งเอาชนะพวกเขาได้


^^ ใช่มาเป็นเวลานานฉันได้ตั้ง umask ในการเชื่อมต่อ SFTP โดยทำสคริปต์คล้ายกับวิธีแก้ปัญหาของ Weboide เมื่อเร็ว ๆ นี้ฉันกำลังเกาหัวของฉันว่าทำไมสิ่งนี้ดูเหมือนจะไม่ทำงานเหมือนในอดีต เห็นได้ชัดว่าในบางจุดการปรับปรุงไปยังไคลเอนต์ SFTP ของฉันทำให้มันตั้ง umask อย่างชัดเจนหลังจากเชื่อมต่อกับ ssh ดังนั้นไปคิด
Jared Kipe

มันไม่ใช่แค่ GUIs ไม่แม้แต่ลูกค้า ฉันใช้เวลานานเกินไปที่จะพบว่าไฟล์ทดสอบที่ฉันอัปโหลดมี 0600 ซึ่งคัดลอกไคลเอนต์ (OpenSSH sftp) ไปยังด้านไกล
xebeche

ขอขอบคุณ! ใช้เวลานานในการเล่นรอบกับสิทธิ์เพื่ออะไร
Tania Rascia

2

หลังจากหลายชั่วโมงพยายามใช้แฮ็กและการแก้ไขต่างๆฉันพบวิธีแก้ไขที่เหมาะสมแล้ว!

มีโปรแกรมแก้ไขสำหรับ SSH ที่อนุญาตให้คุณเลือก umask ที่คุณต้องการสำหรับ SFTP คุณสามารถดาวน์โหลดได้ที่นี่: http://sftpfilecontrol.sourceforge.net/

สำหรับฉัน (OpenSSH_5.2p1 + sftpfilecontrol-v1.3, OpenSSL 0.9.8g 19 ต.ค. 2550) มันทำงานได้อย่างสมบูรณ์แบบ!


2
เพิ่งทราบว่าตัวเลือก '-u' เพื่อตั้ง umask มีอยู่ใน OpenSSH ตั้งแต่ 5.4p1 ดูคำตอบของฉันเพิ่มเติม
Weboide

2

ในไฟล์ ssh config คุณยังสามารถใช้สิ่งนี้เพื่อตั้งค่าโหมดของไฟล์โดยเฉพาะ (แทนที่ chmod ใด ๆ ที่ไคลเอ็นต์อาจพยายามตั้งค่า) ที่นี่ฉันใช้ internal-sftp แต่ฉันคิดว่ามันจะเหมือนกันสำหรับเซิร์ฟเวอร์ sftp:

ForceCommand internal-sftp -u 0022   

0

หากต้องการอ้างอิงข้อความนี้ :

ฉันได้สิ่งนี้ทำงานได้โดยการเพิ่มบรรทัด "umask 007" ใน /etc/init.d/ssh

Bash ใช้.profileสำหรับเชลล์ล็อกอินแบบโต้ตอบ ฉันไม่คิดว่าsftpจะนับเป็นหนึ่งเดียว คุณอาจสามารถตั้ง umask ใน/etc/bash.bashrcหรือ~/.bashrcถ้าคำแนะนำด้านบนไม่ทำงานหรือคุณต้องการการควบคุมที่ละเอียดยิ่งขึ้น


2
ขอบคุณสำหรับคำตอบ แต่ฉันมีอยู่แล้วใน ssh umask 002 (ฉันพยายามแล้วด้วย 0002) และมันไม่ทำงาน :( และ bashrc นั้นไม่ได้ถูกนำมาพิจารณาเช่นเดียวกับไคลเอนต์ SFTP ภายนอกฉันไม่คิดว่า bash นั้นถูกใช้ ถ้าฉันเข้าสู่ระบบโดยตรงกับ ssh ทุกอย่างเรียบร้อยปัญหาของฉันคือเฉพาะกับไคลเอนต์ SFTP ขอบคุณ!
mat_jack1

โอ๊ะคุณพูดถูก ฉันไม่รู้ว่าทำไมฉันถึงคิดว่าการมีส่วนร่วมของ Bash
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

0

อ้างถึงคำถามนี้เพื่อค้นหาวิธีแก้ไขปัญหาอย่างง่ายที่ไม่ต้องใช้รุ่น openssh หรือแพทช์ที่กำหนดเองโดยเฉพาะ

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