Mengubah shell (menggunakan chsh) melalui baris perintah dalam skrip


11

Dalam skrip startup yang mengatur mesin, saya ingin menjalankan

chsh -s /bin/zsh

Namun, ini meminta kata sandi pengguna. Bagaimana cara memasukkan kata sandi sebagai parameter? Atau jika saya memiliki kekuatan sudo, bisakah saya melewati langkah itu? Atau sebagai alternatif, apakah ada cara lain untuk mengubah shell startup default?

Jawaban:


21

Berikut ini mencegah akun terkunci dari mengganti cangkang mereka, dan secara selektif memungkinkan orang menggunakan chshsendiri TANPA sudo atau su:

Pengaturan sederhana yang masih aman:

  1. Tambahkan ini paling atas /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. Buat grup chsh:

    groupadd chsh
    

Untuk setiap pengguna yang diizinkan mengganti shell mereka:

    usermod -a -G chsh username

Uang tembakan:

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

Solusi yang bekerja, heran bahwa ini masih belum diterima.
dimpiax

Terima kasih. Ini tampaknya menjadi cara terbersih untuk membiarkan pengguna menggunakan shell penggantian automatis hanya-keypair tanpa sudo. Hal-hal pam.d ini sangat menarik!
François Drolet

4

chsh sebenarnya mengubah baris yang berkaitan dengan pengguna di / etc / passwd, meskipun pengguna hanya bisa mengubah 'line' sendiri di / etc / passwd. Karenanya, jika Anda ingin mengganti shell untuk pengguna lain, Anda memerlukan passwd-nya.

Jika Anda benar-benar ingin melakukannya (mengingat kekhawatiran di pos Lorenzo, dan kemungkinan masalah keamanan) berikut ini cara melakukannya:

#visudo

Ini membutuhkan hak akses root.

Katakanlah Anda sedang menjalankan sebagai "alice" dan ingin mengubah "bob" shell tanpa kata sandi;

Tambahkan ke file:

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

Ini memastikan 'alice' dapat berjalan di semua host sebagai pengguna di grup SH tanpa kata sandi grup perintah di SHELL.

Mungkin agak jauh untuk melakukannya dengan cara ini, tetapi itu mungkin.

Pastikan untuk membaca "man sudoers" sebelum mengubah file sudores dengan 'visudo', terutama pesan yang berkaitan dengan keamanan!


Masalahnya sudoadalah sangat mudah untuk mengelak dan me-root suatu sistem. Lebih baik tidak pernah berubah sudoerskecuali ada kebutuhan khusus yang tidak dapat dipenuhi dengan cara lain (setuid / setgid dieksekusi, izin grup, dll.).

2

Anda harus memasukkan nama pengguna; melakukan ini melalui sudo(atau dengan root) akan memungkinkan Anda untuk mengatur kata sandi / shell pengguna tanpa diminta kata sandi lama. Silakan periksa man chshinformasi lebih lanjut.

Sekarang pertanyaan saya adalah: mengapa Anda ingin melakukan itu? Jika ini adalah skrip pengaturan, bukankah sebaiknya Anda hanya mengganti shell pengguna pada waktu pembuatan (yaitu saat meluncurkan adduser)? Jika Anda mengkloning sistem dari jarak jauh, tidakkah Anda harus mengubahnya /etc/passwdterlebih dahulu? Saya tidak melihat alasan untuk melakukannya melalui skrip, kecuali jika Anda mengotomatiskan seluruh proses instalasi dan pemilihan cangkang yang akan dipasang muncul setelah pembuatan pengguna pertama.


Ini untuk mesin ec2 (skrip saya jalankan tepat setelah mesin dinyalakan). Saya ingin mengubah shell awal default. Melakukan "sudo chsh -s / bin / zsh user_name" tidak berfungsi dengan baik (masih meminta kata sandi pengguna)

coba gunakan skrip, dan gunakan #!/usr/bin/sudo -s(baris shebang). Juga, Anda yakin zsh ada di / bin dan tidak, mungkin, di / usr / bin? (hanya memeriksa, saya tidak terbiasa dengan EC2)
lorenzog

Jawaban ini tidak lengkap karena menerima sudoizin. Lihat milikku untuk pendekatan berbeda yang tidak diperlukan sudountuk pengguna biasa.

0

Saya percaya Anda dapat mengubah shell pengguna di /etc/passwordfile, mungkin dengan menggunakan passwdperintah. Saya belum membacanya tetapi ini mungkin berguna: perbedaan shell UNIX dan cara mengganti shell Anda .


Perintahnya adalah chshatau usermod. Jangan pernah mengedit passwdfile secara langsung, selalu gunakan vipwperintah untuk itu.

0

Coba sudo chsh -s /bin/zsh, kemudian:

  1. keluar untuk server
  2. restart terminal
  3. masuk ke server, dan periksa echo $SHELL- jika berhasil berubah :)

Ini sebenarnya akan menetapkan zsh sebagai terminal default untuk pengguna root.
lcguida

@ lcguida benar.
dimpiax
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.