[华为云在线课程][Linux用户,组和权限管理][第一章用户和组管理命令][学习笔记]

举报
John2021 发表于 2022/04/19 06:55:32 2022/04/19
【摘要】 用户和组的配置文件 shadow文件格式登录用户用户密码:一般用sha512加密从1970年1月1日起到密码最近一次被更改的时间密码再过几天可以被变更(0表示随时可被变更)密码再过几天必须被变更(99999表示永不过期)密码过期前几天系统提醒用户(默认为一周)密码过期几天后账号会被锁定从1970年1月1日算起,多少天后账号失效更改密码加密算法:authconfig --passalgo=s...

用户和组的配置文件

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 ~]#
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。