Komut dosyasındaki komut satırı üzerinden kabuğu (chsh kullanarak) değiştirme


11

Bir makine kuran bir başlangıç ​​komut dosyasında, çalıştırmak istiyorum

chsh -s /bin/zsh

Ancak, bu kullanıcının şifresini ister. Parolayı parametre olarak nasıl iletirim? Veya sudo gücüm varsa, bir şekilde bu adımı atlayabilir miyim? Veya alternatif olarak, varsayılan başlangıç ​​kabuğunu değiştirmenin başka bir yolu var mı?

Yanıtlar:


21

Aşağıdakiler kilitli hesapların mermilerini değiştirmesini önler ve seçici olarak insanların chshsudo veya su OLMADAN kendilerini kullanmasına izin verir :

Hala güvenli olan basit kurulum:

  1. Şunun en üstüne ekleyin /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 grubunu oluşturun:

    groupadd chsh
    

Kabuklarını değiştirmesine izin verilen herhangi bir kullanıcı için:

    usermod -a -G chsh username

Para çekimi:

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:~$ 

Çalışma çözümü, bunun hala kabul edilmediğini merak ediyorum.
dimpiax

Teşekkürler. Bu, sudo olmadan yalnızca keypair auth change shell'i kullanan bir kullanıcıya izin vermenin en temiz yolu gibi görünüyor. Bu pam.d şeyler çok ilginç!
François Drolet

4

chsh aslında / etc / passwd içindeki bir kullanıcıya ait satırı değiştirir, ancak bir kullanıcı sadece / etc / passwd içindeki kendi 'satırını' değiştirebilir. Bu nedenle, başka bir kullanıcı için kabuğu değiştirmek isterseniz, parolasına ihtiyacınız vardır.

Gerçekten yapmak istiyorsanız (Lorenzo'nun gönderisindeki endişeler ve olası güvenlik endişeleri göz önüne alındığında) bunu nasıl yapabilirsiniz:

#visudo

Bu, kök ayrıcalıkları gerektirir.

Şu anda "alice" olarak çalıştığınızı ve "bob's" kabuğunu şifresiz değiştirmek istediğinizi varsayalım;

Dosyaya ekle:

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

Bu, 'alice'nin tüm ana bilgisayarlarda SH grubundaki kullanıcılar parola olmadan SHELL içindeki komut grubunu çalıştırabilmesini sağlar.

Muhtemelen bu şekilde yapmak için biraz uzak, ama mümkün.

Sudores dosyasını 'visudo' ile, özellikle güvenlikle ilgili mesajları değiştirmeden önce "man sudoers" yazdığınızdan emin olun!


Sorun, sudobir sistemi atlatmanın ve köklendirmenin son derece kolay olmasıdır. sudoersBaşka bir şekilde karşılanamayacak özel bir ihtiyaç (setuid / setgid yürütülebilir, grup izinleri, vb.) Olmadığı sürece asla değiştirmek daha iyidir .

2

Kullanıcı adını iletmeniz gerekiyor; bunu sudo(veya kök yoluyla ) yapmak, eski parola sorulmadan bir kullanıcının parolasını / kabuğunu ayarlamanıza olanak tanır. Lütfen man chshdaha fazla bilgi için kontrol edin .

Şimdi sorum şu: neden bunu yapmak istesin? Bu bir kurulum betiğiyse, kullanıcıların kabuğunu yalnızca oluşturma sırasında (yani fırlatma sırasında adduser) değiştirmemelisiniz? Bir sistemi uzaktan klonluyorsanız, /etc/passwdönce onu değiştirmemelisiniz ? Tüm kurulum işlemini otomatikleştirmedikçe ve kurulacak mermilerin seçimi ilk kullanıcının oluşturulmasından sonra gelmedikçe, bunu bir komut dosyası aracılığıyla yapmak için hiçbir neden göremiyorum.


Bir ec2 makinesi için (makine başlatıldıktan hemen sonra çalıştırdığım komut dosyası). Varsayılan başlangıç ​​kabuğunu değiştirmek istiyorum. "Sudo chsh -s / bin / zsh user_name" yapmak da çalışmaz (hala kullanıcının şifresini sorar)

bir komut dosyası kullanmayı deneyin ve #!/usr/bin/sudo -s(shebang line) kullanın . Ayrıca, zsh'nin / bin'de olduğundan ve belki / usr / bin'de olmadığından emin misiniz? (sadece kontrol ediyorum, ec2'ye aşina değilim)
lorenzog

Bu cevap, sudoizin aldığı için eksiktir . sudoOrtalama bir kullanıcı için gerekli olmayan farklı bir yaklaşım için benimkine bakın .


0

Deneyin sudo chsh -s /bin/zsh, sonra:

  1. sunucu için çıkış
  2. terminali yeniden başlat
  3. sunucuya giriş yapın ve kontrol edin echo $SHELL- başarılı bir durumda değişti :)

Bu aslında zsh'ı kök kullanıcı için varsayılan terminal olarak ayarlayacaktır.
lcguida

@lcguida doğru.
dimpiax
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.