Linux服务器初始化基础优化

注意:这里以Centos为主

如何最小化安装系统

仅安装需要的,按需安装、不用不装,必须安装的有开发包、基本网络包、基本应用包。

ssh登录系统策略

vim /etc/ssh/sshd_config

#SSH链接默认端口,修改默认22端口为1万以上端口号,避免被扫描和攻击。

Port 22221

#不使用DNS反查,可提高ssh连接速度

UseDNS no

sed -ri 's/^.*(UseDNS) .*$/\1 no/' /etc/ssh/sshd_config && sed -rn '/UseDNS/p' /etc/ssh/sshd_config

#关闭GSSAPI验证,可提高ssh连接速度

GSSAPIAuthentication no

sed -ri 's/^.*(GSSAPIAuthentication ).*$/\1no/' /etc/ssh/sshd_config && sed -rn '/GSSAPIAuthentication/p' /etc/ssh/sshd_config

#禁止远程root账号登陆

PermitRootLogin no

#禁止密码登录

先生成本地主机的key

ssh-keygen

拷贝公钥到服务器上

ssh-copy-id xxx@10.0.0.5

或者手动将公钥写入/home/xxx/.ssh/authorized_keys文件中

修改/etc/ssh/sshd_conf

PasswordAuthentication yes 修改为 PasswordAuthentication no

然后重启sshd服务

selinux, iptables策略设置

cat /etc/selinux/config

Selinux的状态:

enforcing 开启状态、permissive 提醒的状态 、disabled 关闭状态

vim /etc/selinux/config
SELINUX=disabled
#命令
sed -ri.bak 's/^(SELINUX=).*$/\1disabled/' /etc/selinux/config
#生效配置(临时生效)
$ setenforce 0

关闭防火墙

systemctl stop firewalld.service 
systemctl disable firewalld.service
systemctl status firewalld.service 

iptables -L -n

或者配置策略

#安装 iptables-services 实现iptables.service
yum install iptables-services
systemctl enable iptables.service

#如果有配置的话,根据需要把需要的表的链的默认设置都设置ACCEPT,并清空规则
#filter表的所有链
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X

#上面的清空一般指清空filter表的
#给filter表配置策略
#允许ssh icmp 以及主动发起的连接的相关连接
iptables -t filter -I INPUT -p tcp --dprot 22 -j ACCEPT
iptables -t filter -I INPUT -p icmp -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #这条很重要
#最后修改默认策略
iptables -t filter -P INPUT DROP
#保存策略
service iptables save
iptables-save > /etc/sysconfig/iptables

更新yum源及必要软件安装

常用的几个yum源

epel源:https://fedoraproject.org/wiki/EPEL

repoforge源:http://repoforge.org/use/

$ yum install epel-release.noarch -y
$ rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
$ yum clean all
$ yum makecache

$ yum update  #更新系统所以软件和内核

或者直接写

mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/* /etc/yum.repos.d/bak/
vim /etc/yum.repos.d/test.repo 
[epel]
name=epel
failovermethod=priority
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
	http://mirrors.aliyun.com/epel/7/$basearch
	http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[development]
name=base
failovermethod=priority
baseurl=https://mirror.tuna.tsinghua.edu.cn/centos/7/os/x86_64/
	https://mirrors.163.com/centos/7/os/x86_64/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever

[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=https://mirror.tuna.tsinghua.edu.cn/centos/7/updates/x86_64/
	http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
enabled=1
gpgcheck=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=https://mirror.tuna.tsinghua.edu.cn/centos/7/extras/x86_64/
	http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
enabled=1
gpgcheck=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

定时自动更新服务器时间

时间服务器

阿里云时间服务器:

ntp.aliyun.com

ntp1.aliyun.com

ntp2.aliyun.com

ntp3.aliyun.com

ntp4.aliyun.com

ntp5.aliyun.com

ntp6.aliyun.com

ntp7.aliyun.com

腾讯云NTP服务器:

time1.cloud.tencent.com
time2.cloud.tencent.com
time3.cloud.tencent.com
time4.cloud.tencent.com
time5.cloud.tencent.com

ntp.sjtu.edu.cn 202.120.2.101 (上海交通大学网络中心NTP服务器地址)
s1a.time.edu.cn 北京邮电大学
s1b.time.edu.cn 清华大学
s1c.time.edu.cn 北京大学
s1d.time.edu.cn 东南大学
s1e.time.edu.cn 清华大学
s2a.time.edu.cn 清华大学
s2b.time.edu.cn 清华大学
s2c.time.edu.cn 北京邮电大学
s2d.time.edu.cn 西南地区网络中心
s2e.time.edu.cn 西北地区网络中心
s2f.time.edu.cn 东北地区网络中心
s2g.time.edu.cn 华东南地区网络中心
s2h.time.edu.cn 四川大学网络管理中心
s2j.time.edu.cn 大连理工大学网络中心
s2k.time.edu.cn CERNET桂林主节点
s2m.time.edu.cn 北京大学

校准

/usr/sbin/ntpdate ntp1.aliyun.com >> /var/log/ntp.log 2>&1; /sbin/hwclock -w

加到时间任务中

crontab -e

每十分钟执行一次校准

*/10 * * * * root /usr/sbin/ntpdate ntp1.aliyun.com >> /var/log/ntp.log 2>&1; /sbin/hwclock -w

使用chronyd同步时间

安装

$ yum -y install chrony

修改配置

vim /etc/chrony.conf
#注释下面的部分
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

#添加下面的部分
server ntp.aliyun.com iburst
server ntp.tuna.tsinghua.edu.cn iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst

启动服务或重启服务

systemctl start chronyd
#或者
systemctl restart chronyd

#开机自启
systemctl enable chronyd

查看是否同步成功

chronyc sources
#这个就是没有同步成功,没有?问好
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 139.199.214.202               2  10   367   636  -3904us[-3878us] +/-   15ms
^+ 119.28.206.193                2  10   367   390    +12ms[  +12ms] +/-   37ms
^- ntp1.ams1.nl.leaseweb.net     2  10   373   463    +22ms[  +22ms] +/-  192ms
^+ time.neu.edu.cn               1  10   377   912  -4804us[-4783us] +/-   33ms



chronyc sources
#这个就是同步成功的,已经出现?问好了
210 Number of sources = 3
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 203.107.6.88                  2   6    17    19   -742us[-2447us] +/-   31ms
^? 101.6.6.172                   0   7     0     -     +0ns[   +0ns] +/-    0ns
^? 120.25.115.20                 2   7     1    11  +2956us[+2956us] +/- 4450us

重要文件加锁

chattr [+-=] [属性] 文件或目录名

+ 表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录设定一些属性。

属性选项 功能
i 如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;
如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件;
a 如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据;
如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除文件;
u 设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录。
s 和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复。

加锁的文件是无法修改的

chattr +i /etc/sudoers

chattr +i /etc/shadow

chattr +i /etc/passwd

chattr +i /etc/grub.conf

可以用lsattr 查看文件是否被加锁

lsattr /etc/crontab
---------------- /etc/crontab
# 加锁
chattr +i /etc/crontab
lsattr /etc/crontab
----i----------- /etc/crontab
# 去锁
chattr -i /etc/crontab

系统资源参数优化

/etc/security/limits.conf

/etc/security/limits.d/90-nproc.conf(centos6.x)

/etc/security/limits.d/20-nproc.conf(centos7.x)

cat << EOF >> /etc/security/limits.conf
*        soft    nproc           20480
*        hard    nproc           20480
*        soft    nofile          45536
*        hard    nofile          45536
*        soft    memlock         unlimited
*        hard    memlock         unlimited
EOF

最后,还需要修改/etc/security/limits.d/20-nproc.conf文件(centos7.x系统),将:

*          soft    nproc     4096

修改为:

*          soft    nproc     40960

#或者
sed -ri 's/ 4096$/ 40960/' /etc/security/limits.d/20-nproc.conf && cat /etc/security/limits.d/20-nproc.conf

或者直接删除/etc/security/limits.d/20-nproc.conf文件也行。

ulimit命令

ulimit -a

  • -a 显示当前系统所有的limit资源信息。
  • -H 设置硬资源限制,一旦设置不能增加。
  • -S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。
  • -c 最大的core文件的大小,以 blocks 为单位。
  • -f 进程可以创建文件的最大值,以blocks 为单位.
  • -d 进程最大的数据段的大小,以Kbytes 为单位。
  • -m 最大内存大小,以Kbytes为单位。
  • -n 可以打开的最大文件描述符的数量。
  • -s 线程栈大小,以Kbytes为单位。
  • -p 管道缓冲区的大小,以Kbytes 为单位。
  • -u 用户最大可用的进程数。
  • -v 进程最大可用的虚拟内存,以Kbytes 为单位。
  • -t 最大CPU占用时间,以秒为单位。
  • -l 最大可加锁内存大小,以Kbytes 为单位。

如果需要暂时生效,直接ulimit 选项 修改的值

例如:ulimit -n 65535 修改最大文件描述符数

如果需要永久生效,需要写入文件

配置到/etc/security/limits.conf 或者 /etc/security/limits.d/下的文件

/etc/security/limits.d/下的文件优先级比/etc/security/limits.conf高

配置格式

<domain> <type> <item> <value>

<domain> 可以是:

  • 用户名
  • 组名,使用@group 语法
  • 通配符 *,用于默认条目
  • 通配符 %,也可以与 %group 语法一起使用,最大登录限制

<type> 可以有两个值:

  • soft 用于执行软限制
  • hard 用于执行硬限制

<item> 可以是以下之一:

 - core  限制核心文件大小 (KB)
  • data 最大数据大小 (KB)
    • fsize 最大文件大小 (KB)
    • memlock - 最大锁定内存地址空间 (KB)
    • nofile - 打开文件描述符的最大数量
    • rss - 最大驻留集大小 (KB)
    • stack - 最大堆栈大小 (KB)
    • cpu - 最大 CPU 时间 (MIN)
    • nproc - 最大进程数
    • as - 地址空间限制 (KB)
    • maxlogins - 此用户的最大登录数
    • maxsyslogins - 系统上的最大登录数
    • priority - 运行用户进程的优先级
    • locks - 用户可以持有的最大文件锁数
    • sigpending - 挂起信号的最大数量
    • msgqueue - POSIX 消息队列使用的最大内存(字节)
    • nice - 允许提升到值的最大 nice 优先级:[-20, 19]
    • rtprio - 最大实时优先级

比如:

所有用户对最大进程数的硬限制是10000

* hard nproc 10000

对root用户的最大打开文件描述符的数的硬限制是65535

root hard nofile 65535

对root用户的cpu最大时间没有限制

root hard cpu unlimited

希望文件生效,只需要关掉终端,重新连接就好了

更改提示符颜色

写到/etc/profile文件中,或者写成文件放到/etc/profile.d/目录下

PATH=/data/:$PATH
#二选一
PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"
PS1="\[\e[1;32m\][\[\e[0m\]`date +'%D'` \t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"

设置启动模式

systemctl set-default graphical.target #由命令行模式更改为图形界面模式
systemctl set-default multi-user.target #由图形界面模式更改为命令行模式

安装必要的包

#装tree命令
yum install tree -y
#安装tab增强包
yum -y install bash-completion
#安装开发包
yum groups install "Development Tools"
#安装yum工具
yum install yum-utils.noarch -y
#安装rz和sz
yum install lrzsz -y

设置语言

#查看是否安装了语言包
locale -a
#未安装的话,需要安装下这个包组
yum groupinstall "fonts" -y

#设置字符集
localectl set-locale LANG=zh_CN.utf8
#重启
$ reboot

设置日志格式

#修改文件
vim /etc/rsyslog.conf
$ActionFileDefaultTemplate RSYSLOG_FileFormat
#重启
systemctl restart rsyslog.service

#或者直接修改重启
sed -ri 's/^(\$ActionFileDefaultTemplate ).*$/\1RSYSLOG_FileFormat/' /etc/rsyslog.conf && systemctl restart rsyslog.service

#8版
sed -ri "s/RSYSLOG_TraditionalFileFormat/RSYSLOG_FileFormat/" /etc/rsyslog.conf && systemctl restart rsyslog.service

设置日志周期

sed -ri "s/^weekly/monthly/" /etc/logrotate.conf

安装基础包

yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet ipvsadm

脚本

注意:自用时,需要先配一下yum源

#!/bin/bash
sed -ri 's/^.*(UseDNS) .*$/\1 no/' /etc/ssh/sshd_config && sed -rn '/UseDNS/p' /etc/ssh/sshd_config
sed -ri 's/^.*(GSSAPIAuthentication ).*$/\1no/' /etc/ssh/sshd_config && sed -rn '/GSSAPIAuthentication/p' /etc/ssh/sshd_config
setenforce 0
sed -ri.bak 's/^(SELINUX=).*$/\1disabled/' /etc/selinux/config
systemctl stop firewalld.service 
systemctl disable firewalld.service
sleep 10
yum clean all
yum makecache
yum install iptables-services -y
systemctl enable iptables.service

iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X
service iptables save
iptables-save > /etc/sysconfig/iptables
yum -y install chrony

#sed -ri "s/^(pool.*)$/#\1/" /etc/chrony.conf
sed -ri "s/^(.*pool.*)$/#\1/" /etc/chrony.conf
c=`cat /etc/chrony.conf | grep 'aliyun'|wc -l`
echo $c

if [[ $c -eq 0 ]];then
cat << EOF >> /etc/chrony.conf 
server ntp.aliyun.com iburst
server ntp.tuna.tsinghua.edu.cn iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
EOF
systemctl restart chronyd
#开机自启
systemctl enable chronyd
else
echo "时间同步已经配置"
fi
chronyc sources
u=`cat /etc/security/limits.conf | grep 20480`
echo $u
if [[ $u -eq 0 ]];then
cat << EOF >> /etc/security/limits.conf
*        soft    nproc           20480
*        hard    nproc           20480
*        soft    nofile          45536
*        hard    nofile          45536
*        soft    memlock         unlimited
*        hard    memlock         unlimited
EOF
sed -ri 's/ 4096$/ 40960/' /etc/security/limits.d/20-nproc.conf && cat /etc/security/limits.d/20-nproc.conf
else
echo "ulimit已经配置"
fi
p=`cat /etc/profile | grep PS1 |wc -l`
echo $p
if [[ $p -eq 0 ]];then
cat << EOF >> /etc/profile
PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\\\$"
EOF
else
echo "PS1已经配置"
fi
systemctl set-default multi-user.target
yum install tree -y
yum -y install bash-completion
yum groups install "Development Tools" -y
yum install yum-utils.noarch -y
yum install lrzsz -y
sed -ri 's/^(\$ActionFileDefaultTemplate ).*$/\1RSYSLOG_FileFormat/' /etc/rsyslog.conf && systemctl restart rsyslog.service
sed -ri "s/^weekly/monthly/" /etc/logrotate.conf
yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet ipvsadm
reboot
posted @   厚礼蝎  阅读(117)  评论(0编辑  收藏  举报
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示