1, 不用root,添加普通用户,通过sudo授权管理
sudo是为所有想使用root权限的普通用户设计的,可以让普通用户具有临时使用root权限的权力,只需要普通用户输入自己的账户的密码即可,需要在/etc/sudoers文件中具有配置项,才能具有使用sudo的权利
在/etc/sudoers文件中添加
用户名 ALL=(ALL) ALL
添加之后,普通用户就可以使用sudo执行需要root权限的命令了
[root@c7-1 ~]# su yanlei
[yanlei@c7-1 root]$ sudo ls /root
1 chook_rabbit.sh nginx-1.18.0 reset3.sh
anaconda-ks.cfg functions nginx-1.18.0.tar.gz
1.1 sudo的工作过程如下:
- 当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
2. 确认用户具有执行sudo的权限后,让用户输入自己的密码进行确认
3. 若密码输入成功,则开始执行sudo后续的命令1.2 精准控制普通用户使用sudo
用户名 ALL=(ALL) ALL
第一个ALL是指网络中的主机,我们可以指定主机名,这样用户只可以在此主机上执行命令;第二个ALL是指目标用户,也就是以谁的身份去执行命令;最后一个ALL是指要执行的命令名称
2, 更改默认的远程连接SSH服务端口及禁止root用户远程连接
ssh是一种网络协议,用于计算机之间的加密登录2.1 修改ssh服务端口
修改 /etc/sshd_config文件中的内容
Port 22 ==> Port 任意未被占用的端口即可
2.2 禁止root远程登录
注意:修改完之后重启ssh服务在/etc/sshd_config文件中将PermitRootLogin yes的yes改为no即可
3, 定时自动更新服务器时间
0 12 * * * * /usr/sbin/ntpdate -u ntp.api.bz > /dev/null 2>&1; /sbin/hwclock -w
每天12点整,定时同步时间
4, 配置国内yum源
阿里云,华为云等等都可以,直接百度镜像即可
5, 关闭selinux,firewall及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外)
关闭selinux
vim /etc/selinux/config
SELINUX=disabled
#将SELINUX状态改为disabled即可, 需要重启服务器
#getenforce 查看selinux状态
#setenforce 0 临时关闭selinux
关闭firewall
systemctl stop firewalld
systemctl disable --now firewalld
6, 调整文件描述符的数量
linux对应用程序能打开的最大文件描述符数量有两个层次的限制: 用户级限制和系统级限制
- 用户级限制是指目标用户运行的所有进程总共能打开的文件描述符数量
-
6.1 用户级限制
查看用户级文件描述符限制的方法 :
[root@c7-1 ~]# ulimit -n
1024
#永久修改用户级文件描述符限制
修改/etc/security/limits.conf最后两行 : 取消下面两行注释即可
#* soft nofile 1000000
#* hard nofile 1000000
修改完重启服务器再次查看
[root@c7-1 ~]# ulimit -n
1000000
6.2 系统级限制
查看系统级限制 : cat /proc/sys/fs/file-max
永久修改系统级文件描述符数量限制,则需要在/etc/sysctl.conf 文件中添加如下一行:
fs.file-max=1000000
保存完毕后执行sysctl -p
[root@c7-1 ~]# sysctl -p
fs.file-max = 1000000
[root@c7-1 ~]# cat /proc/sys/fs/file-max
1000000
7, 精简开机启动服务(crond rsyslog network sshd)
新装的linux系统必须开启的服务:
sshd : 远程连接 默认端口22
- rsyslog : 系统日志
- network :网络
- crond 定时任务 (根据工作需求定制)
8, 内核参数优化(/etc/sysctl.conf),执行sysctl -p生效
内核参数是用户和系统内核之间交互的一个接口,通过这个接口,用户可以在系统运行的同时动态更新内核配置,而这些内核参数是通过linux proc文件系统存在的,因此,可以通过调整proc文件系统达到优化linux性能的目的.
8.1 优化方法
- 修改/proc下内核参数文件内容,此为临时修改,重启系统后恢复默认
- 修改/etc/sysctl.conf文件,此为永久性修改,修改完毕后执行sysctl -p生效
- 常见数值配置 ```bash
net.ipv4.ip_local_port_range = 1024 65536
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_fin_timeout = 30
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save=1
net.core.somaxconn = 262144
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
说明:
net.ipv4.ip_local_port_range : 用来指定外部连接的端口范围,默认是32768-61000,这里设置为1024到65536 net.core.rmem_max : 指定接收套接字缓冲区大小的最大值,单位是字节 net.core.wmem_max : 指定发送套接字缓冲区大小的最大值,单位是字节 net.ipv4.tcp_rmem : 此参数和net.ipv4.tcp_wmem都是用来优化tcp接受/发送缓冲区的,包含3个整数值,分别是 min; default; max; 对于tcp_rmem, min表示为tcp socket预留的用于接收缓存的最小内存数量,default表示为tcp socket预留的用于接收缓存的默认的内存值,max表示用于tcp socket接收缓存的最大内存值 对于tcp_wmem, min表示为tcp socket预留的用于发送缓存的最小内存数量,default表示为tcp socket预留的用于发送缓存的默认的内存值,max表示用于tcp socket发送缓存的最大内存值 net.ipv4.tcp_fin_timeout : 此参数用于减少FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接,此参数值为整数,单位为秒; 例如 : 在一个tcp会话结束时,a首先向b发送一个fin包,在获得b的ack确认包后,a就进入FIN-WAIT-2状态等待b的fin包,然后给b发送ack确认包,net.ipv4.tcp_fin_timeout参数就是用来设置a进入FIN-WAIT-2状态等待对方的fin包的超时时间,如果时间到了仍未收到对方的fin包就主动释放该会话 net.core.netdev_max_backlog : 此参数表示当在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数量包的最大数量 net.ipv4.tcp_syncookies : 表示是否打开SYN cookie ; tcp_syncookies是一个开关,它的功能就是有助于保护服务器免受syncflood攻击,默认值为0,这里设置为1 net.ipv4.tcp_max_orphans : 表示系统中最多有多少tcp套接字不被关联到任何一个用户文件句柄上,如果超过这里设置的数字,连接就会复位并输出警告信息,这个限制仅仅是为了防止简单的dos攻击; 此值不能太小,这里设置为262144 net.ipv4.tcp_max_syn_backlog : 表示SYN队列的长度,预设为1024,这里设置队列长度为262144,以便容纳更多的等待连接 net.ipv4,.tcp_synack_retries : 这个参数用于设置内核放弃连接之前发送SYN+ACK包的数量 net.ipv4.tcp_syn_retries : 此参数表示在内核放弃建立连接之前发送SYN包的数量
<a name="Edh7K"></a>
### 9, 更改字符集,支持中文,但建议还是用英文字符集,防止乱码
```bash
更改linux字符集,可以直接修改/etc/locale.conf文件,将之前的字符集注释掉,使用新的字符集
[root@c7-1 ~]# vim /etc/locale.conf
#LANG="en_US.UTF-8"
LANG="zh_CN.UTF-8"
[root@c7-1 ~]# source /etc/locale.conf
10; 锁定关键系统文件
要锁定关键系统文件,必须对账号密码文件及启动文件加锁,防止被篡改
/etc/passwd 账号文件
/etc/shadow 密码文件
/etc/group 组文件
/etc/gshadow 组密码文件
#锁定文件之后,即使root用户也无法对这些文件进行操作
chattr +i /etc/passwd /etc/shadow /etc/groupp /etc/gshadow
#想要进行操作必须先解锁
chattr -i /etc/passwd /etc/shadow /etc/groupp /etc/gshadow
#查看文件是否被锁定
lsattr /etc/passwd /etc/shadow /etc/groupp /etc/gshadow
#为了一定程度防止黑客,或者root误操作,可以将chattr改名,根据自己的习惯来定义锁命令
#例如 : mv /usr/bin/chattr /usr/bin/long
11; 清空/etc/issue,去除系统及内核版本登录前的屏幕显示
直接将/etc/issue文件清空或者移动,清除服务器开机时显示的系统和内核版本,防止泄露版本