[华为云在线课程][Linux用户,组和权限管理][第一章用户和组管理命令][学习笔记]
用户和组的配置文件
shadow文件格式
登录用户
用户密码:一般用sha512加密
从1970年1月1日起到密码最近一次被更改的时间
密码再过几天可以被变更(0表示随时可被变更)
密码再过几天必须被变更(99999表示永不过期)
密码过期前几天系统提醒用户(默认为一周)
密码过期几天后账号会被锁定
从1970年1月1日算起,多少天后账号失效
更改密码加密算法:
authconfig --passalgo=sha256 --update
密码的安全策略
- 足够长
- 使用数字、大写字母、小写字母及特殊字符中至少3种
- 使用随机密码
- 定期更换,不要使用最近曾经使用过的密码
例子:生成随机密码
[root@localhost ~]# tr -dc '[:alnum:]' < /dev/urandom | head -c 12
6j3QwHxJUJrW[root@localhost ~]# openssl rand -base64 9
7DkiWX3mwKJY
[root@localhost ~]#
group文件格式
群组名称:就是群组名称
群组密码:通常不需要设定,密码是被记录在/etc/shadow
GID:就是群组的ID
以当前组为附加组的用户列表(分隔符为都好)
gshadow文件格式
群组名称:就是群的名称
群组密码:
组管理员列表:组管理员的列表,更改组密码和成员
以当前组为附加组的用户列表:多个用户间用逗号分隔
文件操作
vipw和vigr
pwck和grpck
用户和组管理命令
用户管理命令
- useradd
- usermod
- userdel
组账号维护命令
- groupadd
- groupmod
- groupdel
用户创建
useradd命令可以创建新的Linux用户
格式:
useradd [options] LOGIN
常见选项:
-u UID
-o 配合-u选项,不检查UID的唯一性
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT" 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2...] 为用户指明附加组,组需要事先存在
-N 不创建私用组为主组,使用users组做主组
-r 创建系统用户CentOS6之前:ID<500,CentOS7以后:ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
-p 指定加密的密码
例子:
useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache
useradd命令默认值设定由/etc/default/useradd定义
[root@localhost ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1 #对应/etc/shadow文件第7列,即用户密码过期的宽限期
EXPIRE= #对应/etc/shadow文件第8列,即用户账号的有效期
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
显示或更改默认设置
useradd -D
useradd -D -s SHELL
useradd -D -b BASE_DIR
useradd -D -g GROUP
新建用户的相关文件
/etc/default/useradd
/etc/shkel/*
/etc/login.defs
批量创建用户
newusers passwd 格式文件
批量修改用户口令
echo username:passwd | chpasswd
例子:利用Python在CentOS7生成sha512加密密码
[root@localhost ~]# python -c 'import crypt,getpass;pw="hello";print(crypt.crypt(pw))'
$6$HU8qgfSoxnuIywCR$2T3ppfqiizi6xlz1ZIH6pYpabAs1La/k39VOD40Y9/nbX0erN0hup9hqLRxkADgQR167AwsnBGpFxFbUgxSZo1
例子:CentOS8生成sha512加密密码
openssl passwd -6 hello
用户属性修改
usermod命令可以修改用户属性
格式:
usermod [OPTION] login
常见选项:
-u UID:新UID
-g GID:新GID
-G GROUP1[,GROUP2,...[,GROUPN]]:新附加组,原来的附加组将会被覆盖;若保留所有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME:新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name:新的名字
-L:lock指定用户,在/etc/shadow密码栏的增加!
-U:unlock指定用户,将/etc/shadow密码栏的!拿掉
-e YYYY-MM-DD:指明用户账号过期日期
-f INACTIVE:设定非活动期限,即宽限期
删除用户
userdel可删除Linux用户
格式:
userdel [OPTION]... login
常见选项:
-f,--force 强制
-r,--remove 删除用户家目录和邮箱
查看用户相关的ID信息
id命令可以查看用户UID,GID等信息
id [OPTION]... [USER]
常见选项:
-u 显示UID
-g 显示GID
-G 显示用户所属的组的ID
-n 显示名称,需配合ugG使用
切换用户或以其他用户身份执行命令
su:switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
格式:
su [options...] [-] [user [args...]]
常见选项:
-l --login su -l Username 相当于 su - Username
-c, --command <command> pass a single command to the shell with -c
切换用户的方式:
su Username:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
su - Username:登录式切换,会读取目标用户的配置文件,切换至自己的家目录,即完全切换
说明:root su至其他用户无需密码;非root用户切换时需要密码
注意:su 切换新用户后,使用exit退回至旧的用户,而不要再用su切换至旧用户,否则会生成很多的bash子进程,环境可能会很混乱。
换个身份执行命令:
su [-] username -c 'COMMAND'
例子:
[root@localhost ~]# getent passwd hello
hello:x:1000:1000:hello:/home/hello:/bin/bash
[root@localhost ~]# usermod -s /bin/false hello
[root@localhost ~]# getent passwd hello
hello:x:1000:1000:hello:/home/hello:/bin/false
# hello用户不能使用bash了
例子:
[root@localhost ~]# su -s /sbin/nologin hello
This account is currently not available.
[root@localhost ~]# whoami
root
[root@localhost ~]#
[root@localhost ~]# su -s /bin/false hello
[root@localhost ~]# whoami
root
设置密码
passwd可以修改用户密码
格式:
passwd [OPTIONS] username
常用选项:
-d 删除指定用户密码
-l 锁定指定用户
-u 解锁指定用户
-e 强制用户下次登录修改密码
-f 强制操作
-n mindays 指定最短使用期限
-x maxdays 最大使用期限
-w warndays 提前多少天开始警告
-i inactivedays 非活动期限
--stdin 从标准输入接受用户密码,Ubuntu无此选项
例子:非交互式修改用户密码
#适用于红帽系列的Linux版本
[root@localhost ~]# echo '123456' | passwd --stdin hello
Changing password for user hello.
passwd: all authentication tokens updated successfully.
例子:设置用户下次必须更改密码
[root@localhost ~]# useradd testuser
[root@localhost ~]# echo 123456 | passwd --stdin testuser
Changing password for user testuser.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# getent shadow testuser
testuser:$6$k9af2r1l$VifwCIbZ.m/gjxUFe3EfVXVLVH.wtgdwUYxchK/dqEwAD9tspEYfJzLYrc/ztLuhxCDl0cjfd.ulhdEywBnRO.:19100:0:99999:7:::
[root@localhost ~]# passwd -e testuser
Expiring password for user testuser.
passwd: Success
[root@localhost ~]# getent shadow testuser
testuser:$6$k9af2r1l$VifwCIbZ.m/gjxUFe3EfVXVLVH.wtgdwUYxchK/dqEwAD9tspEYfJzLYrc/ztLuhxCDl0cjfd.ulhdEywBnRO.:0:0:99999:7:::
修改用户密码策略
chage可以修改用户密码策略
格式:
chage [OPTION]... LOGIN
常见选项:
-d LAST_DAY #更改密码的时间
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-I --inactive INACTIVE #密码过期后的宽限期
-E --expiredate EXPIRE_DATE #用户的有限期
-l #显示密码策略
例子:
[root@localhost ~]# chage -l hello
Last password change : Apr 18, 2022
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
[root@localhost ~]# getent shadow hello
hello:$6$oNoIViUr$qvFeCgumXxOhsJIHYPkg7DcEEv8AWOvqGsDemu.CkCeZBVeI5Hm8d.21ZMBMxcLYqn708sZMckA16vNMO0NyJ.:19100:0:99999:7:::
用户相关的其他命令
1,chfn指定个人信息
2,chsh指定shell,相当于usermod -s
3,finger可看用户个人信息
例子:修改用户使用不可登录的shell类型
[root@localhost ~]# getent passwd hello
hello:x:1000:1000:hello:/home/hello:/bin/bash
[root@localhost ~]# chsh -s /sbin/nologin hello
Changing shell for hello.
chsh: Warning: "/sbin/nologin" is not listed in /etc/shells.
Shell changed.
[root@localhost ~]# su - hello
Last login: Mon Apr 18 22:22:09 CST 2022 on pts/0
This account is currently not available.
[root@localhost ~]# chsh -s /bin/false hello
Changing shell for hello.
chsh: Warning: "/bin/false" is not listed in /etc/shells.
Shell changed.
[root@localhost ~]# chsh -s /bin/bash hello
Changing shell for hello.
Shell changed.
[root@localhost ~]# su - hello
Last login: Tue Apr 19 06:26:31 CST 2022 on pts/0
[hello@localhost ~]$
创建组
groupadd实现创建组
格式
groupadd [OPTION]... group_name
常见选项:
-g GID 指明GID号;[GID_MIN,GID_MAX]
-r 创建系统组,CentOS6之前:ID<500,CentOS7之后:ID<1000
例子:
groupadd -g 48 -r apache
修改组
groupmod 组属性修改
格式:
groupmod [OPTION]... group
常见选项:
-n group_name:新名字
-g GID:新的GID
组删除
groupdel可以删除组
格式:
groupdel [options] GROUP
常见选项:
-f,--force 强制删除,即使是用户的主组也强制删除组
更改组密码
gpasswd命令,可以更改组密码,也可以修改附加组的成员关系
格式:
gpasswd [option] group
常见选项:
-a user 将user添加至指定组中
-d user 从指定附加组中移除用户user
-A user1,user2,... 设置有管理权限的用户列表
例子:
#增加组成员
[root@localhost ~]# groupadd admins
[root@localhost ~]# id hello
uid=1000(hello) gid=1000(hello) groups=1000(hello)
[root@localhost ~]# gpasswd -a hello admins
Adding user hello to group admins
[root@localhost ~]# id hello
uid=1000(hello) gid=1000(hello) groups=1000(hello),1001(admins)
[root@localhost ~]# groups hello
hello : hello admins
[root@localhost ~]# getent group admins
admins:x:1001:hello
#删除组成员
[root@localhost ~]# gpasswd -d hello admins
Removing user hello from group admins
[root@localhost ~]# groups hello
hello : hello
[root@localhost ~]# id hello
uid=1000(hello) gid=1000(hello) groups=1000(hello)
[root@localhost ~]# getent group admins
admins:x:1001:
临时切换主组
newgrp命令可以临时切换主组,如果用户本不属于此组,则需要组密码
格式:
newgrp [-] [group]
如果使用-选项,可以初始化用户环境
[hello@localhost ~]$ newgrp root
Password:
[hello@localhost ~]$ id
uid=1000(hello) gid=0(root) groups=0(root),1000(hello)
[hello@localhost ~]$ getent passwd hello
hello:x:1000:1000:hello:/home/hello:/bin/bash
[hello@localhost ~]$ touch h1.txt
[hello@localhost ~]$ ll
total 4
drwxr-xr-x. 2 root root 4096 Apr 16 15:18 code
-rw-r--r-- 1 hello root 0 Apr 19 06:45 h1.txt
[hello@localhost ~]$ id
uid=1000(hello) gid=0(root) groups=0(root),1000(hello)
[hello@localhost ~]$ exit
exit
[hello@localhost ~]$ id
uid=1000(hello) gid=1000(hello) groups=1000(hello)
[hello@localhost ~]$ touch h2.txt
[hello@localhost ~]$ ll
total 4
drwxr-xr-x. 2 root root 4096 Apr 16 15:18 code
-rw-r--r-- 1 hello root 0 Apr 19 06:45 h1.txt
-rw-rw-r-- 1 hello hello 0 Apr 19 06:46 h2.txt
更改和查看组成员
groupmems可以管理附加组的成员关系
格式
groupmems [options] [action]
常见选项:
-g,--group groupname #更改为指定组(只有root)
-a,--add username #指定用户加入组
-d,--delete username #从组中删除用户
-p,--purge #从组中清除所有成员
-l,--list #显示组成员列表
groups可查看用户组关系
格式
#查看用户所属组列表
groups [OPTION].[USERNAME]...
例子:
[root@localhost ~]# groupmems -l -g admins
[root@localhost ~]# groupmems -a hello -g admins
[root@localhost ~]# id hello
uid=1000(hello) gid=1000(hello) groups=1000(hello),1001(admins)
[root@localhost ~]# groupmems -l -g admins
hello
[root@localhost ~]# groupmems -d hello -g admins
[root@localhost ~]# groupmems -l -g admins
[root@localhost ~]# groups hello
hello : hello
[root@localhost ~]#
- 点赞
- 收藏
- 关注作者
评论(0)