Linux账户安全
一.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).这个文件的每一行保存一个用户的资料,而用户资料的每一个数据项采用冒号":"分割,如下所示:
[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进行检查,如果该文件的权限和属主发生了异常情况(如误操作或入侵事件),需要引起注意。
[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,从而最大限度地减少了密文泄露的机会
[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被映射到该用户分组的名称以及统一分组的其他成员中去。
[root@localhost ~]# cat /etc/group
组名:用户组口令:组标识号:组内用户列表
"组名":是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
"口令":字段存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。
"组标识号":与用户标识号类似,也是一个整数,被系统内部用来标识组。
"组内用户列表":是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
4.组账号文件gshadow
# 如同用户账号文件的作用一样,组行号文件也是为了加强组口令的安全性,防止黑客对其施行暴力攻击,而采用的一种将组口令与与组的其他信息相分享的安全机制。其格式包括用户组名,加密的组口令和组成员列表。
[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
-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。
[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用户
[root@localhost ~]# adduser zaoan
Ⅲ.修改/etc/passwd配置文件
[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
例子:创建一个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配置文件
[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.给用户或组设置口令
Ⅰ.给用户设置口令
第一种:passwd 用户名
[root@localhost ~]# passwd zaoan
更改用户 zaoan 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]#
第二种:使用echo 密码 | passwd --stdin 用户
[root@localhost ~]# echo centos | passwd --stdin zaoan
更改用户 zaoan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]#
Ⅱ.给组设置口令
语法格式: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 解除密码锁定。
例子:使用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
例子:将组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:更新设置到配置文件中
例如:需要设定用户的密码必须不小于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
[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文件配置策略
例如:设置用户的密码策略为:密码最长有效期为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文件中的第八个字段
举例:
#查看用户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配置文件
# /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秒。这里锁定的意思是即使密码正确也无法登录。
[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的功能。
#配置方法需要修改/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 ~]#
相关文章:
Linux账户安全
一.Linux账户与组的基本概念 在Limux操作系统中,每一个文件和程序都归属于一个特定的 “用户”。每个用户都由一个唯一的身份来标识,这个标识称为用户ID (UserID, UID )。系统中的每一个用户也至少需要属于一个“用户分组”,即由系统管理员所…...
深度生成模型之GAN优化目标设计与改进 ->(个人学习记录笔记)
文章目录 深度生成模型之GAN优化目标设计与改进原始GAN优化目标的问题1. JS散度度量问题2. 梯度问题 优化目标的设计与改进1. 最小二乘损失GAN2. Energy-based GAN(EBGAN)3. Wasserstein GAN4. WGAN-GP5. Boundary Equilibrium GAN(BEGAN)6. Loss Sensitive GAN7. Relativeisti…...
程序员如何高效学习技术?
我们相信努力学习一定会有收获,但是方法不当,既让人身心疲惫,也没有切实的回报。 不少朋友每天都阅读技术文章,但是第二天就忘干净了。工作中领导和同事都认可你的沟通和技术能力,但是跳槽面试却屡屡碰壁。面试官问技术…...
一个无经验的大学毕业生,可以转行做软件测试吗?我的真实案例
在转行之前,我一直在思考,当代年轻人的真实生活情况究竟是什么样的。 朝九晚六,无休止的加班,每天往返于公司与家,没有一点点自己的生活,只能从心里面麻痹自己,以求得最后的慰籍。 这就是我之…...
三.Linux无名管道(PIPE)和有名管道(FIFO)的区别
目录 命名管道(Named Pipe): 无名管道(Anonymous Pipe): 总结: 无名管道(Anonymous Pipe)和命名管道(Named Pipe)都是进程间通信的机制&#x…...
英文字母替换加密(后移n位)
思路:首先写出后移(前移)1位的情况 , 然后逐渐累加至N位情况 #include <stdio.h> void test(char arr[] , int n ) { int i 0; int z 0; if( n < 0 ) { while( i ! n ) { …...
HAproxy群集
HAproxy群集 常见的集群调度器HAproxy 、nginx、LVS区别HAproxynginxlvs HAproxy介绍HAproxy特点HAproxy常见的负载均衡策略HAproxy会话保持HAproxy配置实例 常见的集群调度器 常见的web集群调度器分为软件和硬件 软件:LVS Haproxy nginx 硬件: F5 Ar…...
LeetCode2469. Convert the Temperature
文章目录 一、题目二、题解 一、题目 You are given a non-negative floating point number rounded to two decimal places celsius, that denotes the temperature in Celsius. You should convert Celsius into Kelvin and Fahrenheit and return it as an array ans [ke…...
【ROS2】MOMO的鱼香ROS2(五)ROS2入门篇——ROS2接口与自定义
ROS2接口与自定义 引言1 ROS2自带接口1.1 ROS2通用标准消息包1.2 ROS2传感器消息包1.3 ROS2几何相关消息包 2 ROS2接口介绍2.1 常用CLI命令2.2 原始数据类型与包装类型 3 自定义接口示例3.1 接口定义3.2 自定义接口RCLPY 引言 笔者跟着鱼香ROS的ROS2学习之旅 学习参考…...
python c语言 代码动态检查,python c语言语法分析
大家好,小编来为大家解答以下问题,python c语言 代码动态检查,python c语言语法分析,今天让我们一起来看看吧! Source code download: 本文相关源码 初学编程,应该学习哪一门编程语言,有不少人感…...
C++ DAY6 作业
1.用模板类写顺序表 #include <iostream>using namespace std;#define MAXSIZE 10 template <typename T> class Arr {T *data NULL;int len 0; public://构造函数Arr():data(new T){}Arr(T a,int len):data(new T(a)),len(len){}//析构函数~Arr(){delete data;}…...
华为服务器安装银河麒麟V10操作系统(IBMC安装)
iBMC是华为面向服务器全生命周期的服务器嵌入式管理系统。提供硬件状态监控、部署、节能、安全等系列管理工具,标准化接口构建服务器管理更加完善的生态系统。 服务器BMC IP:192.168.2.100 一、准备工作 1、确保本机和服务器BMC管理口在同一网络 2、银…...
macos下php 5.6 7.0 7.4 8.0 8.3 8.4全版本PHP开发环境安装方法
在macos中如果使用brew 官方默认的core tap 只可以安装官方最新的稳定版PHP, 如果想要安装 php 5.6 或者 php 8.4版本的PHP就需要使用第三方的tap , 这里分享一个比较全面的brew tap shivammathur/php 这个tap里面包含了从php5.6到最新版php8.4的所有可用最新版本PHP, 而且是同…...
Chatgpt为什么像打字机逐字输出?磨洋工,防止数据库被盗
在他后台的数据库里肯定是完整的结果,每次只给你一个单词一个单词的输送,一方面是为了耍酷,好像真的是一个人在那给你说话,另一方面也是防止第三方的抄袭者最快速度盗取采集偷走数据库。防止他们的服务器崩溃,可以多收几个月会员费。 都说搞…...
ubuntu 卸载桌面
要卸载Ubuntu上的桌面环境,您可以按照以下步骤进行操作: 登录到您的Ubuntu系统,并打开终端。 确认您当前正在使用的桌面环境。可以运行以下命令来查看已安装的桌面环境: s /usr/share/xsessions/ 根据您当前使用的桌面环境&…...
Linux文件fd剖析
学习之前,首先要认识什么是文件? 空文件也是要在内存中占据空间的,因为它还有属性数据。文件 属性 内容文件操作 对内容 对属性 或者对内容和属性的操作标定一个文件的时候,必须使用:路径文件名,文件具…...
VMWARE ESXi存储多路径策略修改
一、存储多路径介绍 VMware 路径选择插件 (PSP) 负责选择 I/O 请求的物理路径。插件是 VMware NMP 的子模块。NMP 根据设备类型为每个逻辑设备分配默认 PSP。每个PSP 启用并执行相应的路径选择策略。支持的路径选项有以下3种: VMW_PSP_MRU - 最近使用 它将选择在系…...
结构体详解
结构体: 一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构 结构体可以用来封装一些属性来组成新的类型。 结构体的大小: 结构体的大小不是结构体元素单纯相加。内存对齐(若计算机使用32位字长的cpu,对32位的…...
前端开发个人简历范本(2024最新版-附模板)
前端开发工程师个人简历范本> 年龄 25岁 性别 男 毕业院校 XX大学 张三 学历 邮箱 leeywai-tools.cn 本科 专业 计算机科学与技术 个人梗概 拥有扎实的前端开发技能和丰富的实践经验 善于与团队合作,适应能力强,能够快速融入团队并贡献自…...
# 编程语言简史
编程语言简史 文章目录 编程语言简史1. python简史1. python发展历程 2. python适用领域1. 优点:2. 缺点:3. 应用领域: 2. java简史1. java发展历程2. java适用领域 3. C简史1. C发展历程2. C使用领域 4. C简史1. C发展历程2. C适用领域 5. C…...
SpringMVC学习与开发(三)
注:此为笔者学习狂神说SpringMVC的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!! 10、ssm整合 问了一下ChatGPT SSM 是一个基于 Java 的开发框架整合,由 Spring、…...
JAVA对象、List、Map和JSON之间的相互转换
JAVA对象、List、Map和JSON之间的相互转换 1.Java中对象和json互转2.Java中list和json互转3.Java中map和json互转 1.Java中对象和json互转 Object obj new Object(); String objJson JSONObject.toJSONString(obj);//java对象转json Object newObj JSONObject.parseObject(…...
图像分割-漫水填充法 floodFill
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的C#版本请访问:图像分割-漫水填充法 floodFill (C#)-CSDN博客 FloodFill方法是一种图像处理算法&#…...
Python open函数详解:打开指定文件与 readline和readlines函数:按行读取文件
Python open函数详解:打开指定文件 掌握了各种操作目录字符串或目录的函数之后,接下来可以准备读写文件了。在进行文件读写之前,首先要打开文件。 Python 提供了一个内置的 open() 函数,该函数用于打开指定文件。 open() 函数的…...
Vue 生命周期有哪些?作用是什么?
什么是vue的生命周期 Vue 实例从开始创建、初始化数据、编译模板、挂载Dom和渲染、更新和渲染、卸载等一系列过程,这是 Vue 的生命周期 vue的生命周期的八个钩子函数 beforeCreat() 创建前 在new一个vue实例后,只有一些默认的生命周期钩子和默认事件&a…...
《Vue3 前端构建工具》 Vue-cli 与 Vite 创建项目的插件和配置对比
前言 2024 年 啦!Vue2 也于 2023.12.31 寿终正寝 ! 然而我的 Vue3 升级一再拖延(惭愧不已)~ 赶起来吧~ 今天用 vue-cli 和 vite 分别创建了 Vue3 项目,具体实现步骤见如下两篇。 《基于 Vue Cli4.x Vue3 TS styl…...
springboot(ssm中山社区医疗综合服务平台 医疗管理系统 Java系统
springboot(ssm中山社区医疗综合服务平台 医疗管理系统 Java系统 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0&#x…...
Qt编写的exe程序上添加程序信息
1、qtcreator编写 在pro文件中添加如下信息 # 版本信息 VERSION 4.0.2.666# 图标 RC_ICONS Images/MyApp.ico# 公司名称 QMAKE_TARGET_COMPANY "Digia"# 产品名称 QMAKE_TARGET_PRODUCT "Qt Creator"# 文件说明 QMAKE_TARGET_DESCRIPTION "Qt …...
(一)CarPlay集成开发之概述与环境篇
系列文章目录 第一章 CarPlay集成开发之概述与环境篇 文章目录 系列文章目录概述开发环境依赖项总结 概述 CarPlay是由苹果公司开发的一款集成在iOS系统中,用于运行在已完成对接该系统的汽车中控台,仪表盘上的车载系统,该系统通过USB或者WI…...
js文件上传 分片上传/断点续传/极速秒传
(极速秒传)利用md5判断上传的文件是否存在 MD5信息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。 每一个文件都会生成…...
有没有专门做av字幕的网站/北京网络营销咨询公司
本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等 本篇介绍与内核对象同步相关的Event对象和Mutex对象 AutoResetEvent和ManualResetEvent 同步事件有两种:AutoResetEvent和 ManualResetEvent。主要用户线程之间…...
做宣传网站/最佳bt磁力狗
1.在我们写APP的时候经常会遇到这种情况,点击一个按钮后,通过网络异步操作从后台获取信息,然后再展示到UI,例如 public class MyActivity extends BaseActivity {private void getUser(){LoadingDialog loadingDialognew LoadingD…...
电子商务网站设计的基本要求/上海百度推广公司
WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript.shell是服务器系统会用到的一种组件。shell 就是“壳”的意思,这个对象可以执行操作系统外壳常用…...
绵阳网站建设设计/成都网站设计
试验网站#1搜索引擎优化收录情况记录(断续运行)日期Yahoogooglebaidusogou每日收录每日收录增量每日收录每日收录增量每日收录每日收录增量每日收录每日收录增量2007-6-24288 333 1060 4813 2007-6-25164013523330108020481302007-6-26空间超过6月流量限制……,…...
长沙网约车/沧州seo包年优化软件排名
自VMware View 4.5发布以后,无论是代理商还是客户在做完对比测试以后,几乎无一例外地告诉我“View在局域网里比XenDesktop做得更好!”。但言外之意却是“Citrix在广域网里比你们强!”而最经常…...
公司网站制作流程/提高百度搜索排名工具
修饰器:修饰器是一种特殊类型的声明,它只能够被附加到类的声明、方法、属性或参数上,可以修改类的行为。而不能用于函数(因为存在函数提升) 常见的修饰器有:类修饰器、属性修饰器、方法修饰器、参数修饰器 …...