Cara yang tepat untuk menambahkan akun pengguna melalui skrip bash

15

Berikut kode skrip yang saya gunakan sekarang:

getent group $MYGROUP
if [ $? -ne 0 ] ; then
    sudo su -c "groupadd $MYGROUP"
fi
sudo su -c "useradd mynewuser -p mypassword -m -g $PRIMARYGRP -G $MYGROUP"

Pendekatan ini bekerja dengan baik pada openSuse. Tetapi ada beberapa masalah dengan akun pengguna yang dibuatnya di Ubuntu jadi saya mencari bantuan di sini.

  • terminal prompt tidak disetel ( echo $PS1tidak menghasilkan apa-apa)
  • tombol panah dan tombol tab tidak berfungsi dengan benar di terminal
  • sepertinya kata sandi tidak berfungsi (walaupun saya masih belum jelas apa masalah ini)
  • hak / etc / sudoers yang ditetapkan untuk pengguna baru ini tidak dihormati

Jika sebaliknya saya secara manual membuat pengguna dengan adduser(bukan useradd) saya tidak memiliki masalah ini di Ubuntu. Tapi saya tidak bisa menggunakan adduserdi openSuse (afaik). Oleh karena itu, saya memerlukan skrip non-Debian-eksklusif atau metode menambahkan akun pengguna melalui skrip bash saya yang berfungsi di Ubuntu (dan tidak berhenti bekerja pada distro lain).

Akhirnya, saya ingin memahami perbedaan antara adduserdan useradd. Sebagai contoh, saya ingin tahu direktori kerangka mana yang digunakan oleh adduserkarena itu mungkin alasannya useraddtidak berfungsi seperti yang diharapkan (karena saya baru saja menerima default).

Terima kasih

MountainX-for-Monica
sumber
1
Adapun perbedaannya: dari halaman manual useradd ( man useradd): useradd adalah utilitas tingkat rendah untuk menambahkan pengguna. Di Debian, administrator biasanya menggunakan adduser (8).
guntbert
Juga, sudo su -c "cmd arg1 arg2"setara dengan sudo cmd arg1 arg2.
enzotib
@enzotib terima kasih. Bagus untuk mengetahui bahwa itu setara di Ubuntu karena tidak ada di openSuse. Oleh karena itu, saya akan terus menggunakan sudo su -c "cmd arg1 arg2"agar berfungsi di mana pun saya membutuhkannya untuk berfungsi.
MountainX-for-Monica
adduseradalah skrip perl yang panjangnya lebih dari 1000 baris, jadi untuk perbedaannya Anda bisa melihat skripnya.
enzotib
@enzotib Ya, saya sudah membaca addusertetapi saya tidak tahu perl. Jadi itu bukan pendekatan yang baik untuk saya.
MountainX-for-Monica

Jawaban:

14

Solusi saya diberikan di sini: /unix/82923/proper-way-to-add-a-user-account-via-bash-script oleh Ulrich Schwarz dan Joseph R .. Hal utama yang harus saya lakukan adalah menambah perintah -s /bin/bashsaya yang ada useradddan menghapus -p passwordyang mengharapkan kata sandi terenkripsi.

sudo su -c "useradd mynewuser -s /bin/bash -m -g $PRIMARYGRP -G $MYGROUP"

Kemudian lakukan ini:

sudo chpasswd << 'END'
mynewuser:password
END
MountainX-for-Monica
sumber
6
echo mynewuser:password | sudo chpasswdbekerja juga.
Felix Rabe
10

Ini akan bekerja

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd
Ankur Devani
sumber
Ini adalah solusi yang lebih mudah daripada jawaban yang diterima.
Steven
2

skrip saya yang secara otomatis membuat akun layanan dengan login kunci ssh dan tanpa kata sandi

#add service group/user
addgroup service-runner
useradd devops-service --create-home --shell /bin/bash --groups service-runner
#gpasswd -a devops-service sudo #allowing sudo requires password, and not a good idea for a service account.
mkdir /home/devops-service/.ssh
chmod 700 /home/devops-service/.ssh
cat devops-service@v2-20150312.pub >> /home/devops-service/.ssh/authorized_keys
chown devops-service:devops-service /home/devops-service -R
JasonS
sumber
fyi, setelah menggunakan skrip saya, saya melihat bahwa "sudo" cukup banyak tidak berguna dengan akun layanan, karena tidak ada kata sandi berarti tidak dapat menggunakan sudo. Anda dapat mengonfigurasinya untuk mengizinkan sudo tanpa kata sandi melalui visudo tetapi saya tidak tahu cara mengotomatiskannya dalam skrip. Juga, mungkin akun layanan dengan sudo tanpa kata sandi bukanlah ide (keamanan) yang baik.
JasonS
0

Saya kira Anda dapat menggunakan kondisi dalam skrip Anda, seperti

if grep -q 'Ubuntu\|Debian' /etc/issue; then
    adduser .....
else
    useradd .....
fi

(tidak dapat memverifikasi apakah file /etc/issuetersebut ada di OpenSUSE, jika tidak, Anda dapat menempatkan kondisi pada keberadaan file seperti itu).

enzotib
sumber
Mengapa tidak sekadar menguji keberadaan adduserdengan if command -v adduser >/dev/null; thenatau suka? Itulah satu-satunya hal yang penting dan bukan distribusi yang mendasarinya. Juga, ada distribusi lain selain Debian / Ubuntu dan OpenSUSE.
David Foerster