क्या अधिकृत_की के लिए एक केंद्रीय स्थान एक अच्छा विचार है?


29

मैं निम्नलिखित स्टैक को चलाने के लिए क्लाउड सर्वर को कॉन्फ़िगर करने की प्रक्रिया में हूं: रूबी, पैसेंजर, अपाचे; उबंटू 10.04 (ल्यूसिड लिंक्स) के तहत।

I सेटअप RSA कुंजियों को प्रबंधित करने के लिए सर्वर को आसान बनाने की इच्छा की प्रक्रिया में root, और www-dataताकि मैं sshसर्वर में आ सकूं। बात मैं पसंद नहीं आया था कि www-dataकी .sshनिर्देशिका बैठ गया में /var/wwwजो अपाचे के लिए डिफ़ॉल्ट निर्देशिका सेटअप है। मेरी चिंता यह है कि यदि अपाचे को ठीक से कॉन्फ़िगर नहीं किया गया है तो .sshनिर्देशिका को उजागर किया जा सकता है।

मैं ~/.ssh/authorized_keysफ़ाइल को एक केंद्रीय स्थान में बदलने के समाधान में आया AuthorizedKeysFileथा /etc/ssh/sshd_config। यह 2 पेशेवरों के साथ आता है: कुंजियों के लिए एक एकल स्थान, और खराब अपाचे कॉन्फ़िगरेशन के बारे में चिंता करने की आवश्यकता नहीं है। मैं जिस एकल कोन के बारे में सोच सकता हूं, वह यह है कि अब प्रत्येक उपयोगकर्ता सर्वर पर लॉगिन के लिए उपलब्ध है (स्पष्ट रूप से केंद्रीय फ़ाइल की दोहरी धार वाली तलवार।)

क्या ऐसा कुछ है जो मैंने इस कॉन्फ़िगरेशन में याद किया है? क्या मैंने खुद को उजागर किया है, या यह व्यक्तिगत authorized_keysफ़ाइलों की तुलना में बेहतर समाधान है ?

सर्वर प्रबंधन की बात होने पर मैं हरा हूं , लेकिन बुरे काम करने के लिए बुरा नाम कहे जाने के लिए पूरी तरह तैयार हूं। : डी


1
इंटरनेट पर कम से कम सार्वजनिक कुंजियाँ (रीड-ओनली) उजागर हो रही हैं जो सबसे बड़ा जोखिम नहीं है ... (यह हमलावरों को यह देखने की अनुमति दे सकता है कि क्या वे एक निजी कुंजी के साथ सर्वर में लॉग इन कर सकते हैं जो उन्होंने हालांकि कहीं और प्राप्त किया है, लेकिन यह नहीं होगा 'टी उन्हें बस उस प्राप्त करने से लॉग इन करने की अनुमति दें ...) (गंभीर मुद्दे हैं अगर कोई id_rsaफ़ाइल है ~/.sshऔर वे इसे पढ़ने का प्रबंधन करते हैं)
गर्ट वैन डेन बर्ग

जवाबों:


51

सभी कुंजी फ़ाइलों को एक ही निर्देशिका में केंद्रीकृत किया जा सकता है और एक ही फ़ाइल में मिश्रित नहीं किया जा सकता है।

बस sshd_configफ़ाइल को इस तरह सेट करें:

AuthorizedKeysFile  /etc/ssh/authorized_keys/%u

अपने सर्वर पर:

  • www-data कुंजियाँ होंगी /etc/ssh/authorized_keys/www-data
  • रूट कीज़ में होंगे /etc/ssh/authorized_keys/root

एक्सेस अधिकारों के बारे में, ये सेटिंग sshd द्वारा स्वीकार की जाती हैं:

/etc/ssh/authorized_keysके पास स्वामित्व है root:rootऔर इसमें मोड 755 है। प्रमुख फाइलें स्वामित्व में हैं root:rootऔर इसमें मोड 644 है।

अन्य मोड काम कर सकते हैं लेकिन मैंने उनका परीक्षण नहीं किया है।


3
+1, लेकिन मैं दूसरों को थोड़ा सेट नहीं करूंगा। उपयोगकर्ता के लिए% u फ़ाइलों का स्वामित्व सेट करें ताकि यह आवश्यक न हो।
एरोन कोपले

1
इस समस्या का अच्छा समाधान है कि दुर्भावनापूर्ण उपयोगकर्ता अपनी ~ / .shsh / अधिकृत_की अन्य लोगों को पहुँच प्रदान करने के लिए अधिक सार्वजनिक कुंजी जोड़ सकते हैं।
bassassssiiee

मैंने अभी पुष्टि की है कि मोड 600 उपयोगकर्ता की अधिकृत कुंजी फ़ाइल के लिए काम नहीं करता है; इसे 644
लुइस ई।

@bbaassssiiee यह पूरी तरह से इस मुद्दे को हल नहीं करता है। वे सिर्फ अपनी निजी कुंजी साझा कर सकते हैं, जिस पर वे पहुंच देना चाहते हैं (यह संभावना बेशक कम हो सकती है, लेकिन यह जवाब इसे शून्य करने के लिए बिल्कुल शून्य है)
डायलनयुंग

1
@DylanYoung मैं स्वीकार करता हूं कि निजी कुंजी साझा करना संभव है। लेकिन chattr के साथ मैं अधिकृत_की फाइलों तक पहुंच को रद्द कर सकता हूं ताकि मैं उन विशेष रूप से वितरित कर सकूं, हर फाइल में एक पंक्ति की सुरक्षा भी कर सकूं।
bbaassssiiee

15

आम तौर पर बोलते हुए मैं वह नहीं करता जो आप सुझा रहे हैं। यह आम धारणाओं को तोड़ता है (जैसे ~/.ssh/authorized_keysआपके उपयोगकर्ताओं के लिए काम करना, और उन समस्याओं का परिचय देता है जो आपने अपने प्रश्न में पहले ही बताई हैं। यदि आप कार्यान्वयन से पहले समस्याओं को देखते हैं तो इसका मतलब है कि आपका समाधान आदर्श नहीं है।

सुरक्षा के लिहाज से मैं भी लगता है कि यह एक है भयानक विचार सब लोग शेयर एक सेवा खाता है: अभी यह सिर्फ आप है, और आप जानते हैं कि आप परिवर्तन करने से एक हैं। 5 साल में जब आपके पास 5 एडमिट होते हैं, तो आप जानना चाहते हैं कि किसने क्या बदला, और ऑडिट लॉग के माध्यम से खुदाई करके देखें कि किसने किस समय एक शाही दर्द का इस्तेमाल किया।
आप बेहतर हैं कि लोग खुद को लॉग इन करें और sudoअपने विशेषाधिकारों को बढ़ाने के लिए उपयोग करें या कुछ इसी तरह करें और जो कुछ भी उन्हें करने की आवश्यकता है वह करें।


यदि आप अभी भी SSH कुंजियों को केंद्रीकृत करना चाहते हैं, तो मैं सुझाव देता हूं कि उपयुक्त निर्देशिकाओं में फ़ाइलों को प्रबंधित / वितरित करने के लिए कठपुतली या रेडिमाइंड जैसी तैनाती प्रणाली की तलाश करें (या घर में एक समाधान को हैक करें जो कि उनके स्थान पर एससीपी हो)। जब आप कई सर्वरों का विस्तार करते हैं, तो आप OpenSSH के पुराने संस्करणों के लिए LDAP सार्वजनिक कुंजी पैच में देखना चाहते हैं (या OpenSSH के नए संस्करण में निर्देश और एक उपयुक्त स्क्रिप्ट) और साथ ही आप अपने उपयोगकर्ताओं को केंद्रीकृत कर सकते हैं और वितरित नहीं करना होगा आपके नेटवर्क पर उनकी चाबियाँ, लेकिन आपके लिए सड़क से बहुत दूर होने की संभावना है।authorized_keys~user/.ssh/
AuthorizedKeysCommand


1
साझाकरण तर्क के लिए +1। कम किया गया क्योंकि मुझे इसके निहितार्थ का एहसास होने में कुछ समय लगा: कोई ~ www-data / .ssh निर्देशिका बिल्कुल नहीं होनी चाहिए, इसलिए वेब ब्राउज़र द्वारा कोई सुरक्षा जोखिम नहीं।
थिटोन

प्रतिक्रिया के लिए धन्यवाद! अगर मैं तुम्हें ठीक से समझ रहा हूं। मुझे एक ssh कुंजी के माध्यम से न तो rootऔर न ही www-dataसुलभ होना चाहिए, क्या यह सही है?
गैविन मिलर

1
एक ~www-data/.sshनिर्देशिका होना कोई भयानक बात नहीं है (उचित अनुमतियों के साथ यह एक बहुत बड़ा जोखिम नहीं है), लेकिन यदि आप ~www-data/.sshइसका उपयोग करने जा रहे हैं, तो संभवत: यह बेहतर नहीं है कि आपका वेबरोट होना चाहिए ~www-data(या तो वेबरॉट को स्थानांतरित करें या www-dataघर की निर्देशिका को स्थानांतरित करें )। उपयोगकर्ताओं का भेदभाव बड़ा तर्क IMHO है - मुझे पता है कि अगर मैं jsmithलॉग इन देखता हूं तो मुझे पता है कि यह जॉन स्मिथ है। यदि मुझे www-dataलॉग इन दिखाई देता है तो मुझे यह जानने के लिए अधिक खुदाई करने की आवश्यकता है कि कौन था।
voretaq7 15

Www-data के लिए मुझे ssh कुंजी की आवश्यकता का कारण यह है कि मैं SFTP पर तैनाती करने के लिए Beanstalk (SCM & तैनात उपकरण) का उपयोग कर रहा हूं। क्या मुझे फ़्रीपिंग करने के लिए बीनस्टॉक के लिए एक अलग खाता बनाना चाहिए? वहाँ सबसे अच्छा समाधान क्या होगा?
गैविन मिलर

1
जिस तरह से यह सबसे सिस्टम पर है AuthorizedKeysFileमें /etc/ssh/sshd_configकरने के लिए चूक %h/.ssh/authorized_keys। यहाँ %hघर निर्देशिका के लिए एक प्लेसहोल्डर है। क्या आप इसे /some/folder/ssh_keys_by_user/%h/या यहां तक ​​कि सेटिंग से रखता है /root/ssh_keys/%u। आप संबंधित उपयोगकर्ता को उसकी व्यक्तिगत फ़ाइल तक पहुँच प्रदान कर सकते हैं (और केवल उसकी) फ़ाइल को मानक स्थान के साथ लिंक करते हैं (साथ ln -s /root/ssh_keys_by_user/username /home/username/.ssh/authorized_keys) और औचित्य मान्यताओं को नहीं तोड़ते।
con-f-use
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.