4.7 用户和基本账户管理
账户类型
要想访问 FreeBSD,你必须有一个账户,而且所有进程都是以不同账户的名义启动的。
Port sysutils/htop 命令能够清晰地显示这一点(注意“USER”):
PID△USER PRI NI VIRT RES S CPU% MEM% TIME+ Command
1 root 20 0 12724 1324 S 0.0 0.0 0:00.08 /sbin/init
216 root 20 0 36172 7308 S 0.0 0.1 0:00.77 ├─ /usr/local/bin/vmtoolsd -c /usr/local/share/vmware-tools/to
400 root 48 0 14188 2684 S 0.0 0.0 0:00.00 ├─ dhclient: system.syslog
403 root 4 0 14188 2760 S 0.0 0.0 0:00.00 ├─ dhclient: em0 [priv]
481 _dhcp 20 0 14192 2808 S 0.0 0.0 0:00.01 ├─ dhclient: em0
596 root 20 0 15444 4204 S 0.0 0.1 0:00.05 ├─ /sbin/devd
800 root 20 0 13904 2792 S 0.0 0.0 0:00.02 ├─ /usr/sbin/syslogd -s
867 messagebus 20 0 15188 4492 S 0.0 0.1 0:00.29 ├─ /usr/local/bin/dbus-daemon --system
870 root 20 0 14120 2456 S 0.0 0.0 0:00.06 ├─ /usr/sbin/moused -p /dev/psm0 -t auto
898 ntpd 20 0 24564 5848 S 0.0 0.1 0:00.06 ├─ /usr/sbin/ntpd -p /var/db/ntp/ntpd.pid -c /etc/ntp.conf -f
944 root 68 0 23508 9560 S 0.0 0.1 0:00.00 ├─ sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups
947 root 20 0 13944 2576 S 0.0 0.0 0:00.02 ├─ /usr/sbin/cron -s
952 root 20 0 56736 23700 S 0.0 0.3 0:00.04 ├─ /usr/local/bin/sddm
980 root 20 0 257M 124M S 1.0 1.5 0:04.83 │ ├─ /usr/local/libexec/Xorg -nolisten tcp -background none -
993 root 23 0 50208 27572 S 0.0 0.3 0:00.02 │ └─ /usr/local/libexec/sddm-helper --socket /tmp/sddm-auth-4
994 ykla 68 0 19992 4620 S 0.0 0.1 0:00.01 │ └─ /usr/local/bin/ck-launch-session /usr/local/bin/start
1005 ykla 68 0 128M 67736 S 0.0 0.8 0:00.13 │ └─ /usr/local/bin/startplasma-x11
1010 ykla 68 0 128M 68184 S 0.0 0.8 0:00.25 │ └─ /usr/local/bin/plasma_session
1017 ykla 20 0 773M 190M S 0.0 2.3 0:01.33 │ ├─ /usr/local/bin/kded6
1018 ykla 20 0 676M 262M S 0.0 3.2 0:30.96 │ ├─ /usr/local/bin/kwin_x11可以看到系统中存在 ykla、root、_dhcp、messagebus、ntpd 这几个用户账户。
FreeBSD 中主要有三类账户:系统账户、用户账户,以及超级用户账户。
超级用户账户拥有系统中的最高权限,即 root 账户。
技巧
实际上是内核根据账户的 EUID(有效用户 ID)是否为
0来判定其是否拥有 root 权限。参见 main/sys/kern/kern_priv.c 中的if (suser_enabled(cred))代码块部分。
系统账户由源代码中的 main/etc/master.passwd 所定义,总共 27 个。故,_dhcp、ntpd 都属于系统账户。系统账户是具有受限权限的专用账户,通常用于运行系统服务和守护进程。
ykla 是笔者在安装系统时创建的普通用户账户。如果希望通过 su 命令切换为 root 用户,必须将该用户加入 wheel 用户组。而 messagebus 是 Port devel/dbus 自动创建的普通用户。
需要注意的是,虽然普通用户权限受限,但其运行的软件越多,系统暴露的攻击面也会增加,从而带来潜在的提权风险。这并不意味着账户“自动”变得更危险——用户的权限是固定的,不会因为运行进程增加而发生权限提升。相反,只有在程序存在漏洞或配置不当的情况下,攻击者才可能尝试利用这些进程实现权限提升。
adduser 创建用户
adduser 创建用户创建一个普通用户(用户名为
ykla),并将其添加到video分组:
示例:创建一个名为 test 的用户,并添加其到 wheel 组,设置其默认 shell 是 sh:
①:登录名命名有一些限制,参见 passwd(5)。但是注意,不支持八位编码字符集,如不支持中文(即仅支持特定 ASCII 字符)。
rmuser 删除用户与 passwd 密码修改
rmuser 删除用户与 passwd 密码修改,用于删除用户。与
adduser命令一样,也是交互式的。该命令带参数-y,且能列出用户列表,
示例:
参数 -y 用于跳过确认步骤。
chpass命令,以vi编辑器方式打开并修改指定用户信息,如不指定用户则默认为当前用户。
技巧
export EDITOR=/usr/bin/ee可将编辑器换成更简单的ee。
常用参数:-s,用于登录环境
示例:
root 用户可修改所有用户的密码。
pw 命令
pw 命令在 FreeBSD 中,可以用 pw 命令管理用户和组:
创建
admin分组,并将用户ykla同时添加到admin和wheel分组:
验证一下:
创建
wheel组,只添加root用户:
从
admin组里移除用户ykla:
删除
admin组:
admin 和 wheel 权限的区别:
admin,具有管理系统的权限(sudo 的默认配置如此),可以使用sudo命令。wheel,超级管理员权限(该名称来源于俚语 big wheel,即大人物)。
pw useradd 命令
pw useradd 命令用于新建用户
示例:
pw usermod 命令
pw usermod 命令用于修改用户信息,常用参数:
-l,为用户改名 其他参数参考 useradd 子命令。
示例:
pw userdel 命令
pw userdel 命令用于删除用户,常用参数:
-r,删除用户同时删除用户主目录及所有相关信息;若不使用该参数则信息保留,仅删除用户
示例:
pw usershow 命令
pw usershow 命令用于显示用户信息,示例:
pw usernext 命令
pw usernext 命令可返回下一个可用的 UID 和 GID,示例:
pw lock 命令
pw lock 命令锁定账号,锁定后账号无法登录使用,
示例:
pw unlock 命令
pw unlock 命令解锁账号,解锁后账号可以正常使用,
示例:
pw groupadd 命令
pw groupadd 命令用于新建组。
示例:
pw groupmod 命令
pw groupmod 命令用于修改组信息,常用参数:
-g,指定新的 gid
-l,重命名组名
-M,替换现有组成员列表,多个用逗号隔开
-m,为现有组成员列表增加新的成员
其他参数参考 groupadd 命令。
示例:
pw groupdel 命令
pw groupdel 命令用于删除组,
示例:
pw groupshow 命令
pw groupshow 命令用于显示组信息,
示例:
pw groupnext 命令
pw groupnext 命令可返回下一个可用的 gid,
示例:
参考文献
FreeBSD 入门笔记,作者 lvv.me
最后更新于
这有帮助吗?