CentOS 安全配置

  • 忘记 root 密码
  • 禁止进入单用户模式
  • 减少开放终端个数
  • 设置登录用户无操作超时自动退出
  • 只允许 root登录, 禁止其他用户登录
  • 只有wheel组的用户能切换至root用户
  • 修改 账户 密码
  • 系统账号管理
  • 禁止 root 直接登录
  • 设置 允许或禁止 登录的用户
  • 修改系统 SSH 登录端口
  • 设置同一个用户同时只能一个人登录
  • 用户锁定
  • 密码复杂度
  • 命令设置密码有效期
  • 密码定期修改
  • 重设密码5次不能重复
  • 登录错误不能超过5次, 超过5次锁定20分钟

忘记 root 密码


// 方法一:GRUB引导方式   没有设置 grub 密码情况下直接进入, 设置的话, 输入密码进入;
    1. 重启服务器,开机进入启动界面后,按“e”或者回车键,进入GRUB启动菜单;
    2. 按“e”进入编辑模式,上下键选择第2行;
    3. 按“e”进入kernel编辑命令行,按“空格”再输入single或“s”或“1”,回车保存后,再按“b”启动系统;
    4. 启动系统后不需要输入管理员密码,进入单用户模式,可直接输入passwd命令修改管理员密码;

// 方法二:lilo引导方式
    1. 重启服务器,出现LILO提示时,键盘输入 linux single;
    2. 回车进入单用户模式;
    3. 修改/etc/passwd文件清空root密码 或者 passwd直接更改密码;

// 方法三: 使用Linux启动软盘引导
    1. 出现boot后,输入linux single 回车;
    2. 进入单用户模式;
    3. 修改root密码;

 

 

禁止进入单用户模式


 禁止直接进入单用户模式, 对 GRUB 设置密码; 修改/boot/grub/grub.conf 或者 /etc/grub.conf ( 是/boot/grub/grub.conf 链接文件);

明文方式

vim /boot/grub/grub.conf        # 或者 /etc/grub.conf;
    ... ...
    splashimage=(hd0,0)/grub/splash.xpm.gz
    password=123456             # 添加此行明文密码;
    hiddenmenu
    ... ...
# 再次启动登录到 GRUB 菜单页面时就会发现不能直接使用 "e" 命令编辑启动标签, 必须先使用 "p" 命令输入正确的密码后才能启动标签进行编辑;明文密码不是很安全;

 

MD5加密方式

# 首先生成md5加密密码, 输入两次密码后, 生成 md5 加密密码;
grub-md5-crypt
Password:
Retype password:
$1$aGKme/$OgQ743fikLz1vjrM4/XDG.

vim /boot/grub/grub.conf                             # 或者 /etc/grub.conf;
    ... ...
    splashimage=(hd0,0)/grub/splash.xpm.gz
    password=$1$aGKme/$OgQ743fikLz1vjrM4/XDG.        # 添加此行明文密码;
    hiddenmenu
    ... ...
# 再次启动登录到 GRUB 菜单页面时就会发现不能直接使用 "e" 命令编辑启动标签, 必须先使用 "p" 命令输入正确的密码后才能启动标签进行编辑;相对比较安全;

 

减少开放终端个数


 

// 编辑 /etc/init/start-ttus.conf 及 /etc/sysconfig/init 配置文件
// 设置所有用户仅可以从 tty1 , tty2 , tty3 三个终端登录
vim /etc/init/start-ttys.conf 
    ... ...
    env ACTIVE_CONSOLES=/dev/tty[1-3]
    ... ...
    
vim /etc/sysconfig/init 
    ... ...
    # What ttys should gettys be started on?
    ACTIVE_CONSOLES=/dev/tty[1-3]
    ... ...
    
// 重启后, 仅能从 tty1 , tty2 , tty3 登录

 

设置登录用户无操作超时自动退出


 

// 针对指定用户设置, 首先进入用户的家目录, 修改 .bash_profile 文件, 300秒;
cd /home/tian
ls -a
    .  ..  .bash_history  .bash_logout  .bash_profile  .bashrc
vim .bash_profile
    ... ...
    export TMOUT=300
    
// 修改 /etc/profile 文件, 全局所有用户生效;
vim /etc/profile
    ... ...
    export TMOUT=300
source /etc/profile                // 声明生效, 或者退出终端重新登录生效;

 

只允许 root登录, 禁止其他用户登录


 

// 使用场景: 系统需要升级等, 只允许 root 用户操作, 暂时进制其他用户登录,
// 操作步骤: 使用 root 用户在 /etc/ 目录下创建 nologin 文件即可;
vim /etc/nologin        // 可为空, 也可以写入登录不上回显提示的内容;
    Sorry, the system is under health examination, please try again in an hour ... ...
    
// 使用用户 tian 登录测试
    Connecting to 192.168.9.27:22...
    Connection established.
    To escape to local shell, press 'Ctrl+Alt+]'.

    Sorry, the system is under health examination, please try again in an hour ... ...

 

 

只有wheel组的用户能切换至root用户


 

简介:

  在 Linux 中, wheel 组类似与一个管理员的组;

  通常在Linux下, 及时我们有系统管理员root的权限, 也不推荐用root用户; 一般情况下用普通用户就可以了; 在需要 root 权限执行一些操作时, 再使用 su 切换成为 root 用户; 但是任何用户只要知道了 root 的密码就可以通过su 登录root用户, 这无疑是一个安全隐患; 所以, 将普通用户加入到 wheel 组, 被加入的这个普通用户就成了管理员组内的用户, 但如果针对一些配置文件, 这个管理员组内成员与普通用户没有什么区别;

  根据应用实例不同, 应用wheel组的方法也不同, 对于服务器来说, 我们希望的是剥夺被加入到 wheel 组用户以外的普通用户通过su命令登录 root 的权利,(只有属于 wheel 组的用户才可以使用 su 登录 root) 这样就加强了系统的安全性;

// 配置 /etc/pam.d/su 配置文件, 开启 wheel 组;
vim /etc/pam.d/su
    ... ...
    auth           required        pam_wheel.so use_uid
    ... ...
// 修改/etc/login.defs 配置文件, 最后添加 只允许 wheel 组成员切换 root;
vim /etc/login.defs
    ... ...
    SU_WHEEL_ONLY yes
    
// 创建用户时添加 wheel 组
useradd -G wheel tian
// 或者给已存在用户添加wheel组
usermod -G wheel tian
// 查看用户的属组
groups tian
    tian : tian wheel

 

修改 账户 密码


 

// 一 : passwd 直接修改
passwd tian
Changing password for user tian.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

// 二 : 重定向
echo "666666" | passwd --stdin tian

 

 

系统账号管理


 

// 设置非登录用户的 shell 设置为 /sbin/nologin
// 方法一
usermod -s /sbin/nologin tian
// 方法二
chsh -s /sbin/nologin tian
// 方法三
chsh tian
    Changing shell for tian.
    New shell [/bin/bash]: /sbin/nologin    
    Shell changed.
// 方法四 -- 直接在 /etc/passwd 文件中进行修改
// 查看
grep tian /etc/passwd
    tian:x:502:502::/home/tian:/sbin/nologin
    
// 锁定长期不使用的账号
// 方法一, 密文前增加 2 个 "!" ; 使用 passwd -u 进行解锁
passwd -l
// 方法二, 密文前增加 1 个 "!" ; 使用 passwd -U 进行解锁; 两次执行可解上面的锁定
usermod -L
// 查看
passwd -S tian
    tian LK 2019-03-20 0 60 7 -1 (Password locked.)        // 已锁定;

 

 

禁止 root 直接登录


 

// 修改ssh配置文件,开启 RermitRootLogin, 并改为 no;
vim /etc/ssh/sshd_config
    #LoginGraceTime 2m
    PermitRootLogin no
    #StrictModes yes
    #MaxAuthTries 6
    #MaxSessions 10
// 重启 sshd 服务
/etc/init.d/sshd restart

 

 

设置 允许或禁止 登录的用户


 

// 同样修改 ssh 配置文件, 添加 AllowUsers 或者 DenyUsers , 表示 允许登录 或者 拒绝登录;tian hao zeng rong 四个用户都在属于 wheel 组; 
vim /etc/ssh/sshd_config
    #LoginGraceTime 2m                #LoginGraceTime 2m
    PermitRootLogin no                PermitRootLogin no
    AllowUsers zeng rong            DenyUsers tian hao
    #StrictModes yes                #StrictModes yes
    #MaxAuthTries 6                    #MaxAuthTries 6
    #MaxSessions 10                    #MaxSessions 10
// 上面配置文件中左右的配置效果一样;

 

// 修改sshd配置文件;
vim /etc/ssh/sshd_config
    AllowUsers root@192.168.10.108        // 添加此行,允许root用户只能在192.168.10.108登录;
    AllowUsers root@192.168.10.108 admin   // 一行指定多个用户,用空格隔开,允许root用户只能在192.168.10.108登录,允许admin在任何地方登录;
// 以上两行不同时存在,介绍规则,以此类推;
// 重启sshd服务后生效;
[root@localhost ~]# /etc/init.d/sshd restart

// 还可以使用 pam 规则控制, 修改 /etc/pam.d/sshd 文件, 第一行添加一下内容, 允许/拒绝登录
vim /etc/pam.d/sshd
    auth required pam_listfile.so item=user sense=allow file=/etc/sshusers onerr=fail
    // 或者
    auth required pam_listfile.so item=user sense=deny file=/etc/sshusers onerr=succeed
    
// 在/etc/ 目录下建立 sshusers 文件, 添加用户名, 一行为一个用户;
    // 上面配置文件中若是 allow , 文件中的用户是可以登录的;
    // 上面配置文件中若是 deny, 文件中的用户是不可以登录的;
vim /etc/sshusers
    tian
    zong

 

 

修改系统 SSH 登录端口


 

vim /etc/ssh/sshd_config        // 修改ssh配置文件
    13 #Port 22                 // 默认为22端口,可去掉注释直接修改,也可以如下行;
    14 Port 52353               // 修改为想要设置的端口号
  // 端口的取值范围是 0--65535; 1024以下是系统使用的端口, 我们可使用的端口是1024--65535;
  
// 没有关闭防火墙的情况下,修改端口后,一定要修改防火墙规则;否则重启了sshd服务后,远程连接不上;
// 添加防火墙规则,进入服务器,端口52353;
iptables -A INPUT -p tcp --dport 52353 -j ACCEPT  
// 添加防火墙规则,出服务器,端口52353;      
iptables -A OUTPUT -p tcp --sport 52353 -j ACCEPT 
// 保存添加的防火墙规则;       
/etc/init.d/iptables save
// 重启防火墙,添加配置生效;
/etc/init.d/iptables restart

// 重启sshd服务,修改ssh登录端口生效;
/etc/init.d/sshd restart    

 

 

设置同一个用户同时只能一个人登录


 

// 只能针对与非 root 用户
vim /etc/security/limits.conf
... ...
 50 tian             hard    maxlogins       1
 // 用户名                              最大同时连接数
 ... ...

 

 

用户锁定


 

// 使用 root 用户登录后执行解锁命令
// 查看锁定用户信息
pam_tally2 -u tian
    Login           Failures Latest failure     From
    tian                0    
//    用户              失败的次数

// 解锁
pam_tally2 -u tian --reset

 

 

密码复杂度


 

// 密码必须符合复杂度的要求: 字母, 数字, 特殊符号组成, 且长度大于8位
vim /etc/pam.d/system-auth
    # password    requisite   pam_cracklib.so try_first_pass retry=3 type=
    password    requisite     pam_cracklib.so retry=3 difok=3 minlen=8 lcredit=-1 dcredit=-1 ocredit=-1
    
// 参数
    * try_first_pass: 表明该模块首先应当使用前一个模块从用户那里得到的密码,如果该密码不通过,再提示用户输入新的密码;
    * debug:将调试信息写入日志;
    * type=xxx:当天价/修改密码时, 系统给出的缺省提示符是"New UNIX password:"以及"Retype UNIX password:", 而使用该参数可以自定义输入密码的提示符,比如制定type=your own word;
    * retry=N:定义登录/修改密码失败时,可以重试的次数;
    * Difok=N:定义新密码中必须有几个字符要与旧密码不同.但是如果新密码中有1/2以上的字符与旧密码不同时,该新密码将被接受;
    * minlen=N: 定义用户密码的最小长度;
    * dcredit=-N: 定义用户密码中必须包含多少个数字;
    * ucredit=-N: 定义用户密码中必须包含多个大写字母;
    * lcredit=-N: 定义用户密码中必须包含多少个小写字母;
    * ocredit=-N: 定义用户密码中必须包含多少个特殊字符(除数字,字母之外);    

 

命令设置密码有效期( 已存在的用户 )


 

chage -M 天数 用户名            // 方法一
passwd -x 天数 用户名            // 方法二

// 操作
grep tian /etc/shadow
    tian:!!:17976:0:99999:7:::
chage -M 60 tian
grep tian /etc/shadow
    tian:!!:17976:0:60:7:::

 

 

密码定期修改


 

// 查看用户的定期修改的信息
chage -l tian
    Last password change                    : Mar 21, 2019
    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
    
// 配置用户密码定期修改
vim /etc/login.defs
    ... ...
    MAIL_DIR /var/spool/mail // 当你在创建用户的同时,再/var/spool/mail目录下创建mail文件;
    ... ...
    PASS_MAX_DAYS   90       // 用户密码不过期最多的天数;
    PASS_MIN_DAYS   0        // 密码修改之间的最小天数;
    PASS_MIN_LEN    8        // 密码最小长度;
    PASS_WARN_AGE   7        // 密码过期提前的警告天数;
    ... ...
    UID_MIN                   500   // 此处两行设置创建用户的最小uid和最大uid范围;
    UID_MAX                 60000
    ...    ...
    GID_MIN                   500   // 此处两行是设置GID;
    GID_MAX                 60000
    ... ...
    CREATE_HOME     yes     // 创建用户的时候是否创建家目录;
    UMASK       077         // 家目录的权限初始值;
    ... ...
    USERGROUPS_ENAB yes     // 当一个组只有一个用户存在的时候,删除用户的同时删除组;
    ENCRYPT_METHOD SHA512   // 指定password的机密方法;

// 要求用户下次登录时修改密码
chage -d 0 用户名

 

重设密码5次不能重复


 

// remember=5 表示 5 次
vim /etc/pam.d/system-auth
    password    sufficient    pam_unix.so sha512 shadow nullok     try_first_pass use_authtok remember=5

 

 

登录错误不能超过5次, 超过5次锁定20分钟


 

// 查看系统中是否含有pam_tally2.so模块
find / -type f -name "pam_tally2.so"

// 修改配置文件, 设置密码错误 5 次, 锁定 20 分钟; 第二行添加以下内容;
vim /etc/pam.d/sshd
    auth   required     pam_tally2.so deny=5 unlock_time=12000

 

posted @ 2019-03-21 15:49  荣荣很乖  阅读(2347)  评论(0编辑  收藏  举报