क्या OpenSSH SFTP सर्वर umask का उपयोग करता है या क्लाइंट कमांड को कमांड (chroot पर्यावरण) डालने के बाद संरक्षित करता है?


13

मुझे पता है कि इस सवाल पर पहले ही चर्चा की जा चुकी है, लेकिन उन पोस्टों को पढ़कर मैं उत्तरों का पता नहीं लगा सका, क्योंकि कुछ ने कहा "हाँ उमस्क काम कर सकते हैं", और अन्य लोगों का कहना है "ओपनएसएसएच ने कमांड को हमेशा अनुमतियों को संरक्षित रखा"

सब से पहले सिर्फ सटीक:

  • मैं आरएचईएल 6.2 पर ओपनएसएसएच 5.9 का उपयोग करता हूं
  • मैंने umask के internal-sftpसाथ सबसिस्टम का उपयोग करते हुए एक क्रोकेटेड SFTP सर्वर को कॉन्फ़िगर किया है-u 0002
  • मैं सटीक हूं कि मैं -pया -Pविकल्प का उपयोग नहीं करता हूं

मैंने एक तरफ से जो पढ़ा है, उससे: SFTP स्थानांतरण के लिए umask को परिभाषित करने के कई तरीके हैं:

  • ओपनएसएसएच 5.4 के बाद से (या ) -uका विकल्पinternal-sftpsftp-server
  • एक रैपर बनाएं sftp-server(जिसमें हम स्पष्ट रूप से umask सेट करते हैं - यह पर्यावरण के आधार पर btw के लिए फिट नहीं है)
  • pam.d/sshdफ़ाइल में एक विशिष्ट कॉन्फ़िगरेशन जोड़ें

दूसरी ओर मैंने पढ़ा है:

OpenSSH SFTP क्लाइंट और सर्वर अनुमतियों (एक एक्सटेंशन के रूप में) को स्थानांतरित करते हैं और स्थानीय तरफ अनुमतियों के साथ दूरस्थ फ़ाइल बनाते हैं। AFAICT, इस व्यवहार को अक्षम करने का कोई तरीका नहीं है।

इसलिए मैंने निम्नलिखित परीक्षण किया:

मेरे मुवक्किल पर मैंने 600 और 700 अनुमतियों के साथ फ़ाइल MYFILEऔर निर्देशिका बनाई MYDIR

तब 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समाधान की भी कोशिश की , लेकिन यह कुछ भी नहीं बदला।

तो अब मैं उलझन में हूँ:

मैंने जो भी परीक्षण किया है और जो मैंने पढ़ा है उसका एक हिस्सा, मैं कहूंगा कि ओपनएसएसएच हमेशा अनुमतियों को संरक्षित करता है। लेकिन जैसा कि कई पोस्ट कह रहे हैं कि एक ऑमस्क परिभाषित किया जा सकता है, मैं कल्पना कर सकता हूं कि मैं अपने परीक्षण कॉन्फ़िगरेशन में एक गलत काम कर सकता हूं।

मैं कुछ अनुभवी प्रतिक्रिया की सराहना करूंगा।

धन्यवाद।

जवाबों:


12

सबसे पहले, umask सर्वर के बारे में क्लाइंट नहीं है। तो यह पूछते हुए कि क्या putओपनएसएसएच क्लाइंट का कमांड ऑमस्क का उपयोग करता है गलत है। आपको यह पूछना चाहिए कि क्या SFSS अपलोड के परिणामस्वरूप फ़ाइल बनाते समय OpenSSH सर्वर umask का उपयोग करता है।

वैसे भी, OpenSSH SFTP क्लाइंट क्या करता है:

  • putबिना -Pझंडे के, यह सर्वर को उसी फाइल के साथ फाइल बनाने के लिए कहता है जिसकी स्थानीय फाइल है। OpenSSH सर्वर तब (संक्षेप में * निक्स नियमों द्वारा) ऑमस्क लागू करता है।

  • put-Pझंडे के साथ , यह वही शुरू होता है, लेकिन अपलोड पूरा होने के बाद, क्लाइंट सर्वर को स्पष्ट रूप से (फिर से) उसी स्थानीय फ़ाइल ("chmod" अनुरोध) की अनुमति देता है। "चामोद" के लिए, उमस्क लागू नहीं होता है।

  • mkdir, यह सर्वर को 0777 अनुमतियों के साथ एक निर्देशिका बनाने के लिए कहता है। ऑमस्क अंतर्निहित रूप से लागू होता है।

वैसे भी, मेरा मानना ​​है कि umask 0002 की अनुमतियों के साथ फ़ाइल पर कोई प्रभाव नहीं है 0600, क्योंकि ये पारस्परिक रूप से अनन्य हैं। आपको 0644 जैसी अनुमतियों वाली फ़ाइल के विरुद्ध अपना umask आज़माना चाहिए।

तो वास्तव में, यह काम करना चाहिए, यदि आपके पास आपका सिस्टम है जैसा कि आप वर्णन करते हैं। मेरे बॉक्स से सबूत देखें (ओपनएसएसएच 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 के बारे में ग्राहक और सर्वर के व्यवहार को परिभाषित करता है। जैसा कि आप देख सकते हैं, ओपनएसएसएच वास्तव में इसका उल्लंघन करता है, हालांकि ओपनएसएसएच एसएफटीपी संस्करण 3 को लागू करता है जिसमें अभी तक umask का कोई उल्लेख नहीं था।

7.6। अनुमतियां

...

सर्वर बिट्स मोड बिट्स पर एक umask लागू नहीं करते; लेकिन ग्राहक द्वारा निर्दिष्ट मोड बिट्स सेट करना चाहिए। क्लाइंट को भेजने से पहले मोड बिट्स के लिए एक उपयुक्त umask लागू करना होगा।


मैंने पहले से ही कई अलग-अलग अनुमतियों के साथ प्रयास किया है, बहुत शुरुआत में मेरे पास क्लाइंट पक्ष पर मेरी निर्देशिका के लिए 755 था, और इसके बजाय 775 प्राप्त करना चाहता था। लेकिन यह काम नहीं किया। मैं दस्तावेज़ीकरण पढ़कर आपके लिए -P से सहमत हूं, लेकिन उस ध्वज के बिना भी मुझे हमेशा सर्वर पर क्लाइंट की तुलना में समान अनुमति मिलती है (जो भी अनुमति हो)
drkzs

इस टिप्पणी के लिए धन्यवाद, मैंने शीर्षक में सुधार करने और कुछ शब्द को सही करने की कोशिश की
डॉक्टर्स

यह वास्तव में काम करना चाहिए, मेरा अपडेट देखें।
मार्टिन प्रिक्रील

हां, आपका उदाहरण काम करता है ... लेकिन अगर आप umask को 0002 में बदलते हैं, तो यह अब नहीं होता है। शायद यह पोस्ट उसी समस्या को बढ़ा रहा है? इस तथ्य को छोड़कर, मैं Opensh5.9 में हूं और umask विकल्प काम करना चाहिए। आपके SSHD कॉन्फ़िगरेशन और मेरा के बीच का अंतर यह है कि मैं ForceCommand का उपयोग नहीं करता हूं, इसलिए मैं umask को सबसिस्टम लाइन में निर्दिष्ट करता हूं। (मैं विन्यास और परिणाम को पोस्ट करने की कोशिश करूंगा, लेकिन नेटवर्क परीक्षण आसानी से उपलब्ध नहीं है)
15:23 बजे ड्रूक्स

1
बस उस बिंदु पर स्पष्ट होना चाहिए: The server SHOULD NOT apply a 'umask' केवल तब लागू होता है जब ग्राहक अनुमति-सूचना भेजता है । जब ग्राहक अनुमति नहीं भेजता है तो यह एक umask लागू करने का इरादा व्यवहार है!
Heiglandreas
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.