सभी प्रकार के कनेक्शन के लिए ssh के umask को कैसे सेटअप करें


34

मैं OpenSSH के umask को 0027सभी कनेक्शन प्रकारों के अनुरूप तरीके से सेटअप करने का तरीका खोज रहा हूं ।

उन कनेक्शन प्रकारों से जिनका मैं उल्लेख कर रहा हूं:

  1. SFTP
  2. SCP
  3. ssh होस्टनाम
  4. ssh होस्टनाम कार्यक्रम

3. और 4. के बीच का अंतर यह है कि पूर्व एक शेल शुरू करता है जो आमतौर पर /etc/profileजानकारी पढ़ता है जबकि बाद वाला नहीं करता है।

इस पोस्ट को पढ़ने के अलावा, मैं ओपन विकल्प के नए संस्करणों में मौजूद -u विकल्प से अवगत हो गया हूं। हालांकि यह काम नहीं करता है।

मुझे यह भी जोड़ना चाहिए कि /etc/profileअब इसमें शामिल हैं umask 0027

बिंदु से बिंदु:

  • SFTP - स्थापना -u 0027में sshd_configके रूप में उल्लेख यहाँ , पर्याप्त नहीं है।

यदि मैं यह पैरामीटर सेट नहीं करता हूं, तो sftp डिफ़ॉल्ट रूप से उपयोग होता है umask 0022। इसका मतलब है कि अगर मेरे पास दो फाइलें हैं:

-rwxrwxrwx 1 user user 0 2011-01-29 02:04 execute
-rw-rw-rw- 1 user user 0 2011-01-29 02:04 read-write

जब मैं उन्हें गंतव्य मशीन में डालने के लिए sftp का उपयोग करता हूं तो मुझे वास्तव में मिलता है:

-rwxr-xr-x 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write

हालाँकि जब मैं गंतव्य मशीन -u 0027पर सेट होता हूँ तो मुझे sshd_configवास्तव में मिलता है:

-rwxr--r-- 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write

जो अपेक्षित नहीं है, क्योंकि यह वास्तव में होना चाहिए:

-rwxr-x--- 1 user user 0 2011-01-29 02:04 execute
-rw-r----- 1 user user 0 2011-01-29 02:04 read-write

कोई भी समझता है कि ऐसा क्यों होता है?

  • scp - स्वतंत्र रूप से sftp के लिए सेटअप क्या है , अनुमतियाँ हमेशा होती हैं umask 0022। मुझे वर्तमान में यह पता नहीं है कि इसे कैसे बदला जाए।

  • ssh hostname - यहाँ कोई समस्या नहीं है क्योंकि शेल /etc/profileडिफ़ॉल्ट रूप से पढ़ता है जिसका मतलब umask 0027है कि वर्तमान सेटअप।

  • ssh होस्टनाम कार्यक्रम - एससीपी जैसी ही स्थिति ।


संक्षेप में, पर umask की स्थापना sftpपरिणाम बदलती जाती है लेकिन एकदम सही ढंग से नहीं, ssh hostnameउम्मीद पढ़ने के रूप में काम करता है /etc/profileऔर दोनों scpऔर ssh hostname programगए हैं लगता है umask 0022कहीं hardcoded।

उपरोक्त किसी भी बिंदु पर कोई भी जानकारी स्वागत योग्य है।

संपादित करें: मैं उन पैच से बचना चाहूंगा, जिन्हें मैन्युअल रूप से ओपनशेड संकलित करने की आवश्यकता होती है। सिस्टम उबंटू सर्वर 10.04.01 (ल्यूसिड) एलटीएस opensshको मावरिक से पैकेज के साथ चला रहा है ।

उत्तर: जैसा कि poige द्वारा इंगित किया गया है, pam_umask का उपयोग करके चाल चली गई।

सटीक परिवर्तन थे:

इसमें जोड़ी गई लाइनें /etc/pam.d/sshd:

# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session    optional     pam_umask.so umask=0027

इसके अलावा, चाहे वे स्रोत हों /etc/profileया न हों, सभी लॉगइन शेल को प्रभावित करने के लिए , उसी लाइनों को भी जोड़ा गया था /etc/pam.d/login

संपादित करें : कुछ टिप्पणियों के बाद मैंने इस मुद्दे को सेवानिवृत्त किया।

कम से कम उबंटू (जहां मैंने परीक्षण किया) में ऐसा लगता है कि यदि उपयोगकर्ता के पास अपने शेल की इनिट फ़ाइलों (.bashrc, .zshrc, ...) में एक अलग umask सेट है, तो PAM umask को नजरअंदाज कर दिया जाता है और उपयोगकर्ता इसके बजाय उपयोग किए गए umask को परिभाषित करता है। में परिवर्तन /etc/profileजब तक उपयोगकर्ता स्पष्ट रूप से init फाइल में उन परिवर्तनों के सूत्रों नहीं समझे परिणाम को प्रभावित।

यह इस बिंदु पर स्पष्ट नहीं है यदि यह व्यवहार सभी विकृतियों में होता है।


Unode: "मैं उन पैच से बचना चाहूंगा, जिन्हें मैन्युअल रूप से ओपनिंग संकलन की आवश्यकता होती है।" क्यूं कर?
desasteralex

5
@desasteralex - क्योंकि (यदि संभव हो तो) मैं अतिरिक्त रखरखाव / प्रशासन कार्य करने से बचना चाहूंगा जो स्रोत आधारित पैकेजों के साथ आता है और क्योंकि मुझे यह विश्वास करना कठिन लगता है कि पैचिंग ओपेनश के अलावा umask को बदलने का कोई अन्य तरीका नहीं है। विशेष रूप से इस पर विचार करना किसी भी प्रणाली पर एक बुनियादी सुरक्षा पहलू है।
अनकोड

1
/Etc/pam.d/sshd (और लॉगिन) को बदलने और ssh को पुनरारंभ करने के बाद, मुझे कोई व्यवहार परिवर्तन नहीं दिखाई देता है। क्या अन्य आवश्यक परिवर्तन निहित हैं लेकिन यहां उल्लेख नहीं किया गया है?
स्टीव क्ले

@mrclay - क्या आपके पास UsePAM yessshd_config है?
यूएन

1
उपयोगकर्ता .bashrc समस्या को हल करने के लिए, अपने में umask कमांड को दूर करने का प्रयास करें /etc/profile। कुछ इस तरहalias umask=/bin/true
टोबिया

जवाबों:


22

मैं 2 चीजें आज़मा सकता हूं:

  1. pam_umask
  2. LD_PRELOAD आवरण (स्व-लिखित?)

1
+1, pam_umask अब तक का सबसे सरल समाधान है
Flexo

pam_umask चाल करता है। प्रश्न को प्रतिबिंबित करने और उत्तर को विस्तृत करने के लिए संपादित प्रश्न
अनकोड करें

बस stackoverflow.com/q/10220531/220060 का उपयोग करें । हालाँकि सावधान रहें, यदि आप किसी चीज़ को गलत समझते हैं, तो आप अपने आप को सर्वर से बाहर कर देते हैं। हमेशा जांचें कि क्या आप अपना वर्तमान सत्र बंद करने से पहले फिर से लॉगिन कर सकते हैं।
nalply

1
@Nalply द्वारा टिप्पणी के अलावा: एक बैकअप के लिए सुनिश्चित करें कि रूट सत्र खुला, तोड़ने पीएएम साधन के बाद से आप के लिए नहीं कर सकेंगे sudoया sudo suया की तरह।
ज़ीरो 3

13

यहां एक समाधान है जो आपको वह करने देगा जो आप प्रति उपयोगकर्ता के आधार पर चाहते हैं। यह केवल देशी sshdसुविधाओं का उपयोग करता है और स्थानीय स्तर पर बनाए गए पैच के साथ मूकिंग की आवश्यकता नहीं है। यह समाधान ForceCommandहर ssh कनेक्शन में एक पर्यावरण-सेटअप स्क्रिप्ट सम्मिलित करने के लिए sshd के व्यवहार का लाभ उठाता है , और फिर मूल कमांड चलाता है।

सबसे पहले, निम्नलिखित सामग्री के साथ अपने सिस्टम पर कहीं एक स्क्रिप्ट बनाएं:

#!/bin/sh

umask 0027
exec /bin/sh -c "${SSH_ORIGINAL_COMMAND:-$SHELL}"

इस उदाहरण के प्रयोजनों के लिए मैं मान लूंगा कि आपने यह कहा है /usr/bin/umask-wrapper

अब, आपके पास इसे सेट करने के लिए कुछ विकल्प हैं। यदि आप चाहते हैं कि यह सभी उपयोगकर्ताओं के लिए एक अनिवार्य कॉन्फ़िगरेशन हो (जो कि थोड़ी संभावना नहीं है), तो आप इसे शामिल करने के लिए अपने sshd कॉन्फ़िगरेशन को संशोधित कर सकते हैं:

ForceCommand /usr/bin/umask-wrapper

यदि आप केवल कुछ उपयोगकर्ताओं पर यह लागू करना चाहते हैं , तो आप एक Matchब्लॉक का उपयोग कर सकते हैं (यह आपके अंत में जाता है sshd_config):

Match User user1,user2
ForceCommand /usr/bin/umask-wrapper

यदि आप चाहते हैं कि यह उपयोगकर्ता-नियंत्रणीय व्यवहार हो, तो आप विशिष्ट कुंजियों के लिए इस व्यवहार का चयन करने के लिए फ़ाइल command=में विकल्प का उपयोग कर सकते हैं authorized_key। उदाहरण के लिए, इसका परीक्षण करते समय मैंने अपनी authorized_keysफ़ाइल में एक प्रविष्टि जोड़ी जो कुछ इस तरह दिखती है:

command="/home/lars/bin/umask-wrapper" ssh-rsa AAAAB3NzaC1 ... umask-test

और यहाँ मेरे परीक्षण के कुछ परिणाम हैं:

sshबिना किसी आदेश के उपयोग करना :

localhost$ ssh remotehost
remotehost$ touch umask-test/file1
remotehost$ ls -l umask-test/file1
-rw-r-----. 1 lars lars 0 Feb  2 06:02 file1

sshकमांड के साथ उपयोग करना :

localhost$ ssh remotehost touch umask-test/file2
localhost$ ssh remotehost ls -l umask-test/file2
-rw-r-----. 1 lars lars 0 Feb  2 06:03 file2

का उपयोग कर scp:

localhost$ touch file3
localhost$ ls -l file3
-rw-r--r--  1 lars  staff  0 Feb  2 06:03 file3
localhost$ scp file3 remotehost:umask-test/file3
localhost$ ssh remotehost ls -l umask-test/file3
-rw-r-----. 1 lars lars 0 Feb  2 06:03 file3

का उपयोग कर sftp:

localhost$ sftp remotehost
sftp> put file3 umask-test/file4
sftp> ls -l umask-test/file4
-rw-r-----    0 500      500             0 Feb  2 06:05 umask-test/file4

आखिर तुमने इसे हासिल कर ही लिया है। मेरा मानना ​​है कि यह वह व्यवहार है जिसकी आपको तलाश थी। यदि आपके पास इस समाधान के बारे में कोई प्रश्न हैं, तो मुझे अतिरिक्त विवरण प्रदान करने में खुशी होगी।


हालांकि यह विधि काम करने लगती है, यह थोड़ा सा एक बुरा सपना है। फिर भी, उन मामलों के लिए +1 जहां पीएएम का उपयोग नहीं किया जा सकता है।
अनकोड

3
मुझे नहीं पता कि यह सब बनाए रखना मुश्किल है। PAM- आधारित समाधान पर प्राथमिक लाभ यह है कि इसके लिए किसी विशेष विशेषाधिकार की आवश्यकता नहीं होती है - आप इसे बिना किसी व्यवधान के अपने स्वयं के खाते के लिए सेट कर सकते हैं।
17

मैं उपयोगकर्ताओं की एक चयनित सूची रखने के संदर्भ में सोच रहा था, लेकिन वास्तव में मैंने सादे उपयोगकर्ता सेटअप पर इस काम के पहलू पर ध्यान नहीं दिया। जब मैंने पहली बार इसे पढ़ा तो मुझे लगा कि ForceCommand को "आवश्यक" होना चाहिए न कि "इसे स्थापित करने का एक तरीका"। command=वास्तव में ssh की साफ-सुथरी विशेषता है।
19

5

मैंने सेटिंग को केंद्रीकृत करने के लिए थोड़ा अलग तरीका अपनाया।

इसमें जोड़ा गया था /etc/pam.d/common-session:

session    optional     pam_umask.so

इसमें संशोधित किया गया था /etc/login.defs:

UMASK           0027

2

मैंने ssh के साथ काम करने के लिए pam_umask प्राप्त किया है, लेकिन scp या sftp के साथ नहीं।

आवरण विधि भी sftp या scp के लिए कुछ नहीं करती है। मुझे यकीन नहीं है कि 027 एक अच्छा उदाहरण है क्योंकि अधिकांश डिस्ट्रोस में पहले से ही umask सेट है। 002 के साथ प्रयास करें और देखें कि क्या काम करता है।


1

प्रोग्राम जो अपने स्वयं के umask सेट नहीं करते हैं, जो उस एप्लिकेशन के umask को विरासत में मिला है जिसने इसे शुरू किया है। पूरी तरह से sshd बंद करो, अपने umask को 0027 पर सेट करें, फिर इसे फिर से शुरू करें। (आप भविष्य के रीबूट के लिए इनिट स्क्रिप्ट में umask कमांड जोड़ सकते हैं।)

Scp के साथ काम करने के लिए परीक्षण किया गया।


क्षमा करें, लेकिन यह उन पहली चीजों में से एक है, जिन्हें मैंने सफलता के बिना आजमाया है। सभी लॉगिन गोले umask 0027(यदि वे पढ़ते हैं /etc/profile) लेकिन ssh को पुनरारंभ करने से न तो scp प्रभावित होता है और न ही ssh।
अपराह्न

1

यदि आप pam_umaskअपने SFTP सत्रों को प्रभावित नहीं करते हैं, तो जाँचें कि UsePamक्या फ़ाइल Yesमें सेट है /etc/ssh/sshd_config

यदि आपके पास पासवर्ड प्रमाणीकरण अक्षम है और UsePamइसे सेट या डिफ़ॉल्ट किया गया था No। आप फ़ाइल ChallengeResponseAuthentication Noमें सेट करना चाह सकते हैं sshd_configक्योंकि अन्यथा आप अनजाने में उस सिस्टम के माध्यम से पासवर्ड प्रमाणीकरण सक्षम कर सकते हैं।


1

ऊपर दिए गए उपयोगकर्ता 188737 के उत्तर में एक जोड़ा गया नोट:

यह कहने के बिना जा सकता है, लेकिन अगर आप ओपनश-सर्वर पैकेज का उपयोग नहीं कर रहे हैं , और मैन्युअल रूप से ओपनएसएसएच संकलित किया है, तो सुनिश्चित करें कि आप कॉन्फ़िगरेशन फ्लैग पास करके "पीएएम समर्थन सक्षम करें" ।--with-pam

अन्यथा, UsePAM=yessshd_config में, साथ /etc/pam.d/*ही प्रभावी रूप से नजरअंदाज किए जाने वाले किसी भी बदलाव को नजरअंदाज कर दिया जाएगा sshd

यह अंततः मुझ पर dawned क्यों अनुशंसित PAM समाधानों में से कोई भी गैर-संवादात्मक SFTP कनेक्शन के माध्यम से परीक्षण को प्रभावित नहीं कर रहा था ...


1

चूंकि ऑमस्क मूल प्रक्रिया से विरासत में मिला है, एक स्लैकवेयर सिस्टम पर जो /etc/rc.d/rc.sshdsshd को शुरू / बंद / फिर से शुरू करने के लिए उपयोग करता है, आप बस umask 0027सीधे "sshd_start" या "sshd_restart" या वैकल्पिक रूप से किसी भी बिंदु पर ऊपर से सीधे लाइन पर रख सकते हैं । मुख्य निष्पादन अनुभाग शुरू होता है /etc/rc.d/rc.sshd:

case "$1" in
'start')
  umask 0027
  sshd_start
  ;;
'stop')
  sshd_stop
  ;;
'restart')
  umask 0027
  sshd_restart
  ;;
*)

या, वैकल्पिक रूप से, फ़ाइल के शीर्ष पर:

#!/bin/sh
# Start/stop/restart the secure shell server:
umask 0027

0

मैंने अभी सोलारिस 11 पर लार्क्स sshd_config विकल्पों में संभावित सुधार का परीक्षण किया है

उपयोगकर्ताओं को प्रबंधित करने के लिए एक समूह सेट करें और स्क्रिप्ट को कॉन्फ़िगर फ़ाइल में स्थानांतरित करें, मेरे मामले में मैं umask को 0002 पर सेट करना चाहता था।

परिणामी विन्यास बन जाता है ...।

Match Group managedgroup
ForceCommand /bin/sh -c 'umask 0002; ${SSH_ORIGINAL_COMMAND:-$SHELL}'

0

मैं इस मुद्दे से जूझ रहा हूँ, विशेष रूप से scp का उपयोग करके फ़ाइल की प्रतिलिपि बनाने के बाद फ़ाइल अनुमतियों के साथ , और यह अंततः मेरे लिए हुआ कि मैं प्रतिलिपि के बाद अनुमतियाँ बदलने के लिए ssh का उपयोग करूँ।

यहाँ समाधान है:

  1. अपनी फ़ाइल की प्रतिलिपि बनाएँ: localhost$ scp filename remotehost:umask-test/filename
  2. अनुमति तय करें: localhost$ ssh remotehost "chmod go+r umask-test/filename"

सबसे अच्छा, इस समाधान को प्रभावित करने के लिए कोई रूट एक्सेस आवश्यक नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.