Centos 04 基础系统优化命令

在Linux这个系统当中,几乎所有的硬件设备文件都在/dev这个目录内。举例来说,IDE介面的硬盘的文件名称即为/dev/hd[a-d],其中, 括号内的字母为a-d当中的任意一个,亦即有/dev/hda,/dev/hdb, /dev/hdc, 及 /dev/hdd这四个文件的意思。Linux通过设备名访问设备,设备存放在/dev目录下。

[root@centos7 ~]# ll /dev/sd*
brw-rw---- root disk , 8月 : /dev/sda # 第一块磁盘sda,第二块磁盘sdb,a、b区分主磁盘
brw-rw---- root disk , 8月 : /dev/sda1 # 第一块磁盘下面的分区1,SCSI接口硬盘
brw-rw---- root disk , 8月 : /dev/sda2 # 第一块磁盘下的分区2

分区数字编号1~4只能里给主分区或扩展分区使用,逻辑分区是在扩展分区基础上,所以编号只能从5开始。

linux环境下没有盘符的概念,要对磁盘设备进行操作,需要使用磁盘设备名;要操作文件则需挂装创建在分区或逻辑卷上的文件系统

Linux系统对分区的要求

linux系统至少要有/分区
swap(交换分区)的作用:虚拟内存,swap分区的大小=1.5*物理内存的容量,内存大于16G时,虚拟内存给8~16就行了。
建议建立对立的boot分区
数据库服务器正常不需要swap分区,因为虚拟的内存的速率跟不上。

常规分区方案

/             剩余硬盘大小
swap .5倍
/boot 100M

DB及存储的分区方案

/data/        剩余磁盘大小
/ ~200G
swap .5倍
/boot 100M
相当于windows不能只分c盘,还需要D E,重装系统数据可能会丢。

门户网站案例

/             ~200G
swap .5倍
/boot 100M
不再进行分区,保留,将来哪个需要用,再根据需求再分

以下分区几乎没有必要:

/usr
/home
/var LVM,目录满了就在线调整分区大小,LVM性能差
生产场景 硬件RAID(DELL),组合多块磁盘,而不是LVM或者软RAID

用户相关的命令

查看当前用户                 whoami
添加用户 useradd/adduser dandy1;
修改密码 passwd dandy + 密码
不指定则修改当前用户密码;普通用户不能修改其他人的密码
切换用户 su - oldboy 把参数全部切换成oldboy的
不交互改密码 echo |passwd --stdin dandy
但是查看history的时候可以看到明文密码
history -d 干掉固定行号
history -c 全部干掉

centos安装软件包管理工具

yum是centos软件包管理工具,二进制软件包一般是rpm包。由于centos的内置默认软件源是指向国外的,一般情况下下载更新软件包都会很慢,很浪费时间,所以需要将其修改为国内的软件镜像源。

查看软件镜像源文件

cat /etc/yum.repos.d/CentOS-Base.repo

一切修改的最基本条件是留一份原文件存档

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

这里我们使用如下的地址

http://mirrors.163.com/.help/centos.html

Centos 04 基础系统优化命令

选择你对应的centos版本,右键复制链接地址

进入到软件镜像源目录:

wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

wget后面的是自己右键复制的地址,粘贴上去就好了。

cp CentOS7-Base-163.repo  CentOS-Base.repo

也可以用mv命令。。此时就替换好了。

正常的教程到这里会让你更新一下软件包,但是这里,我们选择不更新,更新的越多,下载的软件包越多,系统越重,并且漏洞发生的几率或更高、安全性降低。

安装基础软件包

yum install tree telnet dos2unix sysstat lrzsz -y 默认不提示

-y代表手动命令安装软件的所有提示确认的命令都不需要确认了,不再提示确认内容。

关闭selinux

cat /etc/selinux/config 

Centos 04 基础系统优化命令

三种状态:

enforcing       激活状态
permissive 不激活,但是打印警告
disabled    不加载

可以直接vim  修改状态

sed -i s#SELINUX=enforcing#SELINUX=disabled#g /etc/selinux/config

再查看一下修改

[root@centos7 yum.repos.d]# grep "disabled" /etc/selinux/config
# disabled - No SELinux policy is loaded.
SELINUX=disabled
[root@centos7 yum.repos.d]#

通过命令查看系统状态

getenforce        #  查看状态,显示还是Permissive

查询系统状态的时候,你会发现还是显示Permissive,因为系统只有重启过才能更改过来。

setenforce                     # 临时将状态改成Permissive

此时系统的状态已经更改过来,而当系统重启后,虽然会消失,但是系统配置中已经更改成disabled,所以也就都ok了

修改linux机器运行模式

模式简介

    关机模式
单用户模式,一般用来改密码
多用户模式
命令行模式
没有使用
X11桌面模式,图形化界面
重启模式

模式的切换

centos6.    cat /etc/inittab 直接修改runlevel
runlevel查看当前模式
vi /etc.inittab ==> id::initdefault:修改成5 init + 数字 CentOS7    systemctl set-default graphical.target
        systemctl set-default multi-user.target

优化开机启动项

一般基础启动项

crond        (定时任务)
network (网络服务)
rsyslog (系统日志功能)
sshd (远程链接服务)

Centos6优化方式

、ntsysv
、setup-system service
、脚本一键完成处理

查看所有命令行模式的启动

chkconfig --list|grep "3:on"    查看所有模式3下开机启动项
chkconfig udev-post off/on 默认关闭23456运行模式里面的开机自启动/关闭
chkconfig --list udev-post     列出某一条所有模式下的启动模式

如何关闭呢?

思路一(先全部关闭,在打开需要开启的服务)

for dandy in `chkconfig --list|grep "3:on"|awk '{print $1}'`;do chkconfig $dandy off;done

for dandy in crond network sshd rsyslog;do chkconfig $dandy on;done

$dandy是变量,对for循环的变量操作。

思路二(只关闭不需要的服务)

for dandy in `chkconfig --list|grep "3:on"|awk '{print $1}'|grep -vE "crond|network|sshd|rsyslog"`;do chkconfig $dandy off;done
grep -i 不区分大小写的过滤 grep -Ei "a|b" dandy.txt
grep -E = egrep # 并列条件,同时过滤多个字符串

-v取消原输出,反转查找

Centos7优化

CentOS 7由于使用systemd而不是init,所以不能通过修改inittab文件来修改开机启动模式。

systemctl get-default                # 获取默认的系统
systemctl set-default multi-user.target      # 设置默认模式
systemctl set-default graphical.target systemctl list-unit-files | grep enabled     # 查看当前模式的开机启动项,enabled是开机启动,disabeld是不启动 systemctl disable firewalld.service        # 开机不启动某个服务
systemctl stop firewalld.service          # 暂停服务
systemctl enable apache.service          # 开机启动
systemctl status mysqld               # 查询某个服务状态 systemctl start docker.service           # 开启某个服务

最小化原则

)安装系统最小化
安装的软件包越少,磁盘空间越小,软件漏洞相对越少
)开启程序服务最小化
)操作最小化原则
)登陆最小化原则。
平时没有需求,不要用root登陆
)权限最小化原则
)配置参数合理,不要最大化

远程登陆

windows远程登陆及管理员账户

administrator    

linux远程登陆及管理员账户

root            

这种常用设置,大家都知道,可能不安全,需要修改端口或用户名,增加迷惑性,安全性。

修改ssh端口

、先备份!先备份!!!cp /a /a.backup
、vim /etc/ssh/sshd_config
取消port注释、修改port端口比如改到52113
PermitRootLogin:no # 禁止root远程登陆
UseDNS:no # 禁止使用DNS
PermitEmptyPasswords:no
GSSAPIAuthentication:no
输入行号 + gg、定位到具体行
、/etc/init.d/sshd reload # 重新加载
/etc/init.d/sshd restart # 重启服务

关闭防火墙

/etc/init.d/iptables stop     关闭防火墙

查看网络状态

查看网络状态lntup或者an 可以通过man netstat查看

netstat -an|grep ip(服务器ip)查看网络状态
netstat [address_family_options] [--tcp|-t]  [--udp|-u]  [--udplite|-U]
[--sctp|-S] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n]
[--numeric-hosts] [--numeric-ports] [--numeric-users] [--symbolic|-N]
[--extend|-e[--extend|-e]] [--timers|-o] [--program|-p] [--verbose|-v]
[--continuous|-c] [--wide|-W] [delay] netstat {--route|-r} [address_family_options]
[--extend|-e[--extend|-e]] [--verbose|-v] [--numeric|-n]
[--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
[delay]
.....

查看端口状态

netstat -lntup|grep
# 或者
lsof -i :

修改sudo的配置文件

使用visudo来编辑sudo的配置文件,相当于直接编辑'vim /etc/sudoers',建议不要手动去改,visudo有语法检查。

:set nu            显示行号
98gg   光标定位到98行
yy 复制当前行
p 粘贴
 ## Allow root to run any commands anywhere
root ALL=(ALL) ALL
dandy ALL=(ALL) ALL
可以将用户dandy最后的ALL改成/usr/sbin/useradd(多条的话使用逗号把命令连起来就可以),这样dandy变只拥有执行useradd的权限了,需要使用sudo useradd + 用户名才能使用
[dandy@centos7 ~]$ sudo useradd test_user
[sudo] password for dandy:
[dandy@centos7 ~]$ tail -1 /etc/passwd
test_user:x::::/home/test_user:/bin/bash

修改dandy最后的ALL到NOPASSWD:ALL(表示不需要密码)

user             MACHINE=                 COMMANDS
root ALL=(ALL) ALL
oldboy ALL=(ALL) /usr/sbin/useradd
用户 机器=(授权哪个角色的权利) /usr/sbin/useradd
%用户组 机器=(授权哪个角色的权利) /usr/sbin/useradd

查看当前用户有那些权限:

[root@centos7 ~]# sudo -l
匹配 %$s 上 %$s 的默认条目:
!visiblepw, always_set_home, match_group_by_gid, env_reset,
env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin 用户 root 可以在 centos7 上运行以下命令:
(ALL) ALL
[dandy@centos7 ~]$ sudo -l
Matching Defaults entries for dandy on centos7:
!visiblepw, always_set_home, match_group_by_gid, env_reset,
env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User dandy may run the following commands on centos7:
(ALL) NOPASSWD: ALL

linux系统环境变量

控制linux命令所在的路径,相当于window环境变量PATH,查看系统环境变量

[dandy@centos7 ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dandy/.local/bin:/home/dandy/bin

可以发现系统环境变量通过: 进行分割,同样的可以按照windows的思路,添加一个系统环境变量

、mkdir /dandy                      创建目录
、vi /dandy/dandy     添加内容echo 'hello dandy'
、chmod +x /dandy/dandy 增加权限

执行上述文件命令

1、根据绝对路径直接执行

[dandy@centos7 /]$ /dandy/dandy
hello dandy

2、添加路径到系统环境变量,再执行

PATH=$PATH:/dandy             但是这个是临时有效
dandy hello dandy

永久有效的添加环境变量

echo 'PATH=/dandy/:$PATH' >> /etc/profile
source /etc/profile 让文件生效
使用单引号添加,会把这句话添加进去,双引号会将变量转化成结果添加到文件内,不合适
[dandy@centos7 /]$ tail -5 /etc/profile
done unset i
unset -f pathmunge
PATH=/dandy/:$PATH

测试

[dandy@centos7 /]$ dandy
hello dandy
[dandy@centos7 /]$ which dandy
/dandy/dandy

并且在/etc下面加的命令是对全局都生效的,所有用户都可以使用。如果是在普通文件下加的话,可以在.bash_profile里面添加,可以使用cat .bash_profile来查看下

修改中文字符显示(建议不做)

字符集是一套文字符号及其编码,查看当前字符集编码

[dandy@centos7 /]$ echo $LANG
en_US.UTF-

默认字符集路径及修改

centos6
cat /etc/sysconfig/i18n
CentOS7
cat /etc/locale.conf LANG="en_US.UTF-8"调整为LANG="zh_CN.GB18030"
最后 source + 路径让它生效

Linux时间同步服务

安装

yum install ntp

获取网上最新时间

centos7                ntpdate -d ntp.sjtu.edu.cn
centos6                /usr/sbin/ntpdate time.nist.gov

创建更新的定时任务

echo '#time sync by dandy at 2018-08' >> /vae/spool/cron/root   # 追加到定时任务的配置文件
echo '*/5 * * * * ntpdate -d ntp.sjtu.edu.cn >/dev/null 2>&1' >>/var/spool/cron/root

>/dev/null 2>&1默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞” ,然后再追加到cron的root文件内

检查是否再cron内存在

crontab -l 检查是否存在

这边可以去百度一下如何配置ntp server,网上的内容很多,楼主觉得没必要学再记录,仁者见仁,智者见智。

修改文件描述符

查看当前文件描述符大小

[root@centos7 ~]# ulimit -n

加大文件描述符(临时),重启后消失

[root@centos7 ~]# ulimit -HSn
[root@centos7 ~]# ulimit -n

写入配置文件,永久生效

echo '*               -    nofile            65535' >>/etc/security/limits.conf 

文件描述符太小,不够用,进程会起不来,当然文件描述符也不是越大越好。

调整内核参数

内核参数文件

/etc/sysctl.cnf

修改文件,将下面的内容插入

#关闭ipv6
net.ipv6.conf.all.disable_ipv6 =
net.ipv6.conf.default.disable_ipv6 =
# 避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts =
# 开启恶意icmp错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses =
#关闭路由转发
net.ipv4.ip_forward =
net.ipv4.conf.all.send_redirects =
net.ipv4.conf.default.send_redirects =
#开启反向路径过滤
net.ipv4.conf.all.rp_filter =
net.ipv4.conf.default.rp_filter =
#处理无源路由的包
net.ipv4.conf.all.accept_source_route =
net.ipv4.conf.default.accept_source_route =
#关闭sysrq功能
kernel.sysrq =
#core文件名中添加pid作为扩展名
kernel.core_uses_pid =
# 开启SYN洪水攻击保护
net.ipv4.tcp_syncookies =
#修改消息队列长度
kernel.msgmnb =
kernel.msgmax =
#设置最大内存共享段大小bytes
kernel.shmmax =
kernel.shmall =
#timewait的数量,默认180000
net.ipv4.tcp_max_tw_buckets =
net.ipv4.tcp_sack =
net.ipv4.tcp_window_scaling =
net.ipv4.tcp_rmem =
net.ipv4.tcp_wmem =
net.core.wmem_default =
net.core.rmem_default =
net.core.rmem_max =
net.core.wmem_max =
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog =
#限制仅仅是为了防止简单的DoS 攻击
net.ipv4.tcp_max_orphans =
#未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog =
net.ipv4.tcp_timestamps =
#内核放弃建立连接之前发送SYNACK 包的数量
net.ipv4.tcp_synack_retries =
#内核放弃建立连接之前发送SYN 包的数量
net.ipv4.tcp_syn_retries =
#启用timewait 快速回收
net.ipv4.tcp_tw_recycle =
#开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接
net.ipv4.tcp_tw_reuse =
net.ipv4.tcp_mem =
net.ipv4.tcp_fin_timeout =
#当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时
net.ipv4.tcp_keepalive_time =
#允许系统打开的端口范围
net.ipv4.ip_local_port_range =
#修改防火墙表大小,默认65536
#net.netfilter.nf_conntrack_max=
#net.netfilter.nf_conntrack_tcp_timeout_established=
# 确保无人能修改路由表
net.ipv4.conf.all.accept_redirects =
net.ipv4.conf.default.accept_redirects =
net.ipv4.conf.all.secure_redirects =
net.ipv4.conf.default.secure_redirects =

通过命令生效

sysctl -p 生效

隐藏版本号和内核号

cat /cat/issue
>/etc/issue 重定向清空
cat /dev/null >/etc/issue 清空,把issue变成空

锁定关键文件

chattr +i     /etc/passwd /etc/shadow
/etc/passwd   用户文件
/etc/shadow 用户密码文件
/etc/group 用户组文件
/etc/gshadow 组的密码文件
/etc/inittab 开机启动文件

锁定之后root都不能操作,用chattr -i 解锁

which chattr
/usr/bin/chattr
mv /usr/bin/chattr /usr/bin/dandy 修改命令,隐藏掉命令
这样就算黑客厉害到能拿到root账户,也不知道解锁的命令是哪一个

查看内容是不是加锁了    有一个i

lsattr /etc/passwd
----i----------- /etc/passwd

优化总结

、不用root、添加普通用户,通过sudo授权管理
、更改默认的远程连接ssh服务端口及禁止root用户远程连接
、定时自动更新服务器时间
、配置yum更新源,从国内更新源下载rpm包
、关闭selinux及iptables(iptables工作场景如果有wan ip一般要打开,高并发除外)
、调整文件描述符大小
、定时自动清理/var/pool/clientqueue目录的垃圾文件,防止inodes节点被占满(.4已经就没有了,可以不配)
、精简开机自启动服务
、linux内核参数优化
、更改字符集,支持中文,建议还是英文字符集,防止乱码
、锁定关键系统文件
、清空/etc/issue,去除内核跟系统版本的屏幕显示
上一篇:配置nginx支持thinkphp框架


下一篇:最完美解决Nginx部署ThinkPHP项目的办法