一.Linux账户与组的基本概念
在Limux操作系统中,每一个文件和程序都归属于一个特定的 "用户"。每个用户都由一个唯一的身份来标识,这个标识称为用户ID (UserID, UID )。系统中的每一个用户也至少需要属于一个"用户分组",即由系统管理员所建议的用户小组,这个小组中包含着许多系统用户。与用户一样,用户分组也是由一个唯一 的身份来标识的,该标识称为用户分组ID (GroupID GID)。用户可以归属于多个用户分组。对某个文件或程序的访问是以它的UID和GID为基础的。一个执行中的程序继承了调用它的用户的权利和访问权限。一般来说, 用户和组有如下几种对应关系:
-
一对一:某个用户可以是某个组的唯一成员。
-
多对一:多个用户可以是某个唯一的组的成员, 不归属其他用户组。
-
一对多:某个用户可以是多个用户组的成员。
-
多对多:多个用户对应多个用户组,并且几个用户可以是归属相同的组。
每个用户的权限可以被定义为普通用户和根用户(root)。普通用户只能访问其拥有的或者有权限执行的文件。根用户能够访问系统全部的文件和程序,而不论根用户是否是这些文件和程序的所有者。根用户通常也称"超级用户""其权限是系统中最大的,可以执行任何操作。
二.Linux账户信息的关键文件
1.Password用户账号文件
# /etc/passwd文件是Linux安全的关键文件之一。该文件用于用户登录时校验用户的登录名(LOGNAME),加密的口令数据项(PASSWORD),用户ID(UID),默认的用户分组ID(GID),用户信息(USERINFO),用户登录子目录以及登录后使用的shell(SHELL).这个文件的每一行保存一个用户的资料,而用户资料的每一个数据项采用冒号":"分割,如下所示:
bash
[root@localhost ~]# cat /etc/passwd | grep 'root'
root:x:0:0:root:/root:/bin/bash
解析:
登录名:root
加密后的口令表示:x #一般使用不可逆的加密算法。
UID:0
GID:0
用户信息:root
宿主目录/家目录:/root
登录后执行的shell:/bin/bash
# 在安全检查中需要着重注意该文件的权限,默认/etc/passwd文件的权限为0644.使用命令stat /etc/passwd进行检查,如果该文件的权限和属主发生了异常情况(如误操作或入侵事件),需要引起注意。
bash
[root@localhost ~]# stat /etc/passwd
文件:"/etc/passwd"
大小:2429 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:18064261 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2022-05-16 14:45:23.469999910 +0800
最近更改:2022-04-25 16:32:16.217576422 +0800
最近改动:2022-04-25 16:32:16.217576422 +0800
创建时间:-
[root@localhost ~]#
2.Shadow用户影子文件
# linux使用不可逆的加密算法加密口令。由于加密算法是不可逆的,所以从密文时得不到明文的。但/etc/passwd文件是全局可读的,加密算法是公开的,恶意用户获取/etc/passwd文件后,便极有可能破解口令。而且,在计算机性能日益提高的今天,对帐户文件进行字典攻击的成功率会越来越高,速度越来越快。因此,针对这种安全问题,Linux/UNIX广泛采用了"Shadow(影子)文件"机制,而加密的口令转移到/etc/shadow文件里,该文件只为root超级用户可读,而同时/etc/passwd/文件的密文域显示为一个X,从而最大限度地减少了密文泄露的机会
bash
[root@localhost ~]# cat /etc/shadow
username:passwd:lastchg:min:max:warn:inactive:expire:flag
解析:
username:用户的登录名
passwd:加密的用户口令
lastchg:最后一次修改事件:表示从1970年1月1日起到上次修改口令所经过的天数
min:最小修改时间间隔:表示两次修改口令之间至少经过的天数
max:密码有效期:表示口令还会有效的最大天数,如果是99999则表示永不过期
warn:密码需要更改前的警告天数:表示口令失效期多少天内系统向用户发出警告
inactive:密码过期后的宽限天数
expire:账户失效时间:表示用户被禁止登录的时间
flag:保留域,暂未使用
3.group组账号文件
# /etc/passwd文件中包含着每个用户默认的分组ID(GID).在/etc/group文件中,这个GID被映射到该用户分组的名称以及统一分组的其他成员中去。
bash
[root@localhost ~]# cat /etc/group
组名:用户组口令:组标识号:组内用户列表
"组名":是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
"口令":字段存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。
"组标识号":与用户标识号类似,也是一个整数,被系统内部用来标识组。
"组内用户列表":是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
4.组账号文件gshadow
# 如同用户账号文件的作用一样,组行号文件也是为了加强组口令的安全性,防止黑客对其施行暴力攻击,而采用的一种将组口令与与组的其他信息相分享的安全机制。其格式包括用户组名,加密的组口令和组成员列表。
bash
[root@localhost ~]# groupadd wanan //添加用户组
[root@localhost ~]# gpasswd wanan //给用户组设置密码为123
正在修改 wanan 组的密码
新密码:
请重新输入新密码:
[root@localhost ~]# cat /etc/gshadow | grep 'wanan'
wanan:$6$aWR/c/VciOaU$J8trSU3fJWNDKHn3Z.m6Frtu7UKCDp6YZmUo8NNjSMtylKtG.ZjI6xz9yC.WdEuuGIKb0JIB5D898/kjeO22P1::
[root@localhost ~]#
三.Linux账户与组管理操作
1.添加账户
Ⅰ.useradd命令
相关参数:
-
-c comment:描述新用户账号,通常为用户全名
-
-d home_dir:设置用户主目录,默认值为用户登录的登录名,并放在/home/目录下
-
-D :创建新账号后保存为新账号设置的默认信息
-
-e expire_date:用YYYY-MM-DD格式设置账号过期日期
-
-f inactivity:设置口令失效时间。inactivity值为0时,口令失效后账户立即失效
-
-g 设置基本组
-
-k 框架目录:设置框架目录,该目录包含用户的初始配置文件,创建用户时间时该目录下的文件都被复制到用户主目录下
-
-m 自动创建用户主目录,并把框架目录(默认为/etc/skel)下的文件复制到用户主目录下
-
-M 不创建用户主目录
-
-r 允许保留的系统账号,使用用户ID创建一个新账号
-
-s shll 类型 :设定用户使用的登录shell类型
-
-u 用户ID:设置用户ID
bash-b, --base-dir BASE_DIR 新账户的主目录的基目录 -c, --comment COMMENT 新账户的 GECOS 字段 -d, --home-dir HOME_DIR 新账户的主目录 -D, --defaults 显示或更改默认的 useradd 配置 -e, --expiredate EXPIRE_DATE 新账户的过期日期 -f, --inactive INACTIVE 新账户的密码不活动期 -g, --gid GROUP 新账户主组的名称或 ID -G, --groups GROUPS 新账户的附加组列表 -h, --help 显示此帮助信息并推出 -k, --skel SKEL_DIR 用此目录作为骨架目录 -K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值 -l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库 -m, --create-home 创建用户的主目录 -M, --no-create-home 不创建用户的主目录 -N, --no-user-group 不创建同名的组 -o, --non-unique 允许使用重复的 UID 创建用户 -p, --password PASSWORD 加密后的新账户密码 -r, --system 创建一个系统账户 -R, --root CHROOT_DIR chroot 到的目录 -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files -s, --shell SHELL 新账户的登录 shell -u, --uid UID 新账户的用户 ID -U, --user-group 创建与用户同名的组 -Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER
例:创建一个用户名为David的用户,其描述信息为"Project manager",用户组为Project_group(如果系统中没有这个组,需要事先创建这个组)。登录shell为/bin/bash,登录主目录为/home/david。
bash
[root@localhost ~]#groupadd Project_manager
[root@localhost ~]# useradd -r david -c "Project manager" -g Project_group -s /bin/bash -d /home/david
[root@localhost ~]# id david
uid=988(david) gid=1003(Project_group) 组=1003(Project_group)
[root@localhost ~]#
Ⅱ.adduser命令
例:创建zaoan用户
bash
[root@localhost ~]# adduser zaoan
Ⅲ.修改/etc/passwd配置文件
bash
[root@localhost ~]# vim /etc/passwd
[root@localhost ~]# cat /etc/passwd | grep 'wuan'
wuan:x:1002:1002:This is a wuan:/home/wuan:/bin/bash
[root@localhost ~]# id wuan
uid=1002(wuan) gid=1002(wanan) 组=1002(wanan)
[root@localhost ~]#
2.添加组
Ⅰ.groupadd命令
#语法格式:groupadd [选项] 用户组名
选项:
-f, --force 如果组已经存在则成功退出,并且如果 GID 已经存在则取消 -g
-g, --gid GID 为新组使用 GID
-h, --help 显示此帮助信息并推出
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-o, --non-unique 允许创建有重复 GID 的组
-p, --password PASSWORD 为新组使用此加密过的密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR directory prefix
bash
例子:创建一个GID为6830,组名为test_group的用户组,命令如下:
[root@localhost ~]# groupadd -g 6830 test_group //创建成功
[root@localhost ~]# groupadd -g 6831 test_group //由于组名不唯一,所以创建失败
groupadd:"test_group"组已存在
[root@localhost ~]# groupadd -g 6831 -f -o test_group //由于组名不唯一,所以创建失败,但是不提示
[root@localhost ~]# groupadd -g 6830 test_group1 //由于GID不唯一,所以创建失败
groupadd:GID "6830"已经存在
[root@localhost ~]# groupadd -f -g 6830 test_group1 //使用-f选项,则创建成功,gid递增为6831
[root@localhost ~]# groupadd -g 6830 -f -o test_group1 //综合使用-f和-o选项,系统将Gid设置6831
Ⅱ.修改/etc/groups配置文件
bash
[root@localhost ~]# vim /etc/group
[root@localhost ~]# cat /etc/group | grep "test_group2"
test_group2:x:6832:
[root@localhost ~]# groupadd test_group2
groupadd:"test_group2"组已存在
[root@localhost ~]#
3.给用户或组设置口令
Ⅰ.给用户设置口令
bash
第一种:passwd 用户名
[root@localhost ~]# passwd zaoan
更改用户 zaoan 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]#
第二种:使用echo 密码 | passwd --stdin 用户
[root@localhost ~]# echo centos | passwd --stdin zaoan
更改用户 zaoan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]#
Ⅱ.给组设置口令
bash
语法格式:gpasswd 组名
[root@localhost ~]# gpasswd test_group2
正在修改 test_group2 组的密码
新密码:
请重新输入新密码:
[root@localhost ~]#
4.修改账户和组信息
Ⅰ.usermod命令
#语法格式:
usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]
#选项:
-c<备注> 修改用户帐号的备注文字。
-d登入目录> 修改用户登入时的目录。
-e<有效期限> 修改帐号的有效期限。
-f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
-g<群组> 修改用户所属的群组。
-G<群组> 修改用户所属的附加群组。
-l<帐号名称> 修改用户帐号名称。
-L 锁定用户密码,使密码无效。
-s<shell> 修改用户登入后所使用的shell。
-u<uid> 修改用户ID。
-U 解除密码锁定。
bash
例子:使用usermod命令将zaoan的组改为root,用户id改为2021
[root@localhost ~]# usermod -g root -u 2021 zaoan
[root@localhost ~]# id zaoan
uid=2021(zaoan) gid=0(root) 组=0(root)
[root@localhost ~]#
使用usermod命令将zaoan的用户描述改为database manager ,其登录shell改为/bin/sh;
[root@localhost ~]# usermod -s /bin/sh -c "database 1manager" zaoan
[root@localhost ~]# cat /etc/passwd | grep 'zaoan'
zaoan:x:2021:0:database 1manager:/home/zaoan:/bin/sh
[root@localhost ~]#
在某些情况下需要锁定用户,即暂时不允许该用户登录。例如:临时锁定test用户,不允许其登录,那么可以使用命令
usermod -L 用户
[root@localhost ~]# usermod -L zaoan
[root@localhost ~]# su zaoan
bash-4.2$ ls
ls: 无法打开目录.: 权限不够
解除用户锁定状态的命令:
[root@localhost ~]# usermod -U zaoan
[root@localhost ~]# su zaoan
Ⅱ.groupmod命令
#语法格式:groupmod [-g <群组识别码> <-o>][-n <新群组名称>][群组名称]
#选项:
-g, --gid GID 将组 ID 改为 GID
-h, --help 显示此帮助信息并推出
-n, --new-name NEW_GROUP 改名为 NEW_GROUP
-o, --non-unique 允许使用重复的 GID
-p, --password PASSWORD 将密码更改为(加密过的) PASSWORD
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
bash
例子:将组test_group的名称改为team,需要注意的是,更换的新名称在老名称之前
[root@localhost ~]# groupmod -n team test_group
例子:将组team的GID改为6840
[root@localhost ~]# groupmod -g 6840 team
例子:将组team的GID更改为6830,名称改为test_group
[root@localhost ~]# groupmod -g 6830 -n test_group team
5.删除用户和组
Ⅰ.userdel命令
#语法格式:userdel -r 用户名
Ⅱ.配置/etc/passwd文件
#将目标用户所在那一行删除
Ⅲ.groupdel命令
#语法格式:groupdel 组名
Ⅳ.配置/etc/group文明
#将目标组名所在的哪一行删除
6.其他操作命令
Ⅰ.chfn:修改用户信息
#语法作用:主要用来修改用户的全名,办公室地址,电话等。
#语法格式:
chfn [-f full-name][-o office][-p office-phone][-h home-phone][-u][-v][username]
-u | --help显示帮助文档
-v | --version显示命令版本
-f | --full-name设置真实姓名
-o | --office设置办公室地址
-h | --home-phone设置家庭电话
-p | --office-phone设置办公室电话
Ⅱ.chsh:改变用户的shell类型
#语法格式:chsh [-s shell][--list-shells][--help][--version][username]
-s或--shell:更改系统预设的shell环境。;
-l或--list-shells:列出目前系统可用的shell清单;
-u或--help:在线帮助;
-v或-version:显示版本信息。
四.Linux账户密码安全配置
1.密码复杂度设置
# linux系统中,设置密码强度时安全领域中十分重要的环节。弱密码复杂度设定包含两种方式:第一种是使用命令authconfig;第二种是修改文件/etc/pam.d/system-auth内容。
Ⅰ.authconfig命令
authconfig命令功能非常丰富,下面只介绍密码相关参数。
-
--passminlen= <number>:最小密码长度
-
--passminclass=<number>:最小字符类型数
-
--passmaxrepeat=<number>:每个字符重复的最大数
-
--passmaxclassrepeate=<number>:密码中同一类的最大连续字符数
-
--update:更新设置到配置文件中
bash
例如:需要设定用户的密码必须不小于8位且其中包含大写字母,小写字母,数字和其他字符,每个字符最多重复两次。使用命令如下:
[root@localhost ~]# authconfig --passminlen=8 --passminclass=4 --passmaxrepeat=2 --update
[root@localhost ~]# cat /etc/security/pwquality.conf
minlen = 8 //最大长度为8
minclass = 4 //密码中必须包含4种类型
maxrepeat = 2 //每个字符最多重复两次
maxclassrepeat = 0 //同一类字符连续数位0
lcredit = 0
ucredit = 0
dcredit = 0
ocredit = 0
使用用户zaoan测试,输入弱密码123456:
[root@localhost ~]# useradd ah1
[root@localhost ~]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码:密码少于8个字符
Ⅱ.使用/etc/pam.d/system-auth文件
# system-auth文件属于Linux的PAM认证系统中的cracklib模块,该模块能提供额外的密码检测能力,且在Centos中已经默认安装。同时,system-auth文件时密码设置及登录的控制文件,因此可以通过修改该文件内容设置密码复杂度。
system-auth文件包含4个组件:auth,account,password,session
-
auth组件:认证接口,要求并验证密码
-
account组件:检测是否允许访问。检测账户是否过期或者在末端时间内能否登录
-
password组件:设置并验证密码
-
session组件:配置和管理用户session
bash
[root@localhost ~]# cat /etc/pam.d/system-auth
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth sufficient pam_fprintd.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
查看/etc/pam.d/system-auth
该文件支持四种依赖关系:required,requisite,sufficient,optinal
-
required<要求>:该模块必须success才能继续。即使失败用户也不会立刻获知,直到所有相关模块完成。
-
requisite<必需的>:该模块必须success才能使认证继续进行
-
sufficient<足够的>:如果失败则忽略
-
optinal:无论是否失败将忽略结果
其中pam_cracklib.so支持的选项如下:
-
minlen=N:新密码的最小长度
-
dcredit=N:当N>0时表示新密码中数字出现的最多次数;当N<0时表示新密码中数字出现的最小次数
-
ucredit=N:当N>0时表示新密码中大写字母出现的最多次数;当N<0时表示新密码中大写字母出现的最小次数
-
lcredit= N:当N>0时表示新密码中小写字母出现的最多次数;当N<0时表示新密码中小写字母出现的最小次数
-
ocredit=N:当N>0时表示新密码中特殊字符出现的最多次数;当N<0时表示新密码中特殊字符出现的最小次数
-
maxrepeat=N:拒绝包含多个N个相同连续字符的密码。默认值为0表示禁用此检查。
-
maxsequence=N:拒绝包含长于N的单调字符序列的密码。默认值为0表示禁用此检查;实例是'12345'或'fedcb'。除非序列只是密码的一小部分,否则大多数此类密码都不会通过吉纳丹检查
-
enforce_for_root:如果用户更改密码是root,则模块将会在失败检查时返回错误。默认情况下,此选项处于关闭状态,只打印失败检查的消息。但root仍可以更改密码。
2.密码策略设置
# Linux系统中设置密码策略是安全领域中十分重要的环节。密码策略的设定包括三种方法:第一种方法修改/etc/shadow文件配置策略;第二种方法是使用chage配置策略;第三种方法是修改/etc/login.defs配置文件。
Ⅰ.修改/etc/shadow文件配置策略
bash
例如:设置用户的密码策略为:密码最长有效期为90天;密码修改之间最小天数为10天,口令生效前5天开始通知用户修改密码,密码过期后宽限时间为7天。
#修改前:
[root@localhost ~]# cat /etc/shadow | grep hehao
hehao:$6$xI81rvuf$2cef2BCsnHXaN.RINKlFYmVjcq8yXEd9u8jEpsRhid8t/7mprbui2gjusl9I3n.ToBc8ymhaG4xpb7HuRruts1:19130:0:99999:7:::
#修改
[root@localhost ~]# vim /etc/shadow
#修改后
[root@localhost ~]# cat /etc/shadow | grep hehao
hehao:$6$xI81rvuf$2cef2BCsnHXaN.RINKlFYmVjcq8yXEd9u8jEpsRhid8t/7mprbui2gjusl9I3n.ToBc8ymhaG4xpb7HuRruts1:19130:10:90:5:7::
[root@localhost ~]#
Ⅱ.使用chage命令策略配置
使用chage命令可以显示更加详细的用户密码信息,还可以修改密码策略
#基本语法:chage [选项] 用户名
选项
# -l:列出用户的详细密码状态
# -d 日期 :修改/etc/shadow文件中指定用户密码信息的第三个字段,即最后一次修改密码的日期,格式为YYYY-MM-DD。
# -m 天数:修改密码最短保留天数,即/etc/shadows文件中的第四个字段
# -M 天数:修改密码的有效期,即/etc/shadow文件中的第五个字段
# -W 天数:修改密码到期前的警告天数,即/etc/shadow文件中的第六个字段
# -I 天数:修改密码到期前后的宽限天数,即/etc/shadow文件中的第七个字段
# -E 日期:修改账号的失效日期,格式为YYYY-MM-DD,即/etc/shadow文件中的第八个字段
bash
举例:
#查看用户hehao的密码状态
[root@localhost ~]# chage -l hehao
最近一次密码修改时间 :5月 18, 2022 -d
密码过期时间 :8月 16, 2022
密码失效时间 :8月 23, 2022
帐户过期时间 :从不 -E
两次改变密码之间相距的最小天数 :10
两次改变密码之间相距的最大天数 :90 -
在密码过期之前警告的天数 :5 -W
[root@localhost ~]#
#设置密码过期时间为2022年5月20号
[root@localhost ~]# chage -E 2022-05-21 hehao
举例:设置hehao用户密码策略为:密码最长有效期为90天,口令生效前5天开始通知用户修改密码,密码过期后宽限天数为7天且用户首次登录需要重设密码。
[root@localhost ~]# chage -d 0 -M 90 -W 5 -I 7 hehao
[root@localhost ~]# cat /etc/shadow | grep hehao
hehao:$6$xI81rvuf$2cef2BCsnHXaN.RINKlFYmVjcq8yXEd9u8jEpsRhid8t/7mprbui2gjusl9I3n.ToBc8ymhaG4xpb7HuRruts1:0:0:90:5:7::
[root@localhost ~]#su hehao
password:
you are required to chage your password immendiately (root enforced)
Changing password for hehao:
(current) UNIX password:
Ⅲ.修改/etc/login.defs配置文件
bash
# /etc/login.defs文件用于在创建用户时对用户的一些基本属性进行默认设置,如指定用户UID和GID的范围,用户的过期时间,密码的最大长度等。
# 需要注意的是,该文件的用户默认设置对root用户无效,并且当此文件中的配置与/etc/passwd和/etc/shadow文件中的用户信息有冲突时,系统会以/etc/passwd和/etc/shadow文件为准。
#login.defs配置文件参数:
#MAIL_DIR /var/spool/mail
-->创建用户时,系统会在目录/var/spool/mail中创建一个用户邮箱,如lamp用户的邮箱是/var/spool/mail/lamp
#PASS_MAX_DAYS 99999
-->密码的有效期,99999是自1970年1月1日的起始密码有效天数,相当于237年,可以理解为永久
#PASS_MIN_DAYS 0
-->表示自上次修改密码以来,最少隔多少天后用户才能修改密码,默认值为0
#PASS_MIN_LEN 5
-->指的是密码的最小长度,默认不小于5位,但是现在用户登录时验证已经被PAM模块取代,所以这个选型并不生效
#PASS_WARN_AGE 7
-->指定在密码到期前多少天,系统就开始通知用户密码即将到期,默认7天
#UID_MIN 1000
-->指定用户的最小UID为1000
#UID_MAX 60000
-->指定用户的最大UID为1000
#GID_MIN 1000
-->指定用户组的最小GID为1000
#GID_MAX 60000
-->指定用户组的最大GID为1000
#SYS_GID_MIN 201
-->指定系统用户组的最小GID为201
#SYS_GID_MAX 999
-->指定系统用户组的最大GID为999
#CREATE_HOME yes
-->指定在创建用户时,是否同时创建用户主目录,yes表示创建
#UMASK 077
-->用户主目录的权限默认设置为077
#USERGROUPS_ENAB yes
-->指定删除用户的时候是否同时删除用户组,这里指的时删除用户的初始组,此项的默认项为yes
#ENCRYPT_METHOD SHA512
-->指定用户密码采用的加密规则,默认采用SHA512,这是新的密码加密模式,原来的linux只能使用DES或MD5加密
3.用户远程登录次数限制
# 有一些攻击性软件试专门采用暴力破解密码形式反复进行登录尝试(如Hydra).对于这种情况,可以调整用户登录次数限制,使其密码输入3次后自动锁定,并且设置锁定时间,在锁定时间内即使密码输入正确也无法登录。
# 打开/etc/pam.d/sshd文件,在#%PAM-1.0的下面,加入下面的内容,表示当密码输入错误达到3次,就锁定用户150秒;如果root用户输入密码错误达到3次,锁定300秒。这里锁定的意思是即使密码正确也无法登录。
bash
[root@localhost ~]# vim /etc/pam.d/sshd
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time=300
其中,deny表示限制错误尝试次数;unlock_time表示普通用户锁定时间;even_deny_root表示开启root用户锁定;root_unlock_time表示root用户锁定时间
[root@localhost ~]# ssh ah1@192.168.80.132
ah1@192.168.80.132's password: #输错密码第一次
Permission denied, please try again.
ah1@192.168.80.132's password: #输入密码第二次
Permission denied, please try again.
ah1@192.168.80.132's password: #输入密码第三次
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@localhost ~]# ssh ah1@192.168.80.132
ah1@192.168.80.132's password:
Permission denied, please try again.
#重新登录,输入正确也无法登录
4.禁止用户随意切换至root
# 在linux中,有一个默认的管理组wheel。在实际生产环境中,即使有系统管理员root的权限,也不推荐使用root用户登录。一般情况下用普通用户邓丽就可以了,在需要root权限执行一些操作时,在使用su命令登录root用户。但是,如果有人知道了root密码,就可以通过su命令登录称为root用户,这无疑为系统带来了安全隐患。
#为了预防此类安全事件,可以限制只有wheel组的用户才可以使用su命令切换为root.将普通用户加入到wheel组,被加入的这个普通用户就成了管理员组内的用户、然后设置只有wheel组内的成员可以使用su命令切换到root用户,从而实现禁止用户随意切换至root的功能。
bash
#配置方法需要修改/etc/pam.d/su文件,该文件用户控制su命令运行中的程序控制。在第一行加人auth required pam wheel.so group=wheel即可
[root@localhost ~]# vim /etc/pam.d/su
#%PAM-1.0
auth required pam_wheel.so group=wheel
auth sufficient pam_rootok.so
[root@localhost ~]# su ah1
[ah1@localhost root]$ vim /etc/pam.d/su
[ah1@localhost root]$ su
密码:
su: 拒绝权限
[root@localhost ~]# usermod -G wheel ah1
[ah1@localhost root]$ su
密码:
[root@localhost ~]#