एक स्क्रिप्ट में कमांड लाइन के माध्यम से शेल (चश का उपयोग करके) बदलना


11

स्टार्टअप स्क्रिप्ट में जो एक मशीन स्थापित करता है, मैं चलाना चाहता हूं

chsh -s /bin/zsh

हालाँकि, यह उपयोगकर्ता का पासवर्ड पूछता है। मैं एक पैरामीटर के रूप में पासवर्ड कैसे पास करूं? या अगर मेरे पास सूडो पावर है, तो क्या मैं किसी तरह उस कदम को दरकिनार कर सकता हूं? या वैकल्पिक रूप से, क्या डिफ़ॉल्ट स्टार्टअप शेल को बदलने का एक और तरीका है?

जवाबों:


21

निम्नलिखित लॉक-डाउन खातों को अपने गोले को बदलने से रोकता है, और चुनिंदा लोगों chshको बिना सूडो या सु के उपयोग करने देता है :

सरल सेटअप जो अभी भी सुरक्षित है:

  1. इसमें सबसे ऊपर जोड़ें /etc/pam.d/chsh:

    # This allows users of group chsh to change their shells without a password.
    #
    # Per: http://serverfault.com/questions/202468/changing-the-shell-using-chsh-via-the-command-line-in-a-script
    #
    auth       sufficient   pam_wheel.so trust group=chsh
    
  2. Chsh समूह बनाएँ:

    groupadd chsh
    

किसी भी उपयोगकर्ता को अपना शेल बदलने की अनुमति दी गई है:

    usermod -a -G chsh username

पैसे की धारीदार:

user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/bin/bash
user@host:~$ chsh -s `which zsh`
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/usr/bin/zsh
user@host:~$ 

कार्य समाधान, आश्चर्य है कि यह अभी भी स्वीकार नहीं किया गया है।
डिंपिआक्स

धन्यवाद। यह एक साफ-सुथरा तरीका है जो किसी उपयोगकर्ता को केवल सुडो के बिना कीपर-ओनली ऑर्ट चेंज शेल का उपयोग करने देता है। यह pam.d सामान बहुत दिलचस्प है!
फ्रांस्वा ड्रोलेट

4

chsh वास्तव में / etc / passwd में एक उपयोगकर्ता से संबंधित लाइन को बदलता है, हालांकि एक उपयोगकर्ता केवल / etc / passwd में अपनी 'अपनी' लाइन बदल सकता है। इसलिए, यदि आप किसी अन्य उपयोगकर्ता के लिए शेल बदलना चाहते हैं, तो आपको उसका पासवर्ड चाहिए।

यदि आप वास्तव में इसे करना चाहते हैं (लोरेंजो के पोस्ट में चिंताओं को देखते हुए, और संभावित सुरक्षा चिंताएं) यहां बताया गया है कि कोई भी ऐसा कैसे कर सकता है:

#visudo

इसके लिए रूट विशेषाधिकारों की आवश्यकता होती है।

कहें कि आप वर्तमान में "ऐलिस" के रूप में चल रहे हैं और पासवर्ड के बिना "बॉब" शेल को बदलना चाहते हैं;

फ़ाइल में जोड़ें:

Cmnd_Alias     SHELL = /usr/bin/chsh
Runas_Alias    SH    = Bob
alice          ALL   = (SH) NOPASSWD: SHELL

यह सुनिश्चित करता है कि the ऐलिस ’सभी होस्ट्स पर चला सकता है क्योंकि समूह SH के उपयोगकर्ता बिना पासवर्ड के SHELL में कमांड के समूह के रूप में चल सकते हैं।

संभवत: इस तरह से इसे करने के लिए थोड़ा बहुत दूर है, लेकिन यह संभव है।

'विडो', विशेष रूप से सुरक्षा से संबंधित संदेशों के साथ सुडोर्स फ़ाइल को बदलने से पहले "मैन सूडर्स" पढ़ना सुनिश्चित करें!


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

2

आपको उपयोगकर्ता नाम पारित करने की आवश्यकता है; के माध्यम से यह कर sudo(या रूट से) के बिना किया जा रहा है पुराने पासवर्ड पूछा आप किसी उपयोगकर्ता का पासवर्ड / खोल स्थापित करने के लिए अनुमति देगा। कृपया man chshअधिक जानकारी के लिए जाँच करें ।

अब मेरा सवाल है: आप ऐसा क्यों करना चाहेंगे? यदि यह एक सेट-अप स्क्रिप्ट है, तो क्या आपको उपयोगकर्ताओं के शेल को निर्माण के समय (यानी लॉन्च करते समय adduser) नहीं बदलना चाहिए ? यदि आप किसी सिस्टम को दूरस्थ रूप से क्लोन कर रहे हैं, तो क्या आपको इसे /etc/passwdपहले नहीं बदलना चाहिए ? मुझे स्क्रिप्ट के माध्यम से ऐसा करने का कोई कारण नहीं दिखता है, जब तक कि आप पूरी स्थापना प्रक्रिया को स्वचालित नहीं करते हैं और स्थापित किए जाने वाले गोले का चयन पहले उपयोगकर्ता के निर्माण के बाद आता है।


यह एक ec2 मशीन के लिए है (स्क्रिप्ट मैं मशीन शुरू होने के ठीक बाद चलाता हूं)। मैं डिफ़ॉल्ट शुरुआती शेल को बदलना चाहता हूं। "Sudo chsh -s / bin / zsh user_name" करना या तो काम नहीं करता (अभी भी उपयोगकर्ता का पासवर्ड पूछता है)

एक स्क्रिप्ट का उपयोग करने का प्रयास करें, और #!/usr/bin/sudo -s(शेलबैंग लाइन) का उपयोग करें । इसके अलावा, आप यकीन है कि zsh / बिन में है और नहीं, शायद, में / usr / बिन? (बस जाँच, मैं ec2 से परिचित नहीं हूँ)
lorenzog

यह उत्तर अपूर्ण है क्योंकि यह sudoअनुमति मानता है। एक अलग दृष्टिकोण के लिए मेरा देखें sudoजो औसत उपयोगकर्ता के लिए आवश्यक नहीं है ।

0

मेरा मानना ​​है कि आप /etc/passwordसंभवतः passwdकमांड का उपयोग करके फ़ाइल में उपयोगकर्ता के शेल को बदल सकते हैं । मैंने अभी तक इसके माध्यम से नहीं पढ़ा है, लेकिन यह उपयोगी हो सकता है: UNIX शेल अंतर और आपके शेल को कैसे बदलना है


आज्ञा chshया हैं usermodpasswdफ़ाइल को कभी भी सीधे संपादित न करें , इसके लिए हमेशा vipwकमांड का उपयोग करें ।

0

sudo chsh -s /bin/zshफिर कोशिश करें :

  1. सर्वर के लिए बाहर निकलें
  2. टर्मिनल को पुनरारंभ करें
  3. सर्वर में लॉग इन करें, और जाँच echo $SHELL- सफल मामले में यह बदल गया :)

यह वास्तव में रूट उपयोगकर्ता के लिए डिफ़ॉल्ट टर्मिनल के रूप में zsh सेट करेगा।
lcguida

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