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 ][-u ][用户帐号]
#选项:
-c<备注>       修改用户帐号的备注文字。
-d登入目录>     修改用户登入时的目录。
-e<有效期限>    修改帐号的有效期限。
-f<缓冲天数>    修改在密码过期后多少天即关闭该帐号。
-g<群组>       修改用户所属的群组。
-G<群组>       修改用户所属的附加群组。
-l<帐号名称>    修改用户帐号名称。
-L            锁定用户密码,使密码无效。
-s     修改用户登入后所使用的shell。
-u       修改用户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= :最小密码长度

  • --passminclass=:最小字符类型数

  • --passmaxrepeat=:每个字符重复的最大数

  • --passmaxclassrepeate=:密码中同一类的最大连续字符数

  • --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 [email protected]
[email protected]'s password: #输错密码第一次
Permission denied, please try again.
[email protected]'s password:  #输入密码第二次
Permission denied, please try again.
[email protected]'s password:  #输入密码第三次
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@localhost ~]# ssh [email protected]
[email protected]'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,安全,运维)