Sudo su - postgres और sudo -u postgres में क्या अंतर है?


36

PostgreSQL उपयोगकर्ता डिफ़ॉल्ट रूप से यूनिक्स सॉकेट पर सहकर्मी प्रमाणीकरण करते हैं, जहां यूनिक्स उपयोगकर्ता को PostgreSQL उपयोगकर्ता के समान होना चाहिए। इसलिए लोग बार-बार सुपरसुसर का उपयोग करते हैं suया sudoबनने के लिए postgres

मैं अक्सर लोगों को निर्माणों का उपयोग करते हुए देखता हूं जैसे:

sudo su - postgres

बजाय

sudo -u postgres -i

और मैं सोच रहा हूँ क्यों। इसी तरह, मैंने देखा है:

sudo su - postgres -c psql

के बजाय

sudo -u postgres psql

यदि आप बिना किसी पुराने प्लेटफॉर्म पर थे, तो अग्रणी sudoके बिना suसंस्करण कुछ मायने रखेगा sudo। लेकिन क्यों यह कम से कम पूर्वगामी UNIX या लिनक्स का उपयोग करेगा sudo su?


जवाबों:


40

भूल जाओ sudo su

उपयोग करने के लिए कोई लाभ नहीं है sudo su, यह तब से एक अभिरंजित आदत है जब लोगों को उपयोग करने के लिए इस्तेमाल किया गया था susudoजब लिनक्स डिस्ट्रोस ने रूट पासवर्ड सेट करना बंद कर दिया और sudoरूट अकाउंट एक्सेस करने का एकमात्र तरीका बना तो लोगों ने सामने आना शुरू कर दिया । अपनी आदतों को बदलने के बजाय, उन्होंने बस इस्तेमाल किया sudo su। (मैं अपेक्षाकृत हाल ही में उनमें से एक था जब sudoersविन्यास वाले बक्से का उपयोग करके मुझे अपनी आदत बदलने के लिए मजबूर किया गया था)।

उपयोग sudo -u

एक लॉगिन शेल के लिए, sudo -u postgres -iबेहतर है sudo su - postgres। इसकी आवश्यकता नहीं है कि उपयोगकर्ता के पास रूट एक्सेस है /etc/sudoers, उन्हें केवल उपयोगकर्ता बनने के अधिकार की आवश्यकता है postgres। यह आपको बेहतर पहुंच नियंत्रण लागू करने की सुविधा भी देता है।

कमान के निष्पादन के लिए

sudo -u postgres psql -c "SELECT 1"

विकल्प से बेहतर है:

sudo su - postgres -c "psql -c \"SELECT 1\""

उस में आपको डबल-भागने के उद्धरण और अन्य शेल मेटाचैकर के साथ-साथ रूट की आवश्यकता नहीं होने के अन्य सुरक्षा लाभ नहीं हैं। आप शायद गलती से लेखन में उतर जाएंगे:

sudo su - postgres -c psql -c "SELECT 1"

कभी-कभी, जो ठीक से काम नहीं करेगा।

अंत में, यह पर्यावरण के चर के माध्यम से सेट करना आसान है sudo, जैसे

sudo PATH=/usr/pgsql-9.3/bin:$PATH -u postgres /usr/pgsql-9.3/bin/initdb -D /var/lib/pgsql/testcluster

के माध्यम से su। (यहां, PATHसेटिंग की आवश्यकता है ताकि initdbसही postgresनिष्पादन योग्य मिल सके )।

इसलिए। suआदेश मौजूद है भूल जाओ । अब आपको इसकी आवश्यकता नहीं है आदत को तोड़ने के लिए, इसे किसी ऐसी चीज़ के लिए उपनाम दें जो एक त्रुटि प्रिंट करेगी। (कुछ init और पैकेज सेटअप स्क्रिप्ट अभी भी उपयोग करते हैं suइसलिए आप इसे हटा नहीं सकते, हालांकि)।

यह भी देखें:

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