Mac OS X에서 adduser 명령에 해당하는 것은 무엇입니까?


20

관리자로 로그인하면 명령 줄에서 새 사용자를 만들 수 있기를 원합니다. 특히 adduserLinux 에서 해당 명령을 찾고 있습니다.

답변:


12

http://wiki.freegeek.org/index.php/Mac_OSX_adduser_script 에서 사용할 수있는 좋은 스크립트 가 있지만 몇 가지 오타가 있고 때로는 충분히 융통성이 없으므로 다음과 같이 개선 된 스크립트 버전이 있습니다.

#!/bin/bash
# =========================
# Add User OS X Interactive Command Line
# =========================

getHiddenUserUid()
{
    local __UIDS=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ugr)

    #echo $__UIDS
    local __NewUID
    for __NewUID in $__UIDS
    do
        if [[ $__NewUID -lt 499 ]] ; then
            break;
        fi
    done

    echo $((__NewUID+1))
}

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

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

read -p "Enter your desired user name: " USERNAME

read -p "Enter a full name for this user: " FULLNAME

read -s -p "Enter a password for this user: " PASSWORD
echo
read -s -p "Validate a password: " PASSWORD_VALIDATE
echo

if [[ $PASSWORD != $PASSWORD_VALIDATE ]] ; then
    echo "Passwords do not match!"
    exit 1;
fi

# ====

# A list of (secondary) groups the user should belong to
# This makes the difference between admin and non-admin users.

read -p "Is this an administrative user? [y/n] (n): " GROUP_ADD
GROUP_ADD=${GROUP_ADD:-n}

if [ "$GROUP_ADD" = n ] ; then
    SECONDARY_GROUPS="staff"  # for a non-admin user
elif [ "$GROUP_ADD" = y ] ; then
    SECONDARY_GROUPS="admin _lpadmin _appserveradm _appserverusr" # for an admin user
else
    echo "You did not make a valid selection!"
    exit 1;
fi

# ====

# Create a UID that is not currently in use

read -p "Should this user have interactive access?  [y/n] (y): " IS_INTERACTIVE
IS_INTERACTIVE=${IS_INTERACTIVE:-y}

if [ "$IS_INTERACTIVE" = y ] ; then
    USERID=$(getInteractiveUserUid)
elif [ "$IS_INTERACTIVE" = n ] ; then
    USERID=$(getHiddenUserUid)
else
    echo "You did not make a valid selection!"
    exit 1;
fi

echo "Going to create user as:"
echo "User name: " $USERNAME
echo "Full name: " $FULLNAME
echo "Secondary groups: " $SECONDARY_GROUPS
echo "UniqueID: " $USERID

read -p "Is this information correct?  [y/n] (y): " IS_INFO_CORRECT
IS_INFO_CORRECT=${IS_INFO_CORRECT:-y}

if [ "$IS_INFO_CORRECT" = y ] ; then
    echo "Configuring Open Directory..."
elif [ "$IS_INFO_CORRECT" = n ] ; then
    echo "User creation cancelled!"
    exit 1;
else
    echo "You did not make a valid selection!"
    exit 1;
fi


# Create the user account by running dscl (normally you would have to do each of these commands one
# by one in an obnoxious and time consuming way.

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 user to any specified groups
echo "Adding user to specified groups..."

for GROUP in $SECONDARY_GROUPS ; do
    dseditgroup -o edit -t user -a $USERNAME $GROUP
done

# Create the home directory
echo "Creating home directory..."
createhomedir -c 2>&1 | grep -v "shell-init"

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

적어도 10.12 / Sierra에서는 문제가 될 수 있습니다. 시도했을 때 네트워크의 모든 단일 사용자에 대한 디렉토리를 작성했습니다. 특히 '-u username'을 지정하지 않고 'createhomedir'을 사용하는 것은 좋지 않습니다.
Jan Kyu Peblik

17

dscl 명령을 찾고 있다고 생각합니다. Niutil은 NetInfo처럼 들리며 Open Directory (일명 LDAP)를 위해 OS X에서 더 이상 사용되지 않습니다.

Dscl 또는 Directory Services 명령 줄을 사용하여 로컬 또는 원격 사용자 데이터 저장소 모두에 대한 Open Directory를 편집 할 수 있습니다. sudo 명령으로 수행 할 수 있지만 루트로 사용하기가 더 쉽습니다.

짧고 부적절한 튜토리얼은 다음과 같습니다. 터미널에서 sudo -s를 사용하여 사용자를 루트로 전환하십시오. dscl2라는 기능적인 사용자 계정을 만들려면 다음을 수행해야합니다.

dscl . -create /Users/dscl2

dscl . -create /Users/dscl2 UserShell /bin/bash

dscl . -create /Users/dscl2 RealName "DSCL 2"

dscl . -create /Users/dscl2 UniqueID 8005

dscl . -create /Users/dscl2 PrimaryGroupID 20

dscl . -create /Users/dscl2 NFSHomeDirectory /Users/dscl2

dscl . -passwd /Users/dscl2 password

UUID는 일반적으로 약 501 이상입니다. 501은 처음 생성 된 계정의 기본 UID입니다. 기본적으로 500 미만의 UID는 계정 창에 표시되지 않습니다. 원하는 번호를 선택하되 로컬 시스템에서 고유 한 번호인지 확인하십시오. 기존 UID를 덮어 쓰지 마십시오. 그렇지 않으면 큰 문제가 발생합니다.

Dscl에는 대화식 모드도 있으며 약간 다르게 작동합니다. 대화식 모드로 들어가려면 프롬프트에 "dscl"만 입력하십시오.

대화식 모드 인 경우 ls를 입력하여 사용 가능한 디렉토리를 나열하십시오. BSD, LDAP 및 Local이 표시되어야합니다. cd를 사용하여 디렉토리를 탐색하십시오. 자세한 내용은 친구에게 맨 페이지를 참조하십시오.


2
이 방법이 부적절하다고 경고했지만 dscl이 완료된 후에도 계정을 만드는 데 필요한 전체 단계를 확인하는 것이 좋습니다. 예를 들어 / Users / dscl2 폴더를 만들어야합니까? ACL을 적용하는 방법?
Nathan Garabedian

1
이 답변은 정확하지만 @ anton-matosov 답변의 스크립트는 훌륭합니다. 동일한 명령을 실행합니다.
bmucklow
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.