Những bước cần thiết để tạo một người dùng mới từ dòng lệnh?


27

Những lệnh (hoặc tập lệnh) nào có thể tạo tài khoản người dùng đầy đủ chức năng trên Mountain Lion, chỉ chạy từ dòng lệnh thông qua thiết bị đầu cuối hoặc ssh.

Nó trông giống như một hiện cặp của câu trả lời có thể làm việc, nhưng tôi tự hỏi nếu có một kịch bản ngắn hoặc công cụ để tạo hoàn toàn sử dụng chức năng chiếm trên Mountain Lion?

Câu trả lời:


33

Đây là tập lệnh shell mà tôi đã viết tại nơi làm việc để xử lý việc này như là một phần của quy trình NetInstall (tự động tạo tài khoản quản trị viên cục bộ trong quá trình tạo ảnh).

#!/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

Một số lưu ý cần đề cập:

  • Tôi có tệp này được lưu dưới dạng tệp ".sh" có thể thực thi được.
  • Vì nó thực thi trong NetInstall, nó chạy bằng root và cần chạy bằng root để hoạt động bình thường. Bạn cũng có thể trừ hai dòng đầu tiên, thêm "sudo" vào đầu mỗi dòng tiếp theo và tự chạy chúng dưới dạng các lệnh riêng lẻ trong Terminal.
  • Sửa đổi UniqueID từ 501 thành một số mà bạn sẽ biết là an toàn trên tất cả các hệ thống (501 được lấy bởi tài khoản đầu tiên được tạo trên máy Mac, nói chung, thứ gì đó cao hơn như 550 có thể sẽ an toàn, tùy thuộc vào số lượng người dùng bạn có trên hệ thống của bạn) .
  • Chính GroupID của 80 tạo một người dùng Quản trị viên. Thay đổi thành PrimarygroupID 20 để tạo người dùng Chuẩn.
  • Tôi đã chụp được hơn 50 máy Mac theo cách này mà không gặp vấn đề gì. Tôi sử dụng tài khoản này để chạy các lệnh thông qua SSH, để đưa ra các bản vá thông qua ARD và thực hiện quản trị phía bàn cục bộ.

Có vẻ đầy hứa hẹn - sẽ thử nghiệm sớm!
bmike

Vấn đề tôi dường như gặp phải khi tôi thử và điều chỉnh tập lệnh này để tạo người dùng thường xuyên bằng cách chuyển các biến cho tập lệnh là mọi thứ ngoại trừ dòng cuối cùng đều hoạt động tốt. Đó là, dscl tạo người dùng và khi tôi sử dụng dscl. liệt kê / người dùng, người dùng hiển thị tốt, nhưng chown không nhận ra người dùng và vì tôi không thể thay đổi quyền của thư mục chính, nên sẽ không cho phép người dùng đó đăng nhập.

Tôi ước tôi có thể. Một trong những điểm yếu của tôi khi nói đến kịch bản shell là tôi chưa bao giờ học được cách sử dụng biến rất tốt, chủ yếu là vì tôi thực sự không cần sử dụng chúng cho bất cứ điều gì vào thời điểm này trong công việc của mình. Có lẽ @bmike hoặc người khác có thể đưa ra lời khuyên.
bispymusic

@HackffyCoat bạn có thể đăng kịch bản của mình không? Trong lệnh của bạn, bạn đã gõ chữ thường "/ users", khi thực tế nó là "/ Users". Tôi nghi ngờ đó là vấn đề với kịch bản của bạn; nhưng, đôi mắt mới kiểm tra nó có thể có thể tìm ra vấn đề khá nhanh. Tôi đã có một tập lệnh tương tự thực sự thiết lập nhiều người dùng, vì vậy việc sử dụng các biến không phải là vấn đề.
Kent

2
Thay vì hai dòng cuối cùng ( cp -R ...; chown -R ...), bạn có thể sử dụng lệnh createhomedir -u administrator. createhomedircó một trang người đàn ông, quá.
Alex Leach

14

Để tiếp tục tự động hóa điều này, dòng sau có thể được sử dụng để lấy id người dùng "có sẵn" tiếp theo nếu bạn đang chạy trên máy mac đã có người dùng thiết lập.

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

NextID=$((LastID + 1))

Sau đó, dòng tương ứng trong câu trả lời của bispymusic ở trên có thể được thay đổi:

 dscl . create /Users/administrator UniqueID $NextID

2

Tôi có một số cập nhật về câu trả lời trên.

dscl / -append /Groups/admin GroupMembership newUserName

Lệnh này có thể được sử dụng để làm cho người dùng có quyền truy cập Quản trị. Nếu lệnh này không được cung cấp, người dùng sẽ tự động được đặt là người dùng chuẩn.

dscl . create /Users/newUserName PrimaryGroupID 80

Điều này đặt id nhóm chính của người dùng. 80 có nghĩa là quản trị viên và 20 có nghĩa là nhân viên . Và thiết lập thành 20 sẽ không làm cho tiêu chuẩn người dùng. Trừ khi lệnh đầu tiên không được đề cập.


Để làm rõ, một trong hai lệnh này sẽ thực hiện điều tương tự?
MaxGabriel

Tôi thích lệnh đầu tiên, nối thêm vào / Groups / admin .
Vipin Johney

0

Đây là tập lệnh shell tôi đã viết để thêm người dùng mới trong Max OS X bằng dòng lệnh. Hoạt động tương tự như khi nó là Linux. Hãy chỉnh sửa một cho nhu cầu cá nhân của bạn. Chỉ cần đặt tên là useradd.sh và đặt quyền chính xác ( chmod 0700 useradd.shtrong trường hợp của tôi). Cảm ơn bispymusic, Alex Leach, Kent cho những đóng góp của họ.

Đã kiểm tra OS X High Sierra

#!/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}'`"

bạn có thể lấy một cái từ ý chính của tôi


Nó có thể NextID=$((`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1` + 1))nhưng nó chỉ trông tốt hơn và rõ ràng hơn theo cách hiện tại.
Igor Voltaic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.