Langkah apa yang dibutuhkan untuk membuat pengguna baru dari baris perintah?

27

Perintah apa (atau skrip) dapat membuat akun pengguna yang berfungsi penuh di Mountain Lion, berjalan hanya dari baris perintah melalui terminal atau ssh.

Sepertinya ada sepasang dari jawaban mungkin bekerja, tapi saya bertanya-tanya apakah ada script pendek atau alat untuk membuat sepenuhnya account pengguna fungsional pada Mountain Lion?

bmike
sumber

Jawaban:

33

Berikut ini adalah skrip shell yang saya tulis di tempat kerja untuk menangani ini sebagai bagian dari proses NetInstall (membuat akun administrator lokal secara otomatis selama proses pencitraan).

#!/bin/sh
. /etc/rc.common
dscl . create /Users/administrator
dscl . create /Users/administrator RealName "Administrator Account"
dscl . create /Users/administrator hint "Password Hint"
dscl . create /Users/administrator picture "/Path/To/Picture.png"
dscl . passwd /Users/administrator thisistheaccountpassword
dscl . create /Users/administrator UniqueID 501
dscl . create /Users/administrator PrimaryGroupID 80
dscl . create /Users/administrator UserShell /bin/bash
dscl . create /Users/administrator NFSHomeDirectory /Users/administrator
cp -R /System/Library/User\ Template/English.lproj /Users/administrator
chown -R administrator:staff /Users/administrator

Beberapa catatan menyebutkan:

  • Saya menyimpan ini sebagai file ".sh" yang dapat dieksekusi.
  • Karena dijalankan selama NetInstall berjalan sebagai root, dan perlu dijalankan sebagai root untuk bekerja dengan benar. Anda juga dapat mengurangi dua baris pertama, menambahkan "sudo" ke awal setiap baris berikutnya, dan secara manual menjalankan ini sebagai perintah individu di Terminal.
  • Ubah UniqueID dari 501 ke angka yang Anda tahu aman di semua sistem (501 diambil oleh akun pertama yang dibuat di Mac, umumnya sesuatu yang lebih tinggi seperti 550 mungkin akan aman, tergantung pada berapa banyak pengguna yang Anda miliki di sistem Anda) .
  • PrimaryGroupID dari 80 menciptakan pengguna Admin. Ubah ke PrimaryGroupID dari 20 untuk membuat pengguna standar.
  • Saya telah mencitrakan lebih dari 50 Mac dengan cara ini tanpa masalah. Saya menggunakan akun ini untuk menjalankan perintah melalui SSH, untuk mendorong keluar tambalan melalui ARD dan untuk melakukan administrasi sisi meja lokal.
bispymusic
sumber
Tampak menjanjikan - akan segera mengujinya!
bmike
Masalah yang tampaknya saya miliki ketika saya mencoba dan mengadaptasi skrip ini untuk membuat pengguna biasa dengan mengirimkan variabel ke skrip adalah bahwa semuanya kecuali baris terakhir berfungsi dengan baik. Yaitu, dscl menciptakan pengguna, dan ketika saya menggunakan dscl. daftar / pengguna, pengguna muncul dengan baik, tetapi chown tidak mengenali pengguna, dan karena saya tidak dapat mengubah izin direktori home dengan benar, itu tidak akan membiarkan pengguna itu masuk. Ada ide?
Aku harap aku bisa. Salah satu kelemahan saya ketika datang ke shell scripting adalah bahwa saya tidak pernah mempelajari penggunaan variabel dengan sangat baik, terutama karena saya belum benar-benar perlu menggunakannya untuk apa pun pada titik ini dalam pekerjaan saya. Mungkin @bmike atau orang lain mungkin bisa memberikan saran.
bispymusic
@ HackintoshCoat dapatkah Anda memposting skrip? Dalam perintah Anda, Anda telah mengetikkan huruf kecil "/ pengguna", padahal sebenarnya "/ Pengguna". Saya ragu itu masalah dengan skrip Anda; tetapi, mata yang baru memeriksanya mungkin bisa menemukan masalah dengan cukup cepat. Saya punya skrip serupa yang benar-benar mengatur banyak pengguna, jadi penggunaan variabel itu sendiri tidak masalah.
Kent
2
Alih-alih dua baris terakhir ( cp -R ...; chown -R ...), Anda bisa menggunakan perintah createhomedir -u administrator. createhomedirmemiliki halaman manual juga.
Alex Leach
14

Untuk mengotomatisasi ini lebih lanjut, baris berikut dapat digunakan untuk mendapatkan id pengguna "tersedia" berikutnya jika Anda menjalankan pada mac yang sudah memiliki pengguna mengatur.

LastID=`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1`

NextID=$((LastID + 1))

Kemudian, baris yang sesuai dalam jawaban bispymusic di atas dapat diubah:

 dscl . create /Users/administrator UniqueID $NextID
Kent
sumber
2

Saya memiliki beberapa pembaruan pada jawaban di atas.

dscl / -append /Groups/admin GroupMembership newUserName

Perintah ini dapat digunakan untuk membuat pengguna memiliki akses Administratif. Jika perintah ini tidak diberikan, pengguna secara otomatis akan ditetapkan sebagai pengguna standar.

dscl . create /Users/newUserName PrimaryGroupID 80

Ini menetapkan id grup utama pengguna. 80 berarti admin dan 20 berarti staf . Dan pengaturan ke 20 tidak akan membuat standar pengguna. Kecuali perintah pertama tidak disebutkan.

Vipin Johney
sumber
Untuk memperjelas, salah satu dari perintah ini akan mencapai hal yang sama?
MaxGabriel
Saya lebih suka perintah pertama, menambahkan ke / Grup / admin .
Vipin Johney
0

Berikut ini adalah skrip shell yang saya tulis untuk menambahkan pengguna baru di Max OS X menggunakan baris perintah. Bekerja sama seperti jika itu Linux. Jangan ragu untuk mengedit satu untuk kebutuhan pribadi Anda. Cukup beri nama useradd.sh dan tetapkan izin yang benar ( chmod 0700 useradd.shdalam kasus saya). Terima kasih kepada bispymusic, Alex Leach, Kent atas kontribusi mereka.

OS X High Sierra diuji

#!/bin/sh

if [[ `id -u` != 0 ]]; then
    echo "Must be root to run script"
    exit
fi

read -p "Enter user name and press [ENTER]: " UserName

if [[ $UserName == `dscl . -list /Users UniqueID | awk '{print $1}' | grep -w $UserName` ]]; then
    echo "User already exists!"
    exit 0
fi

read -p "Enter real name and press [ENTER]: " RealName
read -p "Enter PrimaryGroupID (80 - admin, 20 - user) and press [ENTER]: " PrimaryGroupID
LastID=`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1`
NextID=$((LastID + 1))

. /etc/rc.common
dscl . create /Users/$UserName
dscl . create /Users/$UserName RealName $RealName

read -p "Enter password hint and press [ENTER]: " PasswordHint
dscl . create /Users/$UserName hint $PasswordHint
PasswordHint=0

echo " "
read -s -p "Enter Account Password and press [ENTER]: " AccountPassword
echo " "
read -s -p "Enter Account Password again and press [ENTER]: " AccountPasswordRepeat
if [[ $AccountPassword == $AccountPasswordRepeat ]]; then
  dscl . passwd /Users/$UserName $AccountPassword
  AccountPassword=0
else
  echo "Passwords do not match!"
  exit 1
fi
echo " "
dscl . create /Users/$UserName UniqueID $NextID
dscl . create /Users/$UserName PrimaryGroupID $PrimaryGroupID
dscl . create /Users/$UserName UserShell /bin/bash
dscl . create /Users/$UserName NFSHomeDirectory /Users/$UserName
createhomedir -u $UserName -c

echo " "
echo "New user `dscl . -list /Users UniqueID | awk '{print $1}' | grep -w $UserName` has been created with unique ID `dscl . -list /Users UniqueID | grep -w $UserName | awk '{print $2}'`"

Anda bisa mendapatkan yang sama dari intisari saya

Igor Voltaic
sumber
Bisa jadi NextID=$((`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1` + 1))itu hanya terlihat lebih baik dan lebih jelas seperti sekarang.
Igor Voltaic