कठपुतली में, मैं एक पासवर्ड चर (इस मामले में एक MySQL पासवर्ड) को कैसे सुरक्षित करूंगा?


13

मैं पैरामीटर श्रेणी के साथ MySQL का प्रावधान करने के लिए कठपुतली का उपयोग कर रहा हूं:

class mysql::server( $password ) {

        package { 'mysql-server': ensure => installed }
        package { 'mysql': ensure => installed }

        service { 'mysqld':
                enable => true,
                ensure => running,
                require => Package['mysql-server'],
        }

        exec { 'set-mysql-password':
                unless => "mysqladmin -uroot -p$password status",
                path => ['/bin', '/usr/bin'],
                command => "mysqladmin -uroot password $password",
                require => Service['mysqld'],
        }
}

मैं कैसे रक्षा कर सकता हूं $password? वर्तमान में, मैंने नोड परिभाषा फ़ाइल से डिफ़ॉल्ट विश्व पठनीय अनुमति को हटा दिया और puppetएसीएल के माध्यम से स्पष्ट रूप से पढ़ने की अनुमति दी ।

मुझे लगता है कि दूसरों को एक समान स्थिति में आ गए हैं तो शायद एक बेहतर अभ्यास है।

जवाबों:


3

कठपुतली और MySQL के साथ काम करते समय, मैं रूट पासवर्ड /root/.my.cnf में डाल देता हूं, इस फाइल को बंद कर देता हूं, और फिर डेटाबेस सर्वर पर एसएसएच एक्सेस को प्रतिबंधित करता हूं।

हां, स्पष्ट पाठ में db सर्वर पर रूट पासवर्ड संग्रहीत करना सबसे सुरक्षित समाधान नहीं है। हालाँकि यदि आप इस फ़ाइल में mysql रूट पासवर्ड लिखते हैं, तो mysql रूट खाते को सुरक्षित करने के लिए लोकलहोस्ट से लॉगिन की अनुमति देता है, केवल पासवर्ड को कठपुतली से बाहर रखेगा, और प्रक्रिया सूची psतालिका से बाहर भी ।

इसके अतिरिक्त, यदि किसी के पास /root/.my.cnf पर फ़ाइल पढ़ने के लिए रूट एक्सेस है, तो उनके पास संभवतः स्थानीय MySQL डेमॉन को रोकने के लिए भी एक्सेस है और डेटाबेस में तत्काल रूट एक्सेस प्राप्त करने के लिए उपयोगकर्ता तालिका के बिना डेमॉन को पुनरारंभ करें।


2
अगर mysql 5.6 और बाद में mysql_config_editor का उपयोग करें। फिर कम से कम पासवर्ड सादे पाठ में नहीं होगा।
केजौ टुरे

1

कोई अन्य व्यक्ति कुछ प्लग-इन या इसी तरह की बात कर सकता है जो मुझे सही करता है, लेकिन इसके बारे में जाने का सामान्य तरीका एन्क्रिप्टेड पासवर्ड को स्टोर करना है , न कि सादे टेक्स्ट पासवर्ड को।

हालाँकि, मैं आपको अभी बता सकता हूं, MySQL आपको एन्क्रिप्टेड पासवर्ड का उपयोग करने की अनुमति नहीं देता है - अन्यथा, यह कि पासवर्ड होना चाहिए, और हैश आपको किसी भी रास्ते से प्रवेश करने की अनुमति देगा।

इसके आसपास बहुत सारे "हैक" हैं जो आपको तृतीय-पक्ष उपयोगिताओं जैसे कि हिरा और जीपीजी का उपयोग करने की अनुमति देते हैं । जाहिर है, आप अपना रोल कर सकते हैं - लेकिन यहां तक ​​कि कठपुतली की अपनी मेलिंग सूची भी इस पद्धति का सुझाव देती है


1

आपने यह निर्दिष्ट नहीं किया कि आप इस पासवर्ड की सुरक्षा किससे कर रहे हैं। मुझे लगता है कि यह अन्य sysadmins या संभवतः डेवलपर्स है जो कठपुतली मास्टर और / या ग्राहक बक्से तक पहुंच है, लेकिन रूट पासवर्ड जानने की जरूरत नहीं है।

प्रारंभ में पासवर्ड सेट करने के लिए, आप इस सिंटैक्स का उपयोग कर सकते हैं:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6DF1FC54F0CCD999F55D59D3D88526878230C77C' WITH GRANT OPTION;

जो आपको प्लेनटेक्स्ट के बजाय अपने कठपुतली विन्यास में एक एन्क्रिप्टेड पासवर्ड को स्टोर करने की अनुमति देगा।

कमांड लाइन पर उपयोग करने वाले mysqladminऔर mysqlक्लाइंट के लिए, सबसे अच्छा मैं यह सोच सकता हूं कि .my.cnfआपके कठपुतली विन्यास में एक फ़ाइल जोड़ना है जो एक उपयुक्त उपयोगकर्ता के घर निर्देशिका में तैनात हो जाता है। कठपुतली मास्टर और ग्राहकों पर दोनों में फ़ाइल उपयुक्त, प्रतिबंधात्मक फ़ाइल अनुमतियाँ होनी चाहिए।

जब आप कठपुतली को मिक्स में जोड़ते हैं, तो उन फ़ाइल अनुमतियों के आस-पास बहुत सारे तरीके होते हैं (जैसे कि एक निष्पादन लिखना) (जो ग्राहकों से फ़ाइल खींचता है) लेकिन यह एक विश्व पठनीय फ़ाइल में पासवर्ड को संग्रहीत करने पर एक सुधार प्रतीत होगा। यह अधिक कठिन होगा यदि आप अपने कठपुतली विन्यास के लिए एक संस्करण प्रणाली का उपयोग करते हैं।


1
लेकिन अगर कोई एन्क्रिप्टेड पासवर्ड प्राप्त कर लेता है, तो क्या वे लॉगिन करने के लिए एन्क्रिप्टेड स्ट्रिंग का उपयोग नहीं कर सकते हैं?
एंड्रयू एम।

@Redmumba मेरे सभी परीक्षण से संकेत मिलता है। शायद मुझे कुछ याद आ रहा है जिसे लादादादा विस्तृत रूप से बता सकते हैं।
बेलमिन फर्नांडीज

3
जब आप MySQL के IDENTIFIED BY PASSWORD '*HASH-HERE'बजाय उपयोग IDENTIFIED BY 'PASSWORD-HERE'करते हैं तो सीधे हैश को userतालिका में सम्मिलित करता है । फिर आपको उस पासवर्ड का उपयोग करना होगा जो कि लॉग इन करने के लिए हैश उत्पन्न करता है। आप देख सकते हैं कि पासवर्ड हैश के साथ आपकी अनुदान कमांड सामान्य रूप से लॉग इन करके और टाइप करके दिखाई देगी SHOW GRANTS;। आप अन्य उपयोगकर्ताओं के साथ भी चेक कर सकते हैंSHOW GRANTS FOR user@host;
लादादादा

आह, तो आप लॉगिन करने के लिए खुद हैश का उपयोग नहीं कर सकते, मैं देखता हूं। हालाँकि, अगर उसके पास एक क्लाइंट है जिसे डेटाबेस से जुड़ने की जरूरत है - कहते हैं, उसका फ्रंट एंड - उसे एन्क्रिप्टेड पासवर्ड को स्टोर करने के तरीके की भी आवश्यकता होगी, जो कि विचार के लिए भोजन है।
एंड्रयू एम।

0

यह लिंक दो तरीकों का सुझाव देता है: पर्यावरण चर का उपयोग करना, और उपधारा का उपयोग करना।

मुझे लगता है कि आप अपने कमांड के चारों ओर एक साधारण रैपर भी बना सकते हैं mysqladminऔर अपने एन्क्रिप्टेड पासवर्ड को पास कर सकते हैं। यह आवरण फिर पासवर्ड को डिक्रिप्ट करेगा और इसे पास करेगा mysqladmin। आपको अपने रैपर को सुरक्षित रखने की आवश्यकता है क्योंकि इसमें डिक्रिप्शन भाग शामिल है।

आप अपने पर्यावरण के आधार पर जिस तरह से इसे और अधिक सुरक्षित महसूस करते हैं उसे चुन सकते हैं और जिसकी आपके सिस्टम तक पहुंच है।

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