Bagaimana cara membuat akun pengguna dari Terminal di Mac OS X 10.5?

86

Saya ingin dapat membuat pengguna baru di Mac OS X 10.5 dari jarak jauh setelah ssh'ing ke dalam mesin. Bagaimana saya melakukan ini?

JR Lawhorne
sumber
Saya belum memiliki reputasi untuk menjawab, tetapi jika Anda mencari cara melakukan ini dari single_usermode (pengaturan ulang keamanan) maka Anda harus me-reboot menahan Command-S, mendapatkan akses tulis ke disk per detail di layar , lalu rm /var/db/.AppleSetupDoneyang memungkinkan Anda membuat akun admin baru. Semoga ini bisa membantu seseorang
New Alexandria

Jawaban:

80

Gunakan perintah dscl. Contoh ini akan membuat pengguna "luser", seperti:

dscl . -create /Users/luser
dscl . -create /Users/luser UserShell /bin/bash
dscl . -create /Users/luser RealName "Lucius Q. User"
dscl . -create /Users/luser UniqueID "1010"
dscl . -create /Users/luser PrimaryGroupID 80
dscl . -create /Users/luser NFSHomeDirectory /Users/luser

Anda kemudian dapat menggunakan passwd untuk mengubah kata sandi pengguna, atau menggunakan:

dscl . -passwd /Users/luser password

Anda harus membuat / Pengguna / luser untuk direktori home pengguna dan mengubah kepemilikan sehingga pengguna dapat mengaksesnya, dan pastikan bahwa UniqueID sebenarnya unik.

Baris ini akan menambahkan pengguna ke grup administrator:

dscl . -append /Groups/admin GroupMembership luser
palmer
sumber
7
Bagaimana cara memastikan UID unik?
JR Lawhorne
3
Tidak ada cara otomatis; jika Anda membuat skrip ini, Anda cukup menjalankannya dengan perintah "id ####" dan memastikannya mengembalikan "Tidak ada pengguna seperti itu" atau peretasan semacam itu.
Palmer
1
Ingatlah untuk menggunakan sudo jika Anda tidak memiliki izin.
Raffi Khatchadourian
BTW, karena ini jauh lebih verbose dari seharusnya, saya porting perintah-perintah ini ke dalam useraddsintaksis.
Xiong Chiamiov
1
Perhatikan bahwa PrimaryGroupID 80ini admin, sehingga luserdapat digunakan sudobahkan jika Anda tidak menambahkannya ke grup administrator ini.
ruslo
20

(Jawaban ini harus dianggap sebagai tambahan untuk mengisi beberapa kekosongan dalam prosedur palmer)

Untuk memilih UniqueID yang tidak digunakan untuk Anda pengguna baru, Anda dapat menggunakan:

maxid=$(dscl . -list /Users UniqueID | awk 'BEGIN { max = 500; } { if ($2 > max) max = $2; } END { print max + 1; }')
newid=$((maxid+1))

... kemudian gunakan urutan palmer perintah dscl yang diberikan untuk membuat akun, lalu buat direktori home pengguna baru dengan:

cp -R /System/Library/User\ Template/English.lproj /Users/luser
chown -R luser:staff /Users/luser
if [[ "$(sw_vers -productVersion)" != 10.[0-5].* ]]; then
    # Set ACL on Drop Box in 10.6 and later
    chmod +a "user:luser allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit" /Users/luser/Public/Drop\ Box
fi

(ada perintah createhomedir, tetapi tidak berfungsi ketika saya mengujinya.)

Gordon Davisson
sumber
1
Saya membuat skrip yang mengisi Open Directory Master kami dengan pengguna baru, dan kemudian memanggil sudo createhomedir -s(IIRC) di Open Directory Replika / Fileshares, dan mereka dengan senang hati membuat direktori home.
Clinton Blackmore
2
dscl -listdibatasi hingga 256 hasil, jadi jika Anda memiliki lebih dari 256 pengguna, teknik ini akan gagal untuk menjamin UID yang unik.
smokris
Trik kecil untuk mengusir 2 pipa tambahan (gunakan awk saja): dscl. -list / Pengguna UniqueID | awk '{if ($ 2> maks) maks = $ 2; } END {print max + 1; } '
Valtoni Boaventura
@ValtoniBoaventura Bagus. Saya memasukkan itu ke dalam jawaban (dengan default jika tidak ada akun reguler). Saya juga menambahkan langkah untuk mengatur Drop Box ACL (yang ditambahkan pada 10.6).
Gordon Davisson
8

Jika Anda memiliki banyak pengguna untuk dibuat, dimungkinkan untuk membuat file teks terstruktur dan meneruskannya dsimportuntuk melakukan pekerjaan itu.

Panduan Administrasi Baris Perintah Apple memiliki bab lengkap tentang pengguna dan grup.

Clinton Blackmore
sumber
Aneh. Apple tampaknya telah menghapus v10.5 dari dokumen yang Anda sebutkan pada awalnya, tetapi tetap v10.3 dan versi Snow Leopard
chb
7

Cara lain untuk memilih dan memilih ID pengguna yang unik sebelum membuat akun adalah dengan melihat-lihat daftar dan memeriksa bahwa yang ingin Anda gunakan tidak ada di sana:

 sudo dscl . list /Users uid
 sudo dscl . list groups gid

Berguna jika Anda perlu menggunakan ID tertentu


sumber
dscl -listdibatasi hingga 256 hasil, jadi jika Anda memiliki lebih dari 256 pengguna, teknik ini akan gagal untuk menjamin UID yang unik.
smokris
ya itu jalan terpendek untuk menambahkan pengguna itu di sini sekarang, hanya grepitu dengan yang idada dalam pikiran Anda untuk digunakan untuk pengguna baru
yair
7

Saya telah memanfaatkan berbagai jawaban di sini untuk menghasilkan apa yang menurut saya adalah skrip yang bagus untuk membuat akun pengguna. Memang, ini tidak dirancang untuk menjalankan perintah pada satu waktu dari ssh; itu lebih dirancang untuk menjadi skrip dijalankan ketika menyusun gambar berbasis paket OS X (seperti yang dibuat oleh Casper Imaging atau InstaDMG ).

#!/bin/bash
# This script creates a user account under Mac OS X
# (tested with 10.5 and 10.6; likely works with 10.4 but not earlier)
# Written by Clinton Blackmore, based on work at
# http://serverfault.com/questions/20702

# === Typically, this is all you need to edit ===

USERNAME=joeadmin
FULLNAME="Joe Admin"
PASSWORD="hard_to_hack"

# A list of (secondary) groups the user should belong to
# This makes the difference between admin and non-admin users.
# Leave only one uncommented
#SECONDARY_GROUPS=""  # for a non-admin user
SECONDARY_GROUPS="admin _lpadmin _appserveradm _appserverusr" # for an admin user

# ====

if [[ $UID -ne 0 ]]; then echo "Please run $0 as root." && exit 1; fi

# Find out the next available user ID
MAXID=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ug | tail -1)
USERID=$((MAXID+1))

# Create the user account
dscl . -create /Users/$USERNAME
dscl . -create /Users/$USERNAME UserShell /bin/bash
dscl . -create /Users/$USERNAME RealName "$FULLNAME"
dscl . -create /Users/$USERNAME UniqueID "$USERID"
dscl . -create /Users/$USERNAME PrimaryGroupID 20
dscl . -create /Users/$USERNAME NFSHomeDirectory /Users/$USERNAME

dscl . -passwd /Users/$USERNAME $PASSWORD


# Add use to any specified groups
for GROUP in $SECONDARY_GROUPS ; do
    dseditgroup -o edit -t user -a $USERNAME $GROUP
done

# Create the home directory
createhomedir -c > /dev/null

echo "Created user #$USERID: $USERNAME ($FULLNAME)"

Skrip memungkinkan Anda menentukan grup yang harus dimiliki pengguna. Tampak bagi saya bahwa ini mungkin berbeda tergantung pada versi OS X yang Anda jalankan. Saya mendapatkan hasil yang berbeda ketika saya menjalankan idsebagai admin di OS X 10.6 daripada yang saya lakukan saat menjalankan sebagai admin di OS X 10.5.

Clinton Blackmore
sumber
Dalam jawaban lain, Elliott memperingatkan bahwa perintah 'createhomedir -c', menjelang akhir, akan membuat akun untuk semua pengguna di direktori tempat Anda terikat. (Opsi '-c', di halaman manual, 'membuat direktori home untuk jalur lokal saja.') Ada opsi lain, '-u nama pengguna', yang mungkin berfungsi lebih baik.
Clinton Blackmore
halo saya menggunakan script di atas. Jadi itu menambah pengguna baru saya tetapi ketika pengguna akan terhubung ke kalendernya ia mengatakan bahwa ia tidak memiliki izin! Bisakah kamu membantuku ?
@jimmy: Saya akan merekomendasikan mengajukan pertanyaan baru pada serverfault dan menautkan ke jawaban ini daripada hanya mengajukan pertanyaan di komentar, yang jarang terlihat. Saya berharap izinnya benar. Menggunakan 'chown' dan 'chmod' dapat membantu jika Anda dapat mengidentifikasi file yang tidak memiliki izin yang benar ... tapi saya tidak tahu yang mana itu.
Clinton Blackmore
dscl -listdibatasi hingga 256 hasil, jadi jika Anda memiliki lebih dari 256 pengguna, teknik ini akan gagal untuk menjamin UID yang unik.
smokris
4

Saya mulai sedikit pembungkus tentang dsclyang mengambil useraddparameter - itu tidak lengkap (saya juga tidak berpikir itu bisa, karena beberapa hal tidak mungkin pada OS X), tapi saya menggunakannya untuk melakukan beberapa penciptaan pengguna.

Kerangka kerjanya ada untuk semua parameter, jadi jika Anda ingin memanfaatkan fitur sosial GitHub yang luar biasa, mudah dilakukan.

Xiong Chiamiov
sumber
Menjalankan # gem install osx-useradd.gemspecOS X 10.5 menghasilkan ERROR: While executing gem ... (Gem::RemoteSourceException)dan baris kedua adalah HTTP Response 301 fetching http://gems.rubyforge.org/yaml.