系统安全
1. 账号安全措施
- 将非登录用户的shell设置为/sbin/nologin(无法登陆)
- 锁定长期不使用的账号
- 删除无用的账号
- 锁定账号配置文件(/etc/passwd、/etc/shadow)
1.1.1 将非登录用户的shell设置为/sbin/nologin(无法登陆)
/sbin/nologin 所谓的“无法登陆”仅仅指这个用户无法通过bash或其他shell来登录系统而已,该用户还是可以使用系统资源的
1.1.4 锁定账号配置文件(/etc/passwd、/etc/shadow)
[root@localhost /]# lsattr /etc/passwd
---------------- /etc/passwd
[root@localhost /]# chattr +i /etc/passwd /etc/shadow # 锁定文件
[root@localhost /]# lsattr /etc/passwd /etc/shadow # 查看文件的状态
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost /]#
[root@localhost /]# rm -rf /etc/passwd # 删除文件
rm: 无法删除"/etc/passwd": 不允许的操作 # 可以看到无法进行删除操作
[root@localhost /]# useradd lisi -M
useradd:无法打开 /etc/passwd
[root@localhost /]# usermod wy -u 3000
usermod:无法打开 /etc/passwd
# 使用chattr命令锁定该文件后,只能对该文件进行“查看”,不能进行“增删改”
1.2 密码安全措施
- 新用户设置复杂的密码
- 设置密码有效期
- 要求用户下次登录时修改密码
1.2.1 新用户设置复杂的密码
新创建的用户设置复杂的密码,提高账号的安全性
1.2.2 设置密码有效期
修改指定用户的密码有效期
[root@localhost /]# chage -M 30 lisi # 修改李四密码有效期为30天
[root@localhost /]# cat /etc/shadow
lisi:$6$ftcN3XYY$jsbwN0NI67huO9VnIqGf.WNUI11zl/9Xp.eM3J6LyPpJYApHAvwIYfhS5DIVyUTYt8Ker/dYGU6PRoyDbYoOr0:0:0:30:7:::
1.2.3 要求用户下次登录时修改密码
chage命令
# 格式
chage [选项] 用户名
# 选项
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码
-M:密码保持有效的最大天数
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用
-d:上一次更改的日期
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期
让指定用户下次登录时,强制修改密码
[root@localhost /]# chage -d 0 lisi # 该命令强制用户下次登录修改密码,无法取消
# -d 0 强制修改密码
# 让李四下一次登录系统强制修改密码
1.3 历史命令安全措施
shell的历史命令机制给用户提供了极大的便利,同时这一机制也给用户带来了风险。只要获得了用户的历史命令文件,那么该用户的所有操作都会被知道。如果在历史命令中有着明文的密码或其他重要的信息,那可能对服务器造成隐患。
为了解决这个隐患,我们需要对历史命令的安全进行防护。bash的终端环境中,变量HISTSIZE记录着历史命令的最大条数(默认为1000),我们可以通过修改/etc/profile文件中HISTSIZE的值,来改变系统中能够显示历史命令的最大值,例如:HISTSIZE=200
防护历史命令安全的方法
- 清除历史命令(临时性)
- 改变历史命令HISTSIZE最大值
- 在登录或登出时,清空历史命令文件内容
- 闲置不操作一定时间后,自动注销当前用户(自动退出)
方法1:清除历史命令(临时性)
[root@localhost /]# history -c # 临时清除历史命令,重启系统后,还会重新显示
[root@localhost /]# history
1 history
[root@localhost /]#
方法2:改变历史命令HISTSIZE最大值
vim /etc/profile # 历史命令的HISTSIZE的文件位置
HISTSIZE=1000 # 默认值
HISTSIZE=100 # 修改后的值
方式3:在登录或登出时,清空历史命令文件内容
登录系统,清空历史命令
# ~/.bashrc文件输入清空历史命令文件内容的命令,使得登录系统时清空历史命令
vim ~/.bashrc # 登录运行的文件
echo " " > ~/.bash_history
echo "已清空历史命令文件内容,clear history file"
--------------------------------------------------------------
修改完配置文件,也可以使用"."或"source"刷新配置文件
刷新文件(重新运行文件)
.=source
[root@localhost ~]# . ~/.bashrc
已清空历史命令文件内容,clear history file
[root@localhost ~]#
--------------------------------------------------------------
# 重新登陆系统后,会清除历史命令
Last login: Tue Nov 7 18:35:35 2023 from 192.168.32.1
已清空历史命令文件内容,clear history file
[root@localhost ~]# history
1
2 history
[root@localhost ~]#
登出系统,清空历史命令
# ~/.bash_logout文件输入清空历史命令文件内容的命令,使得退出系统时清空历史命令
vim ~/.bash_logout # 登出(退出)运行的文件
echo " " > ~/.bash_history
echo "已清空历史命令文件内容,clear history file"
------------------------------------------------------------------------
修改完配置文件,也可以使用"."或"source"刷新配置文件
刷新文件(重新运行文件)
.=source
你已经10秒没有操作该系统,将自动注销
[root@localhost ~]# source ~/.bash_logout
已清空历史命令文件内容,clear history file
[root@localhost ~]#
-------------------------------------------------------------------------
# 按“exit”命令退出终端后,清除历史命令
[root@localhost ~]# exit
登出
已清空历史命令文件内容,clear history file
方法4:闲置不操作一定时间后,自动注销当前用户(自动退出)
在/etc/profile文件中配置“一定时间不操作系统,自动注销账户”
vim /etc/profile
-------------------------------------
# 20秒没有操作系统,系统将自动注销
export TMOUT=20
vim ~/.bash_logout
-------------------------------------
echo "自动注销"
# 刷新配置文件
. /etc/profile
. ~/.bash_logout
1.4 切换用户
su Substitute User,切换用户
su命令格式
su [-] 目标用户
密码验证
root ---> 任意用户,不验证密码
普通用户 ---> 其他用户,验证目标用户的密码
[root@localhost ~]# su lisi
[lisi@localhost root]$ su root
密码:
[root@localhost ~]#
切换用户方式
su lisi 不加“-”切换,不完全切换,lisi会集成root的一些信息
su - lisi 加“-”切换,完全切换,lisi和root没有一点关系,lisi是独立的
注意
使用su切换新用户后,可以使用“exit”退出至旧用户身份,而不要再用su切换回旧用户,否则会产生很多abash子进程,环境可能会混乱
有“-”切换用户身份会更彻底,如果不加“-”切换,只会切换一部分,这会导致某些命令出现问题或错误(例如:无法使用service命令)
1.5 PAM模块
作用:统一了标准
1.5.1 PAM相关文件
pam包的名字:pam
模块文件目录:/lib64/security/*.so
特定模块相关的pam配置文件:/etc/security/*(只有功能比较强大的模块才有特定的配置文件)
man 8 模块名 查看帮助
主配置文件:/etc/pam.d/*
shell解释器的配置文件路径:/etc/shells
插件式的模块
vim /etc/pam.d/su
-------------------------------------------------
#%PAM-1.0
# 模块类型 control控制位 模块名称 可选项(对模块名称的描述,可能有1、2、3项等,可有可无)
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth required pam_wheel.so use_uid
auth substack system-auth
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session include postlogin
session optional pam_xauth.so
没总结完,视频2小时处
1.5.2 PAM认证原理
口令模块(常见的功能)
用户名,密码
1.5.3 limit √
作用
在用户级别实现对用户可使用的资源的限制
修改限制的方式
ullimit
1)ulimit是linux shell的内置命令,用于对shell进程及其子进程进行资源限制
2)每个进程都有自己的limits值,使用ulimit进行修改,立即生效
3)ulimit只影响shell进程及其子进程,用户登出后失效
4)在/etc/profile中加入ulimit的设置,变相可以做到永久生效
-a 显示当前所有的资源限制.
-H 设置硬件资源限制.
-S 设置软件资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-u size:最大用户进程数
-v size:设置虚拟内存的最大值.单位:kbytes
unlimited 是一个特殊值,用于表示不限制
nginx调优,调整最大文件数量,实现ngixn的高并发
vim /etc/security/limits.conf
------------------------------------------------
* soft core unlimited
* hard core unlimited
* soft nproc 1000000
* hard nproc 1000000
* soft nofile 1000000
* hard nofile 1000000
* soft memlock 32000
* hard memlock 32000
* soft msgqueue 8192000
* hard msgqueue 8192000
reboot # 重启生效
[root@localhost ~]# ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7168
max locked memory (kbytes, -l) 32000
max memory size (kbytes, -m) unlimited
open files (-n) 1000000
# open files 变成了100 0000,实现了nginx的高并发
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 8192000
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1000000
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[root@localhost ~]#
nginx调优后,模拟nginx高并发
192.168.32.11(相当于服务器)
---------------------------------------------
1. 开启nginx服务
2. 设置open files的大小(/etc/security/limits.conf)
192.168.32.12(相当于客户机)
[root@localhost ~]# yum install -y httpd-tools.x86_64
# ab这个命令在httpd-tools.x86_64 里面
ab -c 1025 -n 10000 http://192.168.32.11/bigfile
-c 一次发出的请求数
-n 要执行的请求数
这是内核调优
一阶段最喜欢用的
安全架构
系统调优
3. 面试题:nginx调优
nginx要调优
系统也要调优
面试题:给你100台裸机,你该怎么做?
① 做raid备份
② 装系统
③ 系统调优
④ 装软件
1.6 sudo
super user do
sudo特性
- sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
- sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
- sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
- sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440
缺点
可以切换超级管理员,会拥有最高权限
sudo格式
sudo的配置文件(可以有两种方式打开,如下)
-------------------------------------------------
vim /etc/sudoers
或者
visudo # 官方推荐使用这个,因为有语法检测功能
visudo -c # 解析/etc/sudoers这个文件格式是否正确
user host=(runas) command
用户 登录的主机=代表的用户身份 命令、文件夹
user ALL=(ALL) ALL
------------------------------------------------------------
user 运行命令者的身份
host 通过哪些主机登录,可以是IP地址(多个)、域名;不写,默认是all
runas 哪个用户的身份登录,不写,默认是超级管理员
command 该用户可以使用哪些命令或文件夹
user和runas
username(用户名)
uid
group_name(组名)
gid
host
ip地址或主机名(域名)
可以写多个
command
command name 命令名字
directory 命令的文件夹
folder 文件夹
sudoedit 可以编辑sudoers这个文件,变相的你就变成了管理员
command_Alias 命令的别名
command中可以使用通配符
* 任意字符,任意长度
! 不,取反,不使用这个命令
? 单个任意字符
sudo用法
使用sudo给普通用户赋权
[lisi@localhost ~]$ sudo mount /dev/sr0 /mnt
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] lisi 的密码:
lisi 不在 sudoers 文件中。此事将被报告。
vim /etc/sudoers
--------------------------------------------------------
lisi ALL=(ALL) /usr/bin/mount /dev/sr0 /mnt/
-------------------------------------------------------
visudo -c # 解析/etc/sudoers这个文件格式是否正确
[lisi@localhost ~]$ sudo mount /dev/sr0 /mnt/
# /etc/sudoers配置文件中写的是什么内容,外面输入命令时必须写一样的内容,否则不运行,系统认为没有这个命令
对不起,用户 lisi 无权以 root 的身份在 localhost.localdomain 上执行 /bin/mount /dev/sr0 /mnt/。
[lisi@localhost ~]$
[lisi@localhost ~]$ sudo mount /dev/sr0 /mnt
[sudo] lisi 的密码:
mount: /dev/sr0 写保护,将以只读方式挂载
[lisi@localhost ~]$
sudo的command中可以使用通配符
lisi ALL=() /usr/bin/cat /var/log/vm*
# vm* 可以使用通配符
[lisi@localhost log]$ sudo /usr/bin/cat /var/log/vmware-vmusr.log
[lisi@localhost test]$ sudo /usr/bin/cat /var/log/vmware-vmusr.log /opt/test/t1
# 因为vm*,所以该用户可以查看多个文件,这是个bug
sudo的command中如果有矛盾,靠后的命令生效
lisi ALL=() !/usr/bin/cat,/usr/bin/cat
1.7 grub加密
1.8 暴力破解密码
系统弱口令检测
1.9 nmap扫描
总结
1.做了哪些安全加固
2.pam
limt 限制单个程序使用服务器的硬件资源
3.面试题
内核调优
打开文件数量
打开转发功能
系统调优
关闭不必要的开机自启程序
将国外yum源改为清华,阿里等国内源
时间同步
内核调优
日志分割(将大的日志进行分割成小日志)
4.sudo
root localhost|ALL = (ALL)NOPASSWD:命令序列
用户 主机名 以谁的身份运行 免密 命令
注意事项:在改配置文件前先备份
hostname 查看主机名
cat /etc/redhat-release 查看系统版本
uname -r 内核版本
升级内核版本 yum、编译
ifconfig 查看网卡信息
标签:lisi,系统安全,命令,用户,etc,root,localhost From: https://www.cnblogs.com/wuyao-bk/p/17828128.html