macOS下使用命令行进行用户(组)管理,就是这么简单!dscl你很有必要了解一下!!

编程

macOS 下使用 dscl 命令行进行用户(组)管理,就是这么简单!

大家好,我是@小猿来也...

Command-line interface to Directory Services。

在 linux 系统中我们习惯了使用 useradd,userdel,usermod 等指令进行用户管理,使用 groupadd,groupdel,groupmod 等指令进行用户组管理。

但是在 macOS 下这些指令没有的。

所以今天分享的主题是在 macOS 下如何在命令行里进行用户组、用户管理?

macOS 下有什么命令行工具可以用来进行用户组、用户管理的呢,它就是今天的主角 dscl 。

一、dscl 简介

dscl 是一个目录服务的命令行,用来创建、读取和管理目录服务数据。它还提供了基本的编辑器命令,如列表、搜索、创建、读取、追加、合并、更改和删除。

我们可以认为它是存储访问OS X用户授权数据的工具。

在没有任何命令的情况下调用,dscl 将以交互模式运行,从标准输入读取命令。

进入 dscl

在终端内输入dscl . 即可进入本机的 dscl 。

$ dscl .

>

退出 dscl

进入 dscl 后输入 q 或者 exit 即可退出 dscl 。

$ dscl .

> q

Goodbye

$ dscl .

> exit

Goodbye

dscl 所支持的指令集

$ dscl .

> help

dscl (v11.2)

usage: dscl [options] [<datasource> [<command>]]

datasource:

localhost (default) or

localonly (activates a DirectoryService daemon process

with Local node only - daemon quits after use

<hostname> (requires DS proxy support, >= DS-158) or

<nodename> (Directory Service style node name) or

<domainname> (NetInfo style domain name)

options:

-u <user> authenticate as user (required when using DS Proxy)

-P <password> authentication password

-p prompt for password

-f <filepath> targeted file path for DS daemon running in localonly mode

(example: /Volumes/Build100/var/db/dslocal/nodes/Default)

(NOTE: Nodename to use is fixed at /Local/Target)

-raw don"t strip off prefix from DS constants

-plist print out record(s) or attribute(s) in XML plist format

-url print record attribute values in URL-style encoding

-q quiet - no interactive prompt

commands:

-read <path> [<key>...]

-readall <path> [<key>...]

-readpl <path> <key> <plist path>

-readpli <path> <key> <value index> <plist path>

-create <record path> [<key> [<val>...]]

-createpl <record path> <key> <plist path> <val1> [<val2>...]

-createpli <record path> <key> <value index> <plist path> <val1> [<val2>...]

-delete <path> [<key> [<val>...]]

-deletepl <record path> <key> <plist path> [<val>...]

-deletepli <record path> <key> <value index> <plist path> [<val>...]

-list <path> [<key>]

-append <record path> <key> <val>...

-merge <record path> <key> <val>...

-change <record path> <key> <old value> <new value>

-changei <record path> <key> <value index> <new value>

-diff <first path> <second path>

-search <path> <key> <val>

-auth [<user> [<password>]]

-authonly [<user> [<password>]]

-passwd <user path> [<new password> | <old password> <new password>]

MCX Extensions:

-mcxread <record path> [optArgs] [<appDomain> [<keyName>]]

-mcxset <record path> [optArgs] <appDomain> <keyName> [<mcxDomain> [<keyValue>]]

-mcxedit <record path> [optArgs] <appDomain> <keyPath> [<keyValue>]

-mcxdelete <record path> [optArgs] [<appDomain> [<keyName>]]

-mcxdeleteall <record path> [optArgs] [<appDomain> [<keyName>]]

-mcxexport <record path> [optArgs] [<appDomain> [<keyName>]]

-mcximport <record path> [optArgs] <file path>

-mcxhelp

>

列出 dscl 中所有的数据目录

$ dscl .

> ls

AFPUserAliases

Aliases

Automount

AutomountMap

ComputerGroups

ComputerLists

Computers

Config

Ethernets

Groups

Hosts

Mounts

NetGroups

Networks

People

PresetComputerGroups

PresetComputerLists

PresetComputers

PresetGroups

PresetUsers

Protocols

Services

SharePoints

Users

二、管理用户

获取所有用户列表

$ dscl .

# 进入用户的数据目录

> cd Users/

/Users >ls

...

yeah

nobody

root

...

也可以直接使用下面的指令

$ dscl . -ls /Users

ls前的"-"是可以省去的,同样其他指令也是一样的,下面的演示中,将不会在给出具体指令前的"-"。

创建一个用户

使用 dscl/Users 数据目录下,创建一个用户的实例,我们可以设置它的 uid、 gid、 shell、realname、home 目录。

创建一个名为 yeah 的用户并设置用户的 uid 为 8888。

# sudo dscl . create /Users/yeah UniqueID 8888

$ sudo dscl . create /Users/yeah uid 8888

gid该字段必须设置,如果不设置在更改文件宿主为该用户时会报 illegal user name 错误。

因此你需要先跳到『管理用户组』的部分,参考用户组创建的命令先创建一个用户组,这里我们已经提前创建好了一个 gid 为 6666 名称同样也为 yeah 的用户组。

准备好用户组之后我们来设置用户的 gid。

# sudo dscl . create /Users/yeah PrimaryGroupID 6666

$ sudo dscl . create /Users/yeah gid 6666

创建并设置用户所使用的 shell,如果 shell 不进行设置则用户在终端中将会无法使用。

# sudo dscl . create /Users/yeah UserShell  /bin/bash

$ sudo dscl . create /Users/yeah shell /bin/bash

创建并设置用户的 realname

$ sudo dscl . create /Users/yeah realname "coding yeah"

设置用户的初始密码为空

# "*" 表示空密码

# sudo dscl . create /Groups/yeah passwd *

$ sudo dscl . create /Groups/yeah passwd "*"

修改用户的密码

$ sudo passwd yeah

Changing password for yeah.

New password: ********

Retype new password: ********

创建或者指定用户的 home 目录

dscl在创建用户的时候并不会自动为用户创建 home 目录,因此需要我们为用户创建 home 目录。

$ sudo  mkdir /Users/yeah

在用户 yeah 已经有所属的用户组的前提下,使用 chown 指令设定 /Users/yeah 目录以及其子目录的宿主为用户 yeah

$ sudo chown -R yeah:yeah /Users/yeah

这样新目录 /Users/yeah 的以及其目录的宿主就变成了用户 yeah

声明用户的 home 目录

# sudo dscl . create /Users/yeah NFSHomeDirectory /Users/yeah

$ sudo dscl . create /Users/yeah home /Users/yeah

这样用户 yeah 就可以以 /Users/yeah 为 home 目录进行工作了。

授予用户管理员权限

为了授予用户管理员权限,我们只需要把用户加入到 admin(/Groups/admin) 用户组即可,这样用户就具有了 sudo 权限。

$ sudo dscl . merge /Groups/admin users yeah

修改用户

我们可以使用 dsclcreate指令来添加或者修改用户的属性。

$ sudo dscl . create /Users/yeah shell /bin/zsh

比如我们可以用上面的指令来修改用户的 shell 为 zsh。

获取用户的指定属性

# 查看用户yeah的所有属性

$ dscl . read /Users/yeah

...

NFSHomeDirectory: /Users/yeah

Password: ********

PrimaryGroupID: 6666

RealName:

coding yeah

RecordName: yeah

RecordType: dsRecTypeStandard:Users

UniqueID: 8888

UserShell: /bin/zsh

# 查看用户yeah的组ID和用户ID

$ dscl . read /Users/yeah PrimaryGroupID UniqueID

PrimaryGroupID: 6666

UniqueID: 8888

# 列出所有用户的的组ID

$ dscl . list /Users PrimaryGroupID

# 列出所有用户的ID

$ dscl . list /Users UniqueID

删除用户

我们可以使用 dscldelete指令来删除用户。

$ sudo dscl . delete /Users/yeah

上面的指令可以删除用户 yeah 的所有属性。但是需要说明的是用户的 home 目录需要手动删除,用户所属的组也需要额外删除。

三、管理用户组

获取所有用户组列表

使用 dscl 进入 /Groups 数据目录并列出所有用户组。

$ dscl .

> cd /Groups/

/Groups > ls

_amavisd

_appowner

_appserveradm

_appserverusr

...

也可以直接使用下面的指令

$ dscl . ls /Groups

创建用户组

使用 dscl 创建用户组,我们需要在dscl/Groups目录下创建一个目录,同时设置它的 gid 属性。

# sudo dscl . create /Groups/yeah PrimaryGroupID 6666

$ sudo dscl . create /Groups/yeah gid 6666

创建用户组 yeah 并设置用户组 yeah 的用户组 ID 为6666,上面的三种方式是等效的。

给用户组添加用户

# 多次执行会被添加多次

# sudo dscl . append /Groups/yeah GroupMembership yeah

# 多次执行会被添加多次

$ sudo dscl . merge /Groups/yeah users yeah

删除指定组内的指定用户

从 yeah 用户组内删除用户 yeah

sudo dscl . delete /Groups/yeah GroupMembership yeah

删除用户组

$ sudo dscl . delete /Groups/yeah

使用上面的指令将在dscl中删除/Groups/yeah目录下的所有信息,我们要谨慎使用。

获取用户组的指定属性

# 查看用户组yeah的所有属性

$ dscl . read /Groups/yeah

AppleMetaNodeLocation: /Local/Default

GroupMembership: yeah

PrimaryGroupID: 6666

RecordName: yeah

RecordType: dsRecTypeStandard:Groups

# 查看用户yeah的组ID和组内用户

$ dscl . read /Groups/yeah PrimaryGroupID GroupMembership

GroupMembership: yeah

PrimaryGroupID: 6666

# 列出所有用组的组ID

$ dscl . list /Groups PrimaryGroupID

# 列出所有用组的组内用户

$ dscl . list /Groups GroupMembership

四、总结

好了今天的分享就到这里啦,主要是分享 macOS 如何基于命令行进行用户以及用户组的管理的知识,希望对你有帮助。

如果你看了觉得对你有帮助,就给小猿来也点个赞吧。

如果你没时间详细的了解,那么你只需要看下下面的这些就可以了。

创建用户资源

# 创建组

sudo dscl . create /Groups/yeah gid 6666

# 创建用户

sudo dscl . create /Users/yeah uid 8888

sudo dscl . create /Users/yeah gid 6666

sudo dscl . create /Users/yeah shell /bin/bash

# 修改用户的密码

sudo passwd yeah

# 创建用户的home目录

sudo mkdir /Users/yeah

# 用户的home目录宿主

sudo chown -R yeah:yeah /Users/yeah

# 声明用户的home目录

sudo dscl . create /Users/yeah home /Users/yeah

# 把用户添加到用户组内

sudo dscl . merge /Groups/admin users yeah

查看用户信息

$ dscl . read /Users/yeah

...

AppleMetaNodeLocation: /Local/Default

GeneratedUID: xxxxxx

NFSHomeDirectory: /Users/yeah

Password: ********

PrimaryGroupID: 6666

RecordName: yeah

RecordType: dsRecTypeStandard:Users

UniqueID: 8888

UserShell: /bin/bash

清除用户资源

# 清除用户

$ sudo dscl . delete /Groups/yeah

# 清除用户组

$ sudo dscl . delete /Users/yeah

# 删除用户home目录

$ sudo rm -rf /Users/yeah

另外 dscl 同样支持对远程机器上的用户以及用户组的管理,但是我们基本上用不到,所以这里就不做介绍,感兴趣的同学可以自己去尝试一下。

以上是 macOS下使用命令行进行用户(组)管理,就是这么简单!dscl你很有必要了解一下!! 的全部内容, 来源链接: utcz.com/z/519717.html

回到顶部