在第一节中将了图形界面的用户管理,本节讲解与用户和组管理相关的shell命令。
1.配置文件
第一节中讲到/etc/passwd文件,它记录了当前操作系统中所有用户的基本信息:用户名、UID、GID、主目录路径、登录shell等。除此之外,系统中还有其他配置文件记录了用户和组的其他信息。
1. 密码文件 /etc/shadow
该文件记录了当前系统中每个用户的密码相关信息及密码策略。文件的内容以每个用户一行的格式进行显示,每行包括多种信息,之间用 “ :” 隔开。以我刚刚添加的用户“my_test”为例,用cat /etc/shadow查看/etc/shadow文件,文件中关于用户my_test的信息如下:
my_test:$6$zrpY0W4F$IuX36Ds1NR3FVCmQaGmzeMzdBahQFT1IzdwQDh8uvjUGuwmbcbvIgSTkrNB. Q68YdNSrrFIzABkiYaEI4RCD11:18758:0:99999:7:::
从左到右为:
用户名:与/etc/passwd文件中的用户名相对应;
密码:该字段的表示方式有
(1) *
(2) !
(3)加密处理后的字符串(大家有兴趣可以去了解相关加密的算法)
上一次修改密码经过的时间:从1970.1.1开始计算,例子中为18758,因为今天是2021.5. 12,已经过了18758天。
密码经过几天可以变更:上面例子为0,说明岁时可以变更;
密码经过几天必须变更:上面例子为99999,说明密码可以长期不变;
密码过期几天前要警告用户:一般为7天;
保留域:用“:::”表示。
2. 用户组文件 /etc/group*
该文件记录了用户组的相关信息,依旧是一个用户组一行。如:
root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog,linux2021
从在到右为:用户组名:密码位:用户组ID:组内用户
3. 权限文件 /etc/sudoers
Ubuntu 为sudo用户提供了、的一个基本配置文件。修改该文件时务必使用visudo工具进行编辑,它会自动对配置语法进行严格检查,以免出错而带来后果。
sudo执行命令的流程
将当前用户切换到超级用户下,或切换到指定的用户下,然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户。
具体工作过程如下:
当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
–>确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
–>若密码输入成功,则开始执行sudo后续的命令
不需要输入密码的情况
1.root执行sudo时不需要输入密码(sudoers文件中有配置root ALL=(ALL:ALL) ALL这样一条规则)
2.欲切换的身份与执行者的身份相同,不需要输入密码
3./etc/sudoers文件设置为允许用户在不输入该用户的密码的情况下使用所有命令
如设置允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
( %wheel ALL=(ALL) NOPASSWD: ALL)
# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d
2.用户管理命令
对于下面的这些命令,你首先要知道有它们的存在,怎么用并不是最重要的。当你不清楚用法时,直接在终端输入man 命令名称
,即可看到他们的用法,各个参数解释。这和matlab的doc命令一样好用。比如我想知道man这个命令的介绍:
终端输入:
$ man man
可以得到:
MAN(1) 手册分页显示工具 MAN(1) 名称 man - 在线参考手册的接口 概述 man [-C 文件] [-d] [-D] [--warnings[=警告]] [-R 编码] [-L 区域] [-m 系 统[,...]] [-M 路径] [-S 列表] [-e 扩展] [-i|-I] [--regex|--wildcard] [--names-only] [-a] [-u] [--no-subpages] [-P 分页程序] [-r 提示] [-7] [-E 编码] [--no-hyphenation] [--no-justification] [-p 字符串] [-t] [-T[设备]] [-H[浏览器]] [-X[dpi]] [-Z] [[章节] 页[.章节] ...] ... man -k [apropos 选项] 正则表达式 ... man -K [-w|-W] [-S list] [-i|-I] [--regex] [章节] 词语 ... man -f [whatis 选项] 页 ... man -l [-C 文件] [-d] [-D] [--warnings[=警告]] [-R 编码] [-L 区域] [-P 分页程序] [-r 提示] [-7] [-E 编码] [-p 字符串] [-t] [-T[设备]] [-H[浏览 器]] [-X[dpi]] [-Z] 文件 ... man -w|-W [-C 文件] [-d] [-D] 页 ... man -c [-C 文件] [-d] [-D] 页 ... man [-?V] 描述 man 是系统的手册分页程序。指定给 man 的 页 选项通常是程序、工具或函数 Manual page man(1) line 1 (press h for help or q to quit)
1.添加用户useradd
或adduser
在文章开头我已经添加了一个名为my_test的用户,这里我再添加一个用户。
linux2021@dahu:~$ su #切换到root 密码: root@dahu:/home/linux2021# adduser my_test_1 #添加一个名为my_test_1的用户 正在添加用户"my_test_1"... 正在添加新组"my_test_1" (1002)... 正在添加新用户"my_test_1" (1002) 到组"my_test_1"... 创建主目录"/home/my_test_1"... 正在从"/etc/skel"复制文件... 输入新的 UNIX 密码: #输入该用户的密码 重新输入新的 UNIX 密码: passwd:已成功更新密码 正在改变 my_test_1 的用户信息 请输入新值,或直接敲回车键以使用默认值 全名 []: nihao 房间号码 []: 101 工作电话 []: 1101 家庭电话 []: 1102 其它 []: test user 这些信息是否正确? [Y/n] y root@dahu:/home/linux2021# #成功建立
2.显示用户信息finger
你可以通过查看/etc/passwd
或者/etc/shadow
文件来查看用户信息。也可以安装finger,用它来查看,先用apt包管理工具安装finger:
$ apt install finger
查看my_test_1用户信息:
这是一般用法,也可以配合相关参数来查看,可以用man命令获取帮助。
root@dahu:/home/linux2021# finger my_test_1 Login: my_test_1 Name: nihao Directory: /home/my_test_1 Shell: /bin/bash Office: 101, x1101 Home Phone: x1102 Never logged in. No mail. No Plan. root@dahu:/home/linux2021#
3.更改用户密码passwd
该指令用于修改一个用户的密码,普通用户只能修改自己的密码,超级管理员则可以更改系统中所有用户的密码
root@dahu:/home/linux2021# passwd my_test_1 输入新的 UNIX 密码: 重新输入新的 UNIX 密码: passwd:已成功更新密码
4.修改用户登录信息usermod
该指令用于修改已经添加到系统中的某个用户的登陆名、主目录、默认shell等信息。
root@dahu:/home/linux2021# usermod -l my_test_new my_test_1 root@dahu:/home/linux2021# finger my_test_1 finger: my_test_1: no such user. root@dahu:/home/linux2021# finger my_test_new Login: my_test_new Name: nihao Directory: /home/my_test_1 Shell: /bin/bash Office: 101, x1101 Home Phone: x1102 Never logged in. No mail. No Plan. root@dahu:/home/linux2021#
5.显示用户IDid
该命令用于显示系统中某个用户的UID 、GID等识别信息。
root@dahu:/home/linux2021# id root uid=0(root) gid=0(root) 组=0(root) root@dahu:/home/linux2021# id my_test_new uid=1002(my_test_new) gid=1002(my_test_1) 组=1002(my_test_1) root@dahu:/home/linux2021#
6.修改用户个人信息chfn
用于修改用户的个人基本信息,姓名、电话等。一般不用,大家可以用man查看帮助。
7.删除用户deluser
该命令可以删除用户的主目录、所有文件、备份等。
root@dahu:/home/linux2021# deluser my_test_new 正在删除用户 'my_test_new'... 警告:组"my_test_1"没有其他成员了。 完成。 root@dahu:/home/linux2021#
你应该发现了,这些命令的格式大都是命令 参数 用户名
这样的格式。而参数有哪些则可以通过man来查看。
3.组管理命令
下列命令的用法与用户管理的命令类似,不再赘述。
1.添加用户组addgroup
2.显示组内用户groups
3.修改用户组信息groupmod
4.删除用户组delgroup