文章目录
- 12.1 创建用户
- 12.1.1 useradd命令
- 12.1.2 用户信息文件
- 12.1.3 创建用户实例
- 12.2 修改用户账号
- 12.2.1 修改密码
- 12.2.2 修改用户shell设置
- 12.2.3 修改主目录
- 12.2.4 修改UID
- 12.2.5 修改账号的有效期
- 12.3 删除用户
- 12.4 管理员账户授权
在Linux中,每个普通用户都有一个账户,包括用户名、密码和主目录等信息。除此之外,还有一些系统本身创建的特殊用户,它们具有特殊的意义,其中最重要的是管理员账户,默认用户名是root。同时Linux也提供了用户组,使每一个用户至少属于一个组,从而便于权限管理。
用户和用户组管理是系统安全管理的重要组成部分,本节主要介绍openEuler提供的用户管理命令,以及为普通用户分配特权的方法。
12.1 创建用户
12.1.1 useradd命令
在root权限下,通过useradd命令可以为系统添加新用户信息,其中 options 为相关参数, username 为用户名称。
# useradd [options] username
12.1.2 用户信息文件
与用户账号信息有关的文件如下:
- /etc/passwd:用户账号信息文件。
- /etc/shadow:用户账号信息加密文件。
- /etc/group:组信息文件。
- /etc/default/useradd:定义默认设置文件。
- /etc/login.defs:系统广义设置文件。
- /etc/skel:默认的初始配置文件目录。
12.1.3 创建用户实例
例如新建一个用户名为test的用户,在root权限下执行如下命令:
[root@superman-21 ~]# useradd test
[root@superman-21 ~]#
说明:
没有任何提示,表明用户建立成功。这时请使用passwd命令设置用户的密码,没有设置密码的新账号不能登录系统。
使用id命令查看新建的用户信息,命令如下:
[root@superman-21 ~]# id test
用户id=1001(test) 组id=1001(test) 组=1001(test)
[root@superman-21 ~]#
修改用户test的密码:
# passwd test
建议在修改用户密码时满足密码复杂度要求,密码的复杂度的要求如下:
-
口令长度至少8个字符。
-
口令至少包含大写字母、小写字母、数字和特殊字符中的任意3种。
-
口令不能和账号一样。
-
口令不能使用字典词汇。
-
查询字典 在已装好的openEuler环境中,可以通过如下命令导出字典库文件dictionary.txt,用户可以查询密码是否在该字典中。
# cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt
例如示例命令如下:
[root@superman-21 ~]# cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt [root@superman-21 ~]#
-
修改字典
-
修改上面导出的字典文件,执行如下命令更新系统字典库。
# create-cracklib-dict dictionary.txt
例如示例命令如下:
[root@superman-21 ~]# create-cracklib-dict dictionary.txt 1916902 1916902 [root@superman-21 ~]#
-
在原字典库基础上新增其他字典内容custom.txt。
# create-cracklib-dict dictionary.txt custom.txt
例如示例命令如下:
[root@superman-21 ~]# echo 'superman' > custom.txt [root@superman-21 ~]# cat custom.txt superman [root@superman-21 ~]# create-cracklib-dict dictionary.txt custom.txt 1916902 1916902 [root@superman-21 ~]#
-
-
例如根据提示两次输入新用户的密码,完成密码更改。过程如下:
[root@superman-21 ~]# passwd test
更改用户 test 的密码 。
新的密码:
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@superman-21 ~]#
说明:
若打印信息中出现“BAD PASSWORD: The password fails the dictionary check - it is too simplistic/sytematic”,表示设置的密码过于简单,建议设置复杂度较高的密码。
12.2 修改用户账号
12.2.1 修改密码
普通用户可以用passwd修改自己的密码,只有管理员才能用passwd username为其他用户修改密码。
12.2.2 修改用户shell设置
使用chsh命令可以修改自己的shell,只有管理员才能用chsh username为其他用户修改shell设置。
用户也可以使用usermod命令修改shell信息,在root权限下执行如下命令,其中 new_shell_path 为目标shell路径,username 为要修改用户的用户名,请根据实际情况修改:
# usermod -s new_shell_path username
例如,将用户test的shell改为sh,命令如下:
[root@superman-21 ~]# grep test /etc/passwd
test:x:1001:1001::/home/test:/bin/bash
[root@superman-21 ~]#
[root@superman-21 ~]# usermod -s /usr/bin/sh test
[root@superman-21 ~]#
[root@superman-21 ~]# grep test /etc/passwd
test:x:1001:1001::/home/test:/usr/bin/sh
[root@superman-21 ~]#
12.2.3 修改主目录
-
修改主目录,可以在root权限下执行如下命令,其中 new_home_directory 为已创建的目标主目录的路径,username 为要修改用户的用户名,请根据实际情况修改:
# usermod -d new_home_directory username
例如示例命令及输出信息如下:
[root@superman-21 ~]# ll -a /home/test 总用量 20K drwx------. 2 test test 4.0K 12月 6 21:05 . drwxr-xr-x. 5 root root 4.0K 12月 6 21:21 .. -rw-r--r--. 1 test test 75 11月 2 2021 .bash_logout -rw-r--r--. 1 test test 71 11月 2 2021 .bash_profile -rw-r--r--. 1 test test 138 11月 2 2021 .bashrc [root@superman-21 ~]# [root@superman-21 ~]# mkdir /home/test1 [root@superman-21 ~]# [root@superman-21 ~]# usermod -d /home/test1 test [root@superman-21 ~]# [root@superman-21 ~]# ll -a /home/test1 总用量 8.0K drwxr-xr-x. 2 root root 4.0K 12月 6 21:21 . drwxr-xr-x. 5 root root 4.0K 12月 6 21:21 .. [root@superman-21 ~]#
-
如果想将现有主目录的内容转移到新的目录,应该使用-m选项,命令如下:
# usermod -d new_home_directory -m username
例如示例命令及输出信息如下:
[root@superman-21 ~]# ll -a /home/test1 总用量 8.0K drwxr-xr-x. 2 root root 4.0K 12月 6 21:30 . drwxr-xr-x. 5 root root 4.0K 12月 6 21:30 .. [root@superman-21 ~]# [root@superman-21 ~]# touch /home/test1/1.txt [root@superman-21 ~]# [root@superman-21 ~]# ll -a /home/test1 总用量 8.0K drwxr-xr-x. 2 root root 4.0K 12月 6 21:32 . drwxr-xr-x. 5 root root 4.0K 12月 6 21:30 .. -rw-r--r--. 1 root root 0 12月 6 21:32 1.txt [root@superman-21 ~]# [root@superman-21 ~]# usermod -d /home/test2 -m test [root@superman-21 ~]# [root@superman-21 ~]# ll -a /home/test2 总用量 8.0K drwxr-xr-x. 2 root root 4.0K 12月 6 21:32 . drwxr-xr-x. 5 root root 4.0K 12月 6 21:33 .. -rw-r--r--. 1 root root 0 12月 6 21:32 1.txt [root@superman-21 ~]#
12.2.4 修改UID
修改用户ID,在root权限下执行如下命令,其中 UID 代表目标用户ID,username 代表用户名,请根据实际情况修改:
# usermod -u UID username
该用户主目录中所拥有的文件和目录都将自动修改UID设置。但是,对于主目录外所拥有的文件,只能使用chown命令手动修改所有权。
例如示例命令及输出信息如下:
[root@superman-21 ~]# id test
用户id=1001(test) 组id=1001(test) 组=1001(test)
[root@superman-21 ~]#
[root@superman-21 ~]# usermod -u 1002 test
[root@superman-21 ~]#
[root@superman-21 ~]# id test
用户id=1002(test) 组id=1001(test) 组=1001(test)
[root@superman-21 ~]#
12.2.5 修改账号的有效期
如果使用了影子口令,则可以在root权限下,执行如下命令来修改一个账号的有效期,其中 MM 代表月份,DD 代表某天,YY 代表年份,username 代表用户名,请根据实际情况修改:
# usermod -e MM/DD/YY username
例如示例命令及输出信息如下:
[root@superman-21 ~]# usermod -e 03/20/23 test
[root@superman-21 ~]#
[root@superman-21 ~]# chage -l test
最近一次密码修改时间 :12月 06, 2022
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :3月 20, 2023
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
[root@superman-21 ~]#
12.3 删除用户
在root权限下,使用userdel命令可删除现有用户。
例如,删除用户Test,命令如下:
[root@superman-21 ~]# grep test /etc/passwd
test:x:1002:1001::/home/test2:/usr/bin/sh
[root@superman-21 ~]#
[root@superman-21 ~]# ll -a /home/test2
总用量 8.0K
drwxr-xr-x. 2 root root 4.0K 12月 6 21:32 .
drwxr-xr-x. 5 root root 4.0K 12月 6 21:33 ..
-rw-r--r--. 1 root root 0 12月 6 21:32 1.txt
[root@superman-21 ~]#
[root@superman-21 ~]# userdel test
[root@superman-21 ~]#
[root@superman-21 ~]# ll -a /home/test2
总用量 8.0K
drwxr-xr-x. 2 root root 4.0K 12月 6 21:32 .
drwxr-xr-x. 5 root root 4.0K 12月 6 21:33 ..
-rw-r--r--. 1 root root 0 12月 6 21:32 1.txt
[root@superman-21 ~]#
如果想同时删除该用户的主目录以及其中所有内容,要使用-r参数递归删除。
例如示例命令如下:
[root@superman-21 ~]# useradd test3
[root@superman-21 ~]#
[root@superman-21 ~]# grep test3 /etc/passwd
test3:x:1002:1002::/home/test3:/bin/bash
[root@superman-21 ~]#
[root@superman-21 ~]# ll -a /home/test3
总用量 20K
drwx------. 2 test3 test3 4.0K 12月 6 22:07 .
drwxr-xr-x. 6 root root 4.0K 12月 6 22:07 ..
-rw-r--r--. 1 test3 test3 75 11月 2 2021 .bash_logout
-rw-r--r--. 1 test3 test3 71 11月 2 2021 .bash_profile
-rw-r--r--. 1 test3 test3 138 11月 2 2021 .bashrc
[root@superman-21 ~]#
[root@superman-21 ~]# userdel -r test3
[root@superman-21 ~]#
[root@superman-21 ~]# ll -a /home/test3
ls: 无法访问 '/home/test3': 没有那个文件或目录
[root@superman-21 ~]#
说明:
不建议直接删除已经进入系统的用户,如果需要强制删除,请使用 userdel -f Test 命令。
12.4 管理员账户授权
使用sudo命令可以允许普通用户执行管理员账户才能执行的命令。
sudo命令允许已经在/etc/sudoers文件中指定的用户运行管理员账户命令。例如,一个已经获得许可的普通用户可以运行如下命令:
$ sudo /usr/sbin/useradd newuserl
实际上,sudo的配置完全可以指定某个已经列入/etc/sudoers文件的普通用户可以做什么,不可以做什么。
/etc/sudoers的配置行如下所示。
-
空行或注释行(以#字符打头):无具体功能的行。
-
可选的主机别名行:用来创建主机列表的简称。必须以Host_Alias关键词开头,列表中的主机必须用逗号隔开,如:
# Host_Alias linux=ted1,ted2
其中ted1和ted2是两个主机名,可使用linux(别名)称呼它们。
-
可选的用户别名行:用来创建用户列表的简称。用户别名行必须以User_Alias关键词开头,列表中的用户名必须以逗号隔开。其格式同主机别名行。
-
可选的命令别名行:用来创建命令列表的简称。必须以Cmnd_Alias开头,列表中的命令必须用逗号隔开。
-
可选的运行方式别名行:用来创建用户列表的简称。不同的是,使用这样的别名可以告诉sudo程序以列表中某一用户的身份来运行程序。
-
必要的用户访问说明行。
用户访问的说明语法如下:
# user host = [ run as user ] command list
在user处指定一个真正的用户名或定义过的别名,host也可以是一个真正的主机名或者定义过的主机别名。默认情况下,sudo执行的所有命令都是以root身份执行。如果您想使用其他身份可以指定。command list可以是以逗号分隔的命令列表,也可以是一个已经定义过的别名,如:
# ted1 ted2=/sbin/shutdown
这一句说明ted1可以在ted2主机上运行关机命令。
# newuser1 ted1=(root) /usr/sbin/useradd,/usr/sbin/userdel
这一句说明ted1主机上的newuser1可以以root用户权限执行useradd,userdel命令。
说明:
- 可以在一行定义多个别名,中间用冒号 (😃 隔开。
- 可在命令或命令别名之前加上感叹号 (!),使该命令或命令别名无效。
- 有两个关键词:ALL和NOPASSWD。ALL意味着“所有”(所有文件、所有主机或所有命令),NOPASSWD意味着不用密码。
- 通过修改用户访问,将普通用户的访问权限修改为同root一样,则可以给普通用户分配特权。
下面是一个sudoers文件的例子:
#sudoers files
#User alias specification
User_Alias ADMIN=ted1:POWERUSER=globus,ted2
#user privilege specification
ADMIN ALL=ALL
POWERUSER ALL=ALL,!/bin/su
其中:
-
User_Alias ADMIN=ted1:POWERUSER=globus,ted2
定义了两个别名ADMIN和POWERUSER
-
ADMIN ALL=ALL
说明在所有主机上,ADMIN用户都可以以root身份执行所有命令
-
POWERUSER ALL=ALL,!/bin/su
给POWERUSER用户除了运行su命令外等同ADMIN的权限