[三木]十分钟系列教程快速导读:
第一篇:[三木]十分钟教程之本地安装搭建Ubuntu12.04+Apache+PHP+MySQL+phpMyAdmin+Git+Gitweb(带LAMP全自动安装shell脚本)
第二篇:[三木]十分钟教程之服务器安装搭建CentOS6.x+Nginx+PHP+MariaDB(MySQL)+phpMyAdmin+Git+Gitweb(带LAMP全自动安装shell脚本)
第三篇:PHP环境搭建:Windows 7下安装配置PHP(VC6)+Apache+Mysql+phpMyAdmin环境教程(带自启动bat脚本)
第四篇:[三木]十分钟教程之本地安装搭建Ubuntu12.04+Java7+ZendStudio9.03汉化破解(带全自动安装shell脚本)
第五篇:[三木]十分钟教程之CenotOS6.x字符(最简化)安装+网卡设置+更新yum源(带自动设置网卡和更新yum源shell脚本)
第六篇:[三木]十分钟教程之CenotOS5.x 6.x服务器初始化安全设置+用SSH Key远程登录linux服务器(带自动设置shell脚本)
第七篇:[三木]十分钟教程之CentOS6.x安装搭建Apache+MariaDB(MySQL)+PHP+SSL+phpMyAdmin+Git+Gitweb(带LAMP服务器全自动安装shell脚本)
第八篇:VisualSVN Server + Tortoise SVN windows平台快速搭建SVN服务器(带SVN Hooks(钩子)自动更新测试网站)使用教程
文章介绍CentOS6.x 系统安装好后的初始化配置,主要为系统 便捷设置,安全设置以及系统优化
本文安装系统为CentOS-6.3-x86_64-minimal,即CentOS6.3(64位)的最小安装包,和桌面环境安装有些小区别,不过本质是一样的.
安全守则
1. 废除系统所有默认的帐号和密码。
2. 在用户合法性得到验证前不要显示公司题头、在线帮助以及其它信息。
3. 废除“黑客”可以攻击系统的网络服务。
4. 使用6到8位的字母数字式密码。
5. 限制用户尝试登录到系统的次数。
6. 记录违反安全性的情况并对安全记录进行复查。
7. 对于重要信息,上网传输前要先进行加密。
8. 重视专家提出的建议,安装他们推荐的系统“补丁”。
9. 限制不需密码即可访问的主机文件。
10.修改网络配置文件,以便将来自外部的TCP连接限制到最少数量的端口。不允许诸如tftp,sunrpc,printer,rlogin或rexec之类的协议。
11.用upas代替sendmail。sendmail有太多已知漏洞,很难修补完全。
12.去掉对操作并非至关重要又极少使用的程序。
13.使用chmod将所有系统目录变更为711模式。这样,攻击者们将无法看到它们当中有什么东西,而用户仍可执行。
14.只要可能,就将磁盘安装为只读模式。其实,仅有少数目录需读写状态。
15.将系统软件升级为最新版本。老版本可能已被研究并被成功攻击,最新版本一般包括了这些问题的补救。
CentOS 已经发布了6.3版了,现在已经可以用在生产环境了,新版本的内核也能更好的利用硬件。
写了一个脚本,用来初始化系统环境,现在分享出来,你可以根据自己的需要,对脚本进行相应的修改。
说明:脚本中变量publick_Key的内容,请参考这两篇文章自行创建和替换。
ssh证书登录(实例详解):http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646346.html
SecureCRT创建公钥图文教程:http://blog.lihaixin.name/2011/02/securecrt-create-public-key.html
以下脚本是针对CentOS6.x 64位系统,5.x系统的设置类似,做相应的修改即可。
脚本的内容如下:
#!/bin/bash
# -------------------------------------------------------------------------------
# Filename: system_init_shell.sh
# Revision: 1.3
# Date: 2012/09/16
# Author: 三木
# Email: linmaogan#gmail.com
# Website: www.3mu.me
# Description: CentOS6.3系统新安装后的初始设置
# Notes: 需要切换到root运行,版本针对64位系统,操作系统为CentOS6.3
# 先设置网络临时可以访问,通过FTP上传本文件,然后再执行批处理
# -------------------------------------------------------------------------------
# Copyright: 2012 (c) 三木
# License: GPL
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# you should have received a copy of the GNU General Public License
# along with this program (or with Nagios);
#
# Credits go to Ethan Galstad for coding Nagios
# If any changes are made to this script, please mail me a copy of the changes
# -------------------------------------------------------------------------------
#Version 1.0
#2012-09-06 三木 初始版本建立
#Version 1.1
#2012-09-09 三木 增加系统版本检测
#2012-09-09 三木 增加时间设置
#2012-09-09 三木 重写大部份代码
#Version 1.2
#2012-09-10 三木 增加设置系统时间功能
#2012-09-10 三木 增加运行脚本前的root用户判断
#Version 1.3
#2012-09-16 三木 修复系统版本判断的bug
#2012-09-16 三木 所有设置项目增加是否已经设置的判断
#2012-09-16 三木 增加禁止Ping和内核优化等设置
# -------------------------------------------------------------------------------
#检查是否是root用户######################################################################
if [ $(id -u) != "0" ]; then
echo "Error: You must be root to run this script, please use root to run"
exit 1
fi
#系统版本检测############################################################################
platform=`uname -i`
if [ $platform != "x86_64" ];then
echo "this script is only for 64bit Operating System !"
exit 1
fi
echo "the platform is ok"
version=`more /etc/redhat-release |awk '{print substr($3,1,1)}'`
if [ $version != 6 ];then
echo "this script is only for CentOS 6 !"
exit 1
fi
cat << EOF
+---------------------------------------+
| your system is CentOS 6 x86_64 |
| start optimizing....... |
+---------------------------------------+
EOF
#变量设置###############################################################################
#default users who are administrators
ADMIN_USER="test1 test2 test3"
#set the default password for administrators,it will be changed when user first login
DEFAULT_PASSWD='123456'
#管理员电子邮箱
email=test1@gmail.com #yourname@yourserver.com
#SRV_TEMP keep result from chkconfig command
SRV_TEMP="/tmp/chkconfig_list.tmp"
#定义所要删除的用户
USER_DEL="adm lp sync shutdown halt mail news uucp operator games gopher ftp"
#定义所要删除的用户组
GROUP_DEL="adm lp mail news uucp games dip pppusers popusers slipusers"
#定义所要保留的服务,其它服务将被停止,可以根据实际服务器应用更改
SRV_ON="crond irqbalance microcode_ctl network sshd syslog" #add services to this VARIABLES if you want to start them when linux start
# the libs files will be used later
INSTALL_LIBS="gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel nss_ldap openldap openldap-devel openldap-clients libxslt-devel libevent-devel libtool-ltdl bison libtool vim-enhanced"
# the softs will be used later
INSTALL_SOFTS="wget sed tar unzip lrzsz sudo"
DONE="\e[0;32m\033[1mdone\e[m"
#远程连接公钥Publick Key内容
publick_Key='ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDaDrVJt/mO/eIW1LbH+l4ZqI51g+lrcaHABOGplr/X70U4u3cdHs0fFcwWH9KTqqF4pOVeUWrh4B5A/oJOF4vg8+oKuKL7yJQ/GGmk0ccab9PuOn4U+ZONE9sQub0MEcu0u2uU0OjBYA6CkBOL22Wo+QUwBkpjTSfwXQCruJBHYxD8TtX6QJxBaTRUEN0IjyQjWZhnKsOtzKi5yZ0HGC5jY2OvjU+w49nv9dpZUq5mJjCYhgX38RiKjTzXzDXoZhJfCR9ibnS6KwGqSVCCl4hVpfJPu257jxy6IayMRfKAV3zpmTuKT5QXUGXZ440XwWBPqoRq73kMo1Mb7jNjo+DF'
#先设置网络临时可以访问#################################################################
#ifconfig eth0 192.168.1.122 netmask 255.255.255.0
#route add default gw 192.168.1.1 #添加默认路由
#vi /etc/resolv.conf #配置DNS
#将nameserver 192.168.1.1加入文本
#设置网络##############################################################################
#修改IP地址
#sed -i 's/dhcp/static/g
#s/no/yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
#echo 'IPADDR=192.168.1.101
#NETMASK=255.255.255.0
#IPV6INIT="no"
#IPV6_AUTOCONF="no"' >> /etc/sysconfig/network-scripts/ifcfg-eth0
#修改网关
#echo 'GATEWAY=192.168.1.1' >> /etc/sysconfig/network
#修改DNS
#sed -i 's/nameserver/#nameserver/g' /etc/resolv.conf
#echo 'nameserver 192.168.1.1' >> /etc/resolv.conf
#重启服务
#service network restart
#安装常用类库##########################################################################
#可以根据需要打开此项,因为我后面的安装都是通过yum安装,所以不需打开此项
#yum -y install ${INSTALL_LIBS} 1>/dev/null
#echo -e "Install the usual libs ${DONE}."
#安装wget等常用工具####################################################################
#yum -y install ${INSTALL_SOFTS} 1>/dev/null 此种方式将看不到任何输出,如果网速太慢还以为脚本卡死了
yum -y install ${INSTALL_SOFTS}
sleep 10
echo “install ${INSTALL_SOFTS} ...”
echo -e "Install the usual softs ${DONE}."
#更新yum源#############################################################################
#将默认源换为什么163源
if cat /etc/yum.repos.d/CentOS-Base.repo |awk -F: '{print $1}'|grep '163.com' 2>&1 >/dev/null
then
echo -e "163 Yum has been \e[0;32m\033[1madded\e[m."
else
mv /etc/yum.repos.d/CentOS-Base.repo{,.bak}
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo -O /etc/yum.repos.d/CentOS-Base.repo
echo -e "Install 163 source ${DONE}."
fi
#增加第三方资源库#######################################################################
#配置yum第三方资源库 主要作用是官方没有的包 会去第三方查找相关的包
#增加epel源
if [ ! -e /etc/yum.repos.d/epel.repo ]
then
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm 1>/dev/null
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
echo -e "Install EPEL source ${DONE}."
fi
#增加RPMforge源
if [ ! -e /etc/yum.repos.d/rpmforge.repo ]
then
rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm 1>/dev/null
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
echo -e "Install EPEL source ${DONE}."
fi
#root邮件的发送########################################################################
if cat /etc/aliases |awk -F: '{print $2}'|grep $email 2>&1 >/dev/null
then
echo -e "Email has been \e[0;32m\033[1madded\e[m."
else
echo "root: $email" >> /etc/aliases
#重建aliasesdb,让刚刚设定的内容生效
newaliases
#发送测试邮件给root
echo test | mail root
echo -e "Set mail ${DONE}."
fi
#建立一般用户##########################################################################
#add default administrators
for ADMIN in ${ADMIN_USER}
do
if cat /etc/passwd |awk -F: '{print $1}'|grep ${ADMIN} 2>&1 >/dev/null
then
echo -e "User ${ADMIN} has been \e[0;32m\033[1madded\e[m."
else
#add new user, change password when user login
useradd ${ADMIN}
echo "${DEFAULT_PASSWD}" | passwd --stdin ${ADMIN} 2>&1 >/dev/null
usermod -L ${ADMIN}
chage -d 0 ${ADMIN}
usermod -U ${ADMIN}
echo -e "Add User \e[0;32m\033[1m${ADMIN}\e[m done."
#add user to sudoers file
echo "${ADMIN} ALL=(ALL) ALL" >> /etc/sudoers
fi
done
#将一般用户 $name 加在管理员组wheel组中,使用此方式切换到root用户不安全,已在上方使用sudo代替
#usermod -G wheel $name
#sed -i '/pam_wheel.so use_uid$/s/#//' /etc/pam.d/su
#echo "SU_WHEEL_ONLY yes" >> /etc/login.defs
#关闭不需要的服务######################################################################
#需要保留的服务crond , irqbalance , microcode_ctl ,network , sshd ,syslog
#关闭服务器上非必须的系统服务项,并不适用于所有服务器,比如如果是文件服务器则NFS相关服务则不能关闭
# close all services and set necessary services on
chkconfig --list | awk '{print $1}' > ${SRV_TEMP}
# close all services
while read SERVICE
do
chkconfig --level 345 ${SERVICE} off 1>/dev/null
done < ${SRV_TEMP}
#open necessary services
for SRVS in ${SRV_ON}
do
if [ -e /etc/init.d/${SRVS} ]
then
chkconfig --level 345 ${SRVS} on 1>/dev/null
else
echo -e "Service ${SRVS} is \e[0;31m\033[1mnot exits\e[m."
fi
done
#check if the server is vmware virtual machine
chkconfig --list|grep vmware* 2>&1 /dev/null
GREP_STATUS=$?
if [[ ${GREP_STATUS} == 0 ]]
then
chkconfig --level 345 vmware on 1>/dev/null
chkconfig --level 345 vmware-USBArbitrator on 1>/dev/null
chkconfig --level 345 vmware-workstation-server on 1>/dev/null
chkconfig --level 345 vmware-wsx-server on 1>/dev/null
chkconfig --level 345 vmamqpd on 1>/dev/null
fi
echo -e "Stop unnecessary services ${DONE}."
#关闭SELINUX###########################################################################
if cat /etc/selinux/config |awk -F: '{print $1}'|grep 'SELINUX=disabled' 2>&1 >/dev/null
then
echo -e "SELinux has been \e[0;32m\033[1madded\e[m."
else
sed -i 's/SELINUX=enforcing/#SELINUX=enforcing/g
s/SELINUXTYPE=targeted/#SELINUXTYPE=targeted/g
$a\SELINUX=disabled' /etc/selinux/config
echo -e "Set SELinux disabled ${DONE}."
fi
#shutdown -r now #重启系统
#set LANG en_US.UTF-8##################################################################
if cat /etc/sysconfig/i18n |awk -F: '{print $1}'|grep 'en_US.UTF-8' 2>&1 >/dev/null
then
echo -e "Lang has been \e[0;32m\033[1madded\e[m."
else
sed -i s/LANG=.*$/LANG=\"en_US.UTF-8\"/ /etc/sysconfig/i18n
echo -e "Set LANG en_US.UTF-8 ${DONE}."
fi
#系统时间设置##########################################################################
#Set timezone
if [ ! -L /etc/localtime ]
then
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
yum install -y ntp
ntpdate -d 0.asia.pool.ntp.org
date
echo -e "Time ntpdate set ${DONE}."
fi
#将ctrl alt delete键进行屏蔽###########################################################
#禁止使用Ctrl+Alt+Del快捷键,防止误操作的时候服务器重启
if cat /etc/init/control-alt-delete.conf |awk -F: '{print $1}'|grep '#exec /sbin/shutdown' 2>&1 >/dev/null
then
echo -e "Ctrl+Alt+Del has been \e[0;32m\033[1madded\e[m."
else
sed -i 's#exec /sbin/shutdown -r now#\#exec /sbin/shutdown -r now#' /etc/init/control-alt-delete.conf
echo -e "Set ctrl alt delete disabled ${DONE}."
fi
#禁用IPv6,提升网络性能################################################################
if [ ! -e /etc/modprobe.d/ipv6.conf ]
then
cat > /etc/modprobe.d/ipv6.conf << EOFI
alias net-pf-10 off
options ipv6 disable=1
EOFI
echo "NETWORKING_IPV6=off" >> /etc/sysconfig/network
echo -e "Set IPv6 disabled ${DONE}."
fi
#配置远程登陆工具openssh###############################################################
if cat /etc/ssh/sshd_config |awk -F: '{print $1}'|grep 'UseDNS no' 2>&1 >/dev/null
then
echo -e "ssh has been \e[0;32m\033[1madded\e[m."
else
#禁止root用户通过ssh远程登陆,本脚本执行完成后再单独运行此命令,防止操作过程中突然中断远程连接
#sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
#大家结合自己的情况设置,我这里设置能3个用户同时通过ssh登陆
sed -i 's/#MaxStartups 10/MaxStartups 5/' /etc/ssh/sshd_config
#它的作用禁止用户通过密码的方式进行远程登陆保存并退出
#sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
#禁用GSSAPI来认证,也禁用DNS反向解析,加快SSH登陆速度
sed -i 's/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/' /etc/ssh/sshd_config
sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
#service sshd restart 或者 /etc/init.d/sshd restart(ssh服务器重启)
echo -e "set ssh ${DONE}."
fi
#配置用户远程登陆的方式################################################################
for ADMIN in ${ADMIN_USER}
do
if [ ! -e /home/${ADMIN} ]
then
mkdir -p /home/${ADMIN}/.ssh #建立$name用户公钥存放目录
#建立公钥文件,并复制附件中建立公钥教程中产生公钥的文本保存到公钥文件中
echo $publick_Key > /home/${ADMIN}/.ssh/authorized_keys
chown ${ADMIN}.${ADMIN} -R /home/${ADMIN}/ #更改$name用户目录的权限,使得test用户拥有访问.ssh目录和目录下文件的权限
chmod 700 /home/${ADMIN}/.ssh #.ssh目录只准$name用户有读写执行的权限
chmod 600 /home/${ADMIN}/.ssh/authorized_keys #authorized_keys文件只准$name用户具有读写权限
echo -e "User ${ADMIN} publick_Key Add \e[0;32m\033[1m${ADMIN}\e[m done."
fi
done
#/etc/init.d/ssh restart
#用户管理##############################################################################
#删除系统默认创建用户,常用服务器中基本不使用的一些帐号,但是这些帐号常被黑客利用和攻击服务器
if [ ! -e /etc/passwd.bak ]
then
#修改之前先备份
cp /etc/passwd /etc/passwd.bak
for i in $USER_DEL ;do
userdel $i ;done
echo -e "Set userdel ${DONE}."
fi
#删除系统默认创建组
if [ ! -e /etc/group.bak ]
then
#修改之前先备份
cp /etc/group /etc/group.bak
for i in $GROUP_DEL ;do
groupdel $i ;done
echo -e "Set groupdel ${DONE}."
fi
#增加自动注销帐号功能####################################################################
#root用户拥有最高权限,能够在服务器上做任何事情,当我们登陆过后,忘记注销了,将被别人利用,产生重大的安全隐患。应该让系统拥有自动注销功能。
#修改history命令记录
if cat /etc/profile |awk -F: '{print $1}'|grep 'TMOUT=300' 2>&1 >/dev/null
then
echo -e "TMOUT has been \e[0;32m\033[1madded\e[m."
else
sed -i 's/HISTSIZE=1000/HISTSIZE=1000 TMOUT=300/
s/HISTSIZE=1000/HISTSIZE=50/' /etc/profile
echo -e "Set TMOUT ${DONE}."
fi
#存放用户名密码的系统文件加锁############################################################
#这里使用chattr是改变文件属性,若不通过chattr -i 文件名,命令解锁的话,即使root用户也无法修改它,查看文件是否加锁方法:lsattr 文件名
#文件加上不可更改属性,从而防止非授权用户获得权限
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/gshadow
chattr +i /etc/group
chattr +i /etc/services #给系统服务端口列表文件加锁,防止未经许可的删除或添加服务
#lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/services #显示文件的属性
#注意:执行以上权限修改之后,就无法添加删除用户了。
#如果再要添加删除用户,需要先取消上面的设置,等用户添加删除完成之后,再执行上面的操作
#chattr -i /etc/passwd #取消权限锁定设置
#chattr -i /etc/shadow
#chattr -i /etc/group
#chattr -i /etc/gshadow
#chattr -i /etc/services #取消系统服务端口列表文件加锁
#现在可以进行添加删除用户了,操作完之后再锁定目录文件
echo -e "Set chattr ${DONE}."
#安装Denyhosts防止暴力破解FTP/SSH等服务,自动封IP#########################################
#解封直接清除掉/etc/hosts.deny文件中对应的IP即可"echo '' > /etc/hosts.deny"
if [ ! -e /etc/hosts.deny ]
then
yum -y install denyhosts
service denyhosts start
chkconfig --levels 345 denyhosts on
echo -e "Set Denyhosts ${DONE}."
fi
#更改系统的一些重要文件的权限#############################################################
chmod 700 -R /etc/init.d/ #修改init目录文件执行权限,禁止非root用户执行/etc/init.d/下的系统命令
chmod 600 /etc/grub.conf #修改系统引导文件的权限
chattr +i /etc/grub.conf #对系统引导文件加锁
chattr +i /etc/service #对系统服务端口列表文件加锁
chmod a-s /usr/bin/chage #修改部分系统文件的SUID和SGID的权限
chmod a-s /usr/bin/gpasswd
chmod a-s /usr/bin/wall
chmod a-s /usr/bin/chfn
chmod a-s /usr/bin/chsh
chmod a-s /usr/bin/newgrp
chmod a-s /usr/bin/write
chmod a-s /usr/sbin/usernetctl
chmod a-s /bin/traceroute
chmod a-s /bin/mount
chmod a-s /bin/umount
chmod a-s /bin/ping
chmod a-s /sbin/netreport
chattr +a .bash_history #避免删除.bash_history或者重定向到/dev/null
chattr +i .bash_history
chmod 700 /usr/bin #恢复 chmod 555 /usr/bin
chmod 700 /bin/ping #恢复 chmod 4755 /bin/ping
chmod 700 /usr/bin/vim #恢复 chmod 755 /usr/bin/vim
chmod 700 /bin/netstat #恢复 chmod 755 /bin/netstat
chmod 700 /usr/bin/tail #恢复 chmod 755 /usr/bin/tail
chmod 700 /usr/bin/less #恢复 chmod 755 /usr/bin/less
chmod 700 /usr/bin/head #恢复 chmod 755 /usr/bin/head
chmod 700 /bin/cat #恢复 chmod 755 /bin/cat
chmod 700 /bin/uname #恢复 chmod 755 /bin/uname
chmod 500 /bin/ps #恢复 chmod 755 /bin/ps
echo -e "Set SUID AND SGID ${DONE}."
#关闭多余的虚拟控制台#####################################################################
#我们知道从控制台切换到 X 窗口,一般采用 Alt-F7 ,为什么呢?因为系统默认定义了 6 个虚拟控制台,
#所以 X 就成了第7个。实际上,很多人一般不会需要这么多虚拟控制台的,修改/etc/inittab ,注释掉那些你不需要的。
#系统如果是最小化安装,没有这部份内容,这段代码可以不用执行
if [ ! -e /etc/inittab.bak ]
then
cp /etc/inittab /etc/inittab.bak
sed -i 's/2:2345/#2:2345/
s/3:2345/#3:2345/
s/4:2345/#4:2345/
s/5:2345/#5:2345/
s/6:2345/#6:2345/' /etc/inittab
fi
#1:2345:respawn:/sbin/mingetty tty1 只保留第一个
#删除MySQL历史记录########################################################################
#用户登陆数据库后执行的SQL命令也会被MySQL记录在用户目录的.mysql_history文件里。
#如果数据库用户用SQL语句修改了数据库密码,也会因.mysql_history文件而泄漏。
#所以我们在shell登陆及备份的时候不要在-p后直接加密码,而是在提示后再输入数据库密码。
#另外这两个文件我们也应该不让它记录我们的操作,以防万一。
cd
if [ ! -e .bash_history.bak ]
then
cd
cp .bash_history .bash_history.bak #备份
cp .mysql_history .mysql_history.bak
rm .bash_history .mysql_history
ln -s /dev/null .bash_history
ln -s /dev/null .mysql_history
fi
#隐藏服务器系统信息#######################################################################
#在缺省情况下,当你登陆到linux系统,它会告诉你该linux发行版的名称、版本、内核版本、服务器的名称。
#为了不让这些默认的信息泄露出来,我们要进行下面的操作,让它只显示一个"login:"提示符。
#删除/etc/issue和/etc/issue.net这两个文件,或者把这2个文件改名,效果是一样的。
if [ ! -e /etc/issue.bak ]
then
mv /etc/issue /etc/issue.bak
mv /etc/issue.net /etc/issue.net.bak
fi
#优化Linux内核参数########################################################################
if [ ! -e /etc/sysctl.conf.bak ]
then
cp /etc/sysctl.conf /etc/sysctl.conf.bak
echo 'net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
#net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 10024 65535' >> /etc/sysctl.conf #(表示用于向外连接的端口范围。缺省情况下很小:32768到61000 #注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口! )
/sbin/sysctl -p #使配置立即生效
fi
#CentOS 系统优化##########################################################################
if [ ! -e /etc/profile.bak2 ]
then
cp /etc/profile /etc/profile.bak2
echo 'ulimit -c unlimited
ulimit -s unlimited
ulimit -SHn 65535' >> /etc/profile
source /etc/profile #使配置立即生效
ulimit -a #显示当前的各种用户进程限制
fi
#服务器禁止ping###########################################################################
if [ ! -e /etc/rc.d/rc.local.bak ]
then
cp /etc/rc.d/rc.local /etc/rc.d/rc.local.bak
echo 'echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all' >> /etc/rc.d/rc.local
#参数0表示允许 1表示禁止
fi
#对您的系统上所有的用户设置资源限制可以防止DoS类型攻击####################################
#如最大进程数,内存数量等。例如,对所有用户的限制象下面这样:
#下面的代码示例中,所有用户每个会话都限制在 10 MB,并允许同时有四个登录。第三行禁用了每个人的内核转储。第四行除去了用户 bin 的所有限制。
if [ ! -e /etc/security/limits.conf.bak ]
then
cp /etc/security/limits.conf /etc/security/limits.conf.bak
echo '* hard rss 10000
* hard maxlogins 4
* hard core 0
bin -' >> /etc/security/limits.conf
#激活这些限制
echo 'session required /lib/security/pam_limits.so' >> /etc/pam.d/login
fi
#使用yum update更新系统时不升级内核,只更新软件包#########################################
#由于系统与硬件的兼容性问题,有可能升级内核后导致服务器不能正常启动,这是非常可怕的,
#没有特别的需要,建议不要随意升级内核。
if [ ! -e /etc/yum.conf.bak ]
then
cp /etc/yum.conf /etc/yum.conf.bak
echo 'exclude=kernel*' >> /etc/yum.conf
fi
#系统升级#################################################################################
#防止被不小心更改了,或被黑客利用了,导致系统崩溃等问题
/etc/init.d/yum-updatesd stop #停止自动升级工具
yum -y remove yum-updatesd #卸载yum-updatesd工具
yum -y install yum-fastestmirror #安装另外一个自动升级工具,这个工具保证从就近服务器下载安装包
yum clean all
yum makecache #将服务器上的软件包信息缓存到本地,以提高搜索安装软件的速度
yum -y update #系统升级
#reboot #从新启动系统
echo -e "Set update ${DONE}."
#查看系统信息#############################################################################
#输出正在运行的服务
ps aux | wc -l
#输出运行的服务
netstat -na --ip
cat << EOF
+-------------------------------------------------+
| optimizer is done |
| it's recommond to restart this server ! |
+-------------------------------------------------+
EOF
#init done,and reboot system
echo -e "Do you want to \e[0;31m\033[1mreboot\e[m system now? [Y/N]:\t "
read REPLY
case $REPLY in
Y|y)
echo "The system will reboot now ..."
shutdown -r now
;;
N|n)
echo "You must reboot later..."
source /etc/profile
;;
*)
echo "You must input [Y/N]."
source /etc/profile
;;
esac
预设开启及建议开启 的服务列表
|
服务名称 |
建议 |
说明 |
|
acpid |
停用 |
电源进阶设定 |
|
anacron |
需求 |
执行在 crontab 设 定的时间没有执行到的工作 |
|
apmd |
停用 |
侦测系统的电池电量 |
|
atd |
需求 |
at排程服务 |
|
auditd |
停用 |
稽核系统(配合SELinux) |
|
autofs |
停用 |
自动挂载文件系统与外围装置 (如 光盘、USB) |
|
avahi-daemon |
停用 |
当区网没有 DNS 服务时会试着寻找提供 zeroconf 协议的主机 |
|
bluetooth |
停用 |
Bluetooth 蓝 芽 |
|
cpuspeed |
停用 |
控制 CPU 速度主要用来省电 |
|
crond |
需求 |
cron排程服务 |
|
cups |
停用 |
使系统支持打印机 |
|
firstboot |
停用 |
安装完成后第一次启动时的服务 |
|
gpm |
停用 |
文本模式下可使用鼠标 |
|
haldaemon |
停用 |
援 plug and play 装置 |
|
hidd |
停用 |
支持蓝芽装置,例如鼠标,键盘 |
|
ip6tables |
停用 |
IPv6防火墙 |
|
iptables |
启用 |
IPv4防火墙 |
|
irqbalance |
需求 |
多个 CPU 环境当系统中断请求时进行负载平衡的程序 |
|
kudzu |
需求 |
开机会都自动执行硬件侦测 |
|
lvm2-monitor |
需求 |
支持 Logical Volume Manager 逻辑扇区 |
|
mcstrans |
停用 |
配合 SELinux 服务 |
|
mdmonitor |
停用 |
支持 RAID 相关程序 |
|
messagebus |
停用 |
支持 plug and play 装置 |
|
microcode_ctl |
停用 |
支持 Intel IA32 CPU 特色,所以 AMD CPU 不需要 |
|
netfs |
停用 |
Network File System Mounter 网络挂载系统 (如 NFS、Samba、NCP) |
|
network |
启用 |
网络服务 |
|
nfslock |
停用 |
支持 NFS Server 数据一致性功能 |
|
pcscd |
停用 |
支援 Smart Card |
|
portmap |
停用 |
支援 NFS Service |
|
rawdevices |
停用 |
可连接raw device装置 |
|
readahead_early |
启用 |
启动时预先将相关档案读到内存内来加快启动速度 |
|
restorecond |
停用 |
支持 SELinux 监控档案状态 |
|
rpcgssd |
停用 |
支援 NFSv4 Service |
|
rpcidmapd |
停用 |
支援 NFSv4 Service |
|
sendmail |
启用 |
SMTP发信协议服务 |
|
smartd |
需求 |
支持检查硬盘状态 (Hardware RAID 要改配置文件) |
|
sshd |
启用 |
支持SSH Service远程连入 |
|
syslog |
启用 |
系统记录文件服务 |
|
yum-updatesd |
停用 |
YUM自动更新服务 |
参考资料:
CentOS系统安全配置指南:http://www.ithov.com/linux/119268_2.shtml
CentOS系统初始化脚本:http://waydee.blog.51cto.com/4677242/840271
linux常见服务介绍:http://gehailong.blog.51cto.com/765312/268432
太感谢了