在开始安装前先准备好安装包(红色文件部分,版本号随意)
一、用root用户连接上主机
二、禁用SELinux
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g‘ /etc/selinux/config #在 /etc/selinux/config 文件里把SELINUX=enforcing替换为SELINUX=disabled,重启生效 setenforce 0 #临时把SElinux关闭,不需要重启
三、安装前准备
这里博主建议用新安装的系统来编译安装LAMP,不然因为一些残留文件/服务之类的东西会发生奇怪的事。
虽然建议用新安装的系统,但是还是使用下面的命令清理掉一些东西,并且更新下通过yum安装的程序。
rpm -e --nodeps httpd rpm -e --nodeps mysql rpm -e --nodeps php #用rpm卸载以上3个包,-e表示卸载,--nodeps表示忽略检查依赖性 yum -y remove httpd yum -y remove mysql yum -y remove php #用yum卸载以上3个包,-y表示有问题是全部选yes yum -y update #更新所有使用yum安装的包 yum -y install wget autoconf automake bison bzip2 bzip2-devel curl curl-devel cmake cpp crontabs diffutils elinks e2fsprogs-devel expat-devel file flex freetype-devel gcc gcc-c++ gd glibc-devel glib2-devel gettext-devel gmp-devel icu kernel-devel libaio libtool-libs libjpeg-devel libpng-devel libxslt libxslt-devel libxml2 libxml2-devel libidn-devel libcap-devel libtool-ltdl-devel libc-client-devel libicu libicu-devel lynx make mlocate ncurses-devel openldap openldap-devel openssl openssl-devel patch pam-devel pcre pcre-devel perl-DBD-MySQL readline readline-devel sendmail unzip vim vim-minimal zip zlib-devel #安装必须的环境
下载、编译、语法工具,浏览器等:wget autoconf automake bison curl cmake cpp crontabs diffutils elinks file gcc gcc-c++ icu libaio libtool-libs libxslt libxml2 libicu lynx make mlocate openldap patch pcre perl-DBD-MySQL readline sendmail vim-minimal
压缩工具:bzip2 unzip zip
开发库:bzip2-devel curl-devel e2fsprogs-devel expat-devel freetype-devel glibc-devel glib2-devel gettext-devel gmp-devel kernel-devel libjpeg-devel libpng-devel libxslt-devel libxml2-devel libidn-devel libcap-devel libtool-ltdl-devel libc-client-devel libicu-devel ncurses-devel openldap-devel openssl-devel pam-devel pcre-devel readline-devel zlib-devel
Apache所需:flex +开发库
PHP所需:gd openssl +开发库
四、安装pcre
可以在pcre的sourceforge下载最新版pcre,文件格式为pcre-版本.tar.gz。本文以pcre-8.36为例,使用时请使用最新版,命令只要替换版本号就行了。
cd /usr/local/src wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.36/pcre-8.36.tar.gz tar -zxf pcre-8.36.tar.gz cd pcre-8.36 ./configure --prefix=/usr/local/pcre make make install
如果你的系统是64位系统,还需要执行以下内容:(如果系统中有lib64文件夹,则说明是64位系统)
ln -s /usr/local/pcre/lib /usr/local/pcre/lib64
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。
通过./configure –help可以查看更多编译选项。
五、下载编译安装Apache2.4
Apache2.4版本和Apache2.2版本的编译安装不太一样, Apache2.4需要两个依赖包:apr 和 apr-util,而Apache2.2则不需要。
Apache可移植运行时( Apache Portable Runtime,简称APR)是Apache HTTP服务器的支持库,提供了一组映射到下层操作系统的API。如果操作系统不支持某个特定的功能,APR将提供一个模拟的实现。
可以在apr的官网下载最新版apr和apr-util,文件格式为apr-版本.tar.gz和apr-util-版本.tar.gz,在httpd的官网下载最新版Apache,文件格式为httpd-版本.tar.gz,官网下不动可以选择镜像下载。本文以apr-1.5.1、apr-util-1.5.4和httpd-2.4.10为例,使用时请使用最新版,命令只要替换版本号就行了。本文Apache安装在/usr/local/apache里。
cd /usr/local/src wget http://mirrors.hust.edu.cn/apache/apr/apr-1.5.1.tar.gz wget http://mirrors.hust.edu.cn/apache/apr/apr-util-1.5.4.tar.gz wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.4.10.tar.gz tar -zxf apr-1.5.1.tar.gz tar -zxf apr-util-1.5.4.tar.gz tar -zxf httpd-2.4.10.tar.gz mv apr-1.5.1 httpd-2.4.10/srclib/apr mv apr-util-1.5.4 httpd-2.4.10/srclib/apr-util cd httpd-2.4.10 ./configure \ --prefix=/usr/local/apache \ --with-pcre=/usr/local/pcre \ --with-mpm=prefork \ --with-included-apr \ --enable-so \ --enable-dav \ --enable-deflate=shared \ --enable-ssl=shared \ --enable-expires=shared \ --enable-headers=shared \ --enable-rewrite=shared \ --enable-static-support \ --enable-modules=all \ --enable-mods-shared=all make make install
shared表示动态加载这些模块,如果没有–enable-mods-shared=all,那么这些模块就是静态加载的。静态加载的模块是通过<ifmodule></ifmodule>来配置,动态使用LoadMoule来加载。所以说动态加载更加方便,但是官方说会有大约5%的性能损失。
可以使用./configure –help | grep disable来查看哪些模块是默认会加载的,默认会加载的就可以不用再次编译。
要查看编译的参数,请点此进入官方Apache2.4的手册,手册的内容比较容易,一般都看得懂(通过Google翻译)。
六、设置Apache
经过第五步已经把Apache安装完成了,接下来要把Apache的文件复制到/etc/init.d/里,还要注册服务,编辑Apache的配置文件,设置Apache目录等。Apache网站的默认目录是/data/www/default/。
cp -f /usr/local/apache/bin/apachectl /etc/init.d/httpd #拷贝文件到init.d里 sed -i ‘2a # chkconfig: - 85 15‘ /etc/init.d/httpd sed -i ‘3a # description: Apache is a World Wide Web server. It is used to server‘ /etc/init.d/httpd #想要将Apache作为服务启动必须要这两句,不要问为什么,它就是这样的 chmod +x /etc/init.d/httpd #为httpd文件设置可执行权限,虽然通过ll发现在执行前httpd已经有可执行权限了,但是还是加上吧 chkconfig --add httpd #将httpd设置为服务 chkconfig httpd on #将httpd的2、3、4、5运行级设置为On,即开机启动 rm -rf /etc/httpd ln -s /usr/local/apache/ /etc/httpd #/etc/httpd为运行目录 cd /usr/sbin/ ln -fs /usr/local/apache/bin/httpd ln -fs /usr/local/apache/bin/apachectl #将这两个文件链接过来,以适应init.d脚本 cd /var/log rm -rf httpd/ ln -s /usr/local/apache/logs httpd #将日志链接到log目录 groupadd apache useradd -g apache -s /sbin/nologin apache #添加apache组和apache用户 mkdir -p /data/www/default/ chmod -R 755 /data/www/default/ #创建apache的默认目录,并设置权限
接下来就是配置Apache的配置文件了。
注:以下配置shell为本人自己写的,亲测有效,全复制下来黏贴就行,请不要多次运行。
#先配置/usr/local/apache/conf/httpd.conf文件 cp -f /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak sed -i ‘s@^#LoadModule\(.*\)mod_deflate.so@LoadModule\1mod_deflate.so@‘ /usr/local/apache/conf/httpd.conf sed -i ‘s@^#LoadModule\(.*\)mod_expires.so@LoadModule\1mod_expires.so@‘ /usr/local/apache/conf/httpd.conf sed -i ‘s@^#LoadModule\(.*\)mod_ssl.so@LoadModule\1mod_ssl.so@‘ /usr/local/apache/conf/httpd.conf sed -i ‘s@^#LoadModule\(.*\)mod_rewrite.so@LoadModule\1mod_rewrite.so@‘ /usr/local/apache/conf/httpd.conf sed -i ‘s@^User daemon@User apache@‘ /usr/local/apache/conf/httpd.conf sed -i ‘s@^Group daemon@Group apache@‘ /usr/local/apache/conf/httpd.conf sed -i ‘s/^ServerAdmin you@example.com/ServerAdmin admin@localhost/‘ /usr/local/apache/conf/httpd.conf sed -i ‘s@^#ServerName www.example.com:80@ServerName localhost@‘ /usr/local/apache/conf/httpd.conf sed -i ‘/^<Directory \/>/a\ Options FollowSymLinks\ AllowOverride none\ delttionya‘ /usr/local/apache/conf/httpd.conf sed -i ‘/delttionya/,+2d‘ /usr/local/apache/conf/httpd.conf sed -i "s@^DocumentRoot.*@DocumentRoot \"/data/www/default\"@" /usr/local/apache/conf/httpd.conf sed -i "s@^<Directory \"/usr/local/apache/htdocs\">@<Directory \"/data/www/default\">@" /usr/local/apache/conf/httpd.conf sed -i ‘s@Options Indexes FollowSymLinks@Options +Includes -Indexes@‘ /usr/local/apache/conf/httpd.conf sed -i ‘s@DirectoryIndex index.html@DirectoryIndex index.php index.html@‘ /usr/local/apache/conf/httpd.conf sed -i ‘s@^ErrorLog \"logs/error_log\"@ErrorLog \"| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/error_log%Y%m%d.log 86400 480\"@‘ /usr/local/apache/conf/httpd.conf sed -i ‘s@CustomLog \"logs/access_log\" common@CustomLog \"| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log%Y%m%d.log 86400 480\" common@‘ /usr/local/apache/conf/httpd.conf sed -i "s@AddType\(.*\)Z@AddType\1Z\n AddType application/x-httpd-php .php .phtml\n AddType application/x-httpd-php-source .phps@" /usr/local/apache/conf/httpd.conf sed -i ‘s@^#Include conf/extra/httpd-mpm.conf@Include conf/extra/httpd-mpm.conf@‘ /usr/local/apache/conf/httpd.conf sed -i ‘s@^#Include conf/extra/httpd-vhosts.conf@Include conf/extra/httpd-vhosts.conf@‘ /usr/local/apache/conf/httpd.conf sed -i ‘s@^#Include conf/extra/httpd-default.conf@Include conf/extra/httpd-default.conf@‘ /usr/local/apache/conf/httpd.conf cat >> /usr/local/apache/conf/httpd.conf <<EOF ServerTokens ProductOnly ServerSignature Off EOF #接下来配置/usr/local/apache/conf/extra/httpd-vhosts.conf文件 rm -f /usr/local/apache/conf/extra/httpd-vhosts.conf cat > /usr/local/apache/conf/extra/httpd-vhosts.conf << EOF <VirtualHost *:80> DocumentRoot "/data/www/default/" ServerName localhost DirectoryIndex index.php index.html <Directory "/data/www/default/"> Options +Includes -Indexes Require all granted AllowOverride All </Directory> </VirtualHost> EOF #再配置/usr/local/apache/conf/extra/httpd-default.conf文件 sed -i ‘s@Timeout 60@Timeout 120@‘ /usr/local/apache/conf/extra/httpd-default.conf sed -i ‘s@MaxKeepAliveRequests 100@MaxKeepAliveRequests 1024@‘ /usr/local/apache/conf/extra/httpd-default.conf
更多Apache配置文件内容请见官网。
七、启动,测试Apache
Apache的启动、关闭、重启、状态命令:/etc/init.d/httpd (start|stop|restart|status)
在/data/www/default/创建一个index.html文件,写上一段话,开启httpd服务,如果能显示这段话,那么表示Apache安装启动成功。
cat > /data/www/default/index.html << EOF <html><head></head><body>Success!</body></html> EOF #写一个HTML页面 /etc/init.d/httpd start #启动Apache sed -i ‘/^-A INPUT\(.*\) 22 \(.*\)/a\ -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT‘ /etc/sysconfig/iptables /etc/init.d/iptables restart #对80端口添加防火墙规则,上面的22表示在ssh的22端口下面添加这条规则,如果改变了ssh端口,请把22改成你的ssh端口,不然会无法添加
注:为避免出现没有添加到防火墙规则的情况出现,这里执行完以后请再执行一下 cat /etc/sysconfig/iptables 命令,看里面有没有 -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT 这句规则,若没有,请使用 vim /etc/sysconfig/iptables 命令进入vim,按下字母a进入编辑模式,在连接SSH的端口下另起一行添加 -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT 这条规则。
访问你的网站的IP,如果出现Success!字样,表示安装启动成功。
一、用root用户连接上主机
二、下载Mysql Community Server
可以在Mysql的官网下载最新版Mysql(GA)版,在选择时选“Source Code”,找到最下面的“Generic Linux”,文件格式为mysql-版本.tar.gz。本文以mysql-5.6.21为例,使用时请使用最新版,命令只要替换版本号就行了。
cd /usr/local/src wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.21.tar.gz tar -zxf mysql-5.6.21.tar.gz
三、编译安装Mysql Community Server
Mysql的编译安装时间比较长,大概整个流程要半个多小时。
我们使用cmake命令编译Mysql,Mysql安装在/usr/local/mysql里。
cd /usr/local/src/mysql-5.6.21 groupadd mysql useradd -s /sbin/nologin -M -g mysql mysql #为mysql添加用户和组 cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_EMBEDDED_SERVER=1 make make install
四、设置Mysql
经过半个多小时的安装,把Mysql装完了,接下来就要配置Mysql了。
chmod +w /usr/local/mysql #使mysql文件夹有写权限,虽然通过ll发现在执行前mysql已经有写权限了,但是还是加上吧 chown -R mysql:mysql /usr/local/mysql #把mysql文件夹的所有者和所有组都设置为mysql cat > /etc/my.cnf << EOF [client] #password = your_password port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 basedir = /usr/local/mysql datadir = /usr/local/mysql/data pid-file = /usr/local/mysql/data/mysql.pid character-set-server = utf8 skip-external-locking key_buffer_size = 16M sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M query_cache_size = 64M query_cache_limit = 4M table_open_cache = 64 skip-name-resolve server-id = 1 #max_connections = 1000 max_allowed_packet = 16M [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout EOF #以上一大段重写了/etc/my.cnf文件 /usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql #初始化配置脚本,添加系统数据库 cp -f /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld #拷贝服务脚本到/etc/init.d/ chmod +x /etc/init.d/mysqld #为mysqld文件设置可执行权限,虽然通过ll发现在执行前mysqld已经有可执行权限了,但是还是加上吧 chkconfig --add mysqld #将mysqld设置为服务 chkconfig mysqld on #将httpd的2、3、4、5运行级设置为On,即开机启动 export PATH=$PATH:/usr/local/mysql/bin echo "export PATH=\$PATH:/usr/local/mysql/bin" >> /etc/profile source /etc/profile #将mysql的可执行文件路径注册到环境变量,即直接输入mysql就能登陆mysql cat > /etc/ld.so.conf.d/mysql.conf << EOF /usr/local/mysql/lib EOF #添加动态库的缓存 ldconfig #使上述更改生效
UPDATE:博主发现,原本的my.cnf会导致mysqld服务无法启动,这情况不是每台服务器都会发生的,我在Azure的服务器上配置完全没问题,但是在DO的服务器上就一直报错。原因是在max_connections = 1000这一条上,这条配置原本是设置Mysql的最大连接数的,但是很奇怪地,它使得我在DO的服务器上的Mysql服务无法启动。不明觉厉啊…
五、启动Mysql
Mysql的启动、关闭、重启、状态命令:/etc/init.d/mysqld (start|stop|restart|status)
/etc/init.d/mysqld start
一般情况下Mysql都能正常启动,至少按照博主的方法来是会成功的,如果有问题请留言。
六、Mysql安全设置
1、为root用户设置密码(必须)
安装的Mysql的root用户默认是空密码,为了安全起见,需要把密码修改为强密码(包含数字、字母大小写、特殊字符,长度大于8个字符)。常用修改方法有如下几种,只需选择一种即可:
#第一种方法 mysqladmin -u root password ttionya #上面的ttionya为root用户的密码,请更改密码为强密码 #第二种方法 mysql <<EOF use mysql; update user set password=password(‘ttionya‘) where user=‘root‘; flush privileges; EOF #上面的ttionya为root用户的密码,请更改密码为强密码
2、先登录上Mysql(必须)
后面的命令就直接可以在mysql下操作了,省得每次都要登陆一遍。
mysql -uroot -pttionya #ttionya请改为上一步你设置的root用户的密码,在-p后面直接跟密码,不需要空格
3、删除默认数据库及用户(必须)
Mysql初始化后会自动生成空用户和test库,进行安装的测试,这些都是不需要的,也有可能会引起安全问题,所以需要将他们全部删除。最后只保留root用户即可,当然以后根据需要可以增加用户和数据库。方法如下:
#以下在mysql内执行 drop database if exists test; use mysql; delete from db; delete from user where not (user=‘root‘); update user set password=password(‘ttionya‘) where user=‘root‘; flush privileges; #第六行的ttionya请改为第一步设置的root用户的密码,因为第一步的第一种方法只会更新Host为localhost的root用户的密码,所以要把密码同步到所有的root用户。若使用的是第一步的第二种方法,那可以删除第六行
其实这一步可以通过运行 mysql_secure_installation 命令实现的,但是我还是喜欢自己配置.
4、只允许localhost连接(建议)
经过前几步的设置,user表中只有3-4个root用户了,他们唯一的区别就是Host字段不同,博主的数据库中有4个root用户,Host字段分别是localhost、127.0.0.1、::1、主机名。他们的区别就是localhost不经过防火墙;127.0.0.1经过防火墙;::1是IPv6的127.0.0.1,也经过防火墙;主机名就不知道了。
想要只保留Host为localhost的root用户,可以执行以下内容:
#以下在mysql内执行 delete from user where not (host=‘localhost‘ and user=‘root‘); flush privileges;
5、更改root用户名(建议)
root用户是Mysql的默认权限最高的用户,由于其权限高,所以也是黑客最喜欢攻击的用户名,建议把root用户名改成其他复杂的用户名,例如cymyxjj之类的?
#以下在mysql内执行 use mysql; update user set user=‘ttionya‘ where user=‘root‘; flush privileges; #第三行的ttionya为你想更改为的用户名,不建议取与域名之类有关的词
6、新建一个无权限的root用户(娱乐向)
这步基于第三步的基础上,即你把root用户的用户名改为了其他用户名,这样你就可以新建一个无权限的root用户,黑客即使登陆上去也什么都做不了。
#以下在mysql内执行 create user ‘root‘ identified by ‘ttionya‘; flush privileges; exit #第二行的ttionya为无权限的root用户的密码 #后面的操作都不需要在mysql内执行了,所以退出mysql
7、关闭Mysql对本地文件的读取(建议)
Mysql提供对本地文件的读取,使用的是load data local infile命令,该选项是默认打开的。该操作令会利用Mysql把本地文件读到数据库中,若黑客读取/etc/passwd文件将非常危险。
假如你不需要读取本地文件,请关闭它。如果想打开它,请将/etc/my.cnf中的local-infile=0删除。
sed -i ‘/^\[mysqld\]/a\ local-infile=0‘ /etc/my.cnf #写入关键词 /etc/init.d/mysqld restart #重新启动Mysql服务
8、关闭远程连接(建议)
一般情况下,Mysql不需要使用远程连接,只是本机使用php脚本进行连接,所以为了安全完全可以把远程连接给关闭,这样就不会监听3306端口了。
因为没有打开防火墙,所以这里会提供打开远程连接和关闭远程连接的方法。
关闭远程连接:
sed -i ‘/^\[mysqld\]/a\ skip-networking‘ /etc/my.cnf #写入关键词 /etc/init.d/mysqld restart #重新启动Mysql服务 iptables -D INPUT `/etc/init.d/iptables status|grep -w 3306|grep -o "^[0-9]\+"` /etc/init.d/iptables save /etc/init.d/iptables restart #删除3306端口的防火墙规则并重启防火墙
打开远程连接:
sed -i ‘/^skip-networking/‘d /etc/my.cnf #将关键词移除 /etc/init.d/mysqld restart #重新启动Mysql服务 sed -i ‘/^-A INPUT\(.*\) 22 \(.*\)/a\ -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT‘ /etc/sysconfig/iptables /etc/init.d/iptables restart #对3306端口添加防火墙规则,上面的22表示在ssh的22端口下面添加这条规则,如果改变了ssh端口,请把22改成你的ssh端口,不然会无法添加
注:为避免出现没有添加到防火墙规则的情况出现,这里执行完以后请再执行一下 cat /etc/sysconfig/iptables 命令,看里面有没有 -A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT 这句规则,若没有,请使用 vim /etc/sysconfig/iptables 命令进入vim,按下字母a进入编辑模式,在连接SSH的端口下另起一行添加 -A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT 这条规则。
9、删除history(必须)
我们使用过的shell命令,都会保存在~/.bash_history里,通过 history 命令可以获得当前用户最近输入的1000条命令。前面我们登陆数据库使用的都是 mysql -uroot -pttionya ,密码被直接记录在~/.bash_history文件里了,这是非常危险的,所以我们需要清空~/.bash_history这个文件。
history -c #清除还未写入.bash_history文件的history记录 rm -f ~/.bash_history #删除root用户的.bash_history文件 rm -f ~/.mysql_history #删除Mysql的记录
之后我们登陆Mysql的时候就不要再让密码出现在shell里了,即通过 mysql -uroot -p 登陆Mysql。
如果你觉得history会记录的历史命令太多,可以改变.bash_history记录的条数。
sed -i ‘/^HISTSIZE=\(.*\)/‘d /etc/profile sed -i ‘/^HISTFILESIZE=\(.*\)/‘d /etc/profile #删除/etc/profile文件里关于history的内容,HISTSIZE是history命令输出的条数,HISTFILESIZE是.bash_history文件储存的命令条数 echo "HISTSIZE=100" >> /etc/profile echo "HISTFILESIZE=200" >> /etc/profile #设置输出条数和储存条数,100和200可自行更改 source /etc/profile #使更改生效 echo "rm -f $HOME/.bash_history" >> ~/.bash_logout echo "rm -f $HOME/.mysql_history" >> ~/.bash_logout echo "rm -f $HOME/.bash_history" >> /etc/skel/.bash_logout echo "rm -f $HOME/.mysql_history" >> /etc/skel/.bash_logout #前两个是使root用户在注销时都删除.bash_history和.mysql_history两个文件,后两个是改变模板文件,以后新建的每个用户都会在注销时删除这两个文件
到这里,Mysql的安全配置就结束了,以后在新建Mysql用户时,要注意用户的权限。
安装PHP
一、用root用户连接上主机
二、安装PHP需要的组件
安装PHP需要的大部分必要组件在安装Apache之前已经安装了, 现在安装上剩余的一部分。
1、安装libiconv(iconv模块)
libiconv是由于有些计算机还在使用当地的传统的字符编码方式,为了顺利支持国际化的处理而存在的,所以仍然有在Unicode和其他的传统编码之间转换的需求。可以在GNU的FTP下载最新版libiconv,文件格式为libiconv-版本.tar.gz。libiconv自2011年就没更新了,最新版本为1.14。若以后更新了,请使用最新版,命令只要替换版本号就行了。
cd /usr/local/src wget http://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz tar -zxf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure --prefix=/usr/local/libiconv make make install
2、安装libmcrypt、mhash、mcrypt(mcrypt模块)
mcrypt模块使PHP可以使用除了自带的几种加密函数外功能更全面的mhash和mcrypt。该模块在默认情况下不开启,所以Linux的PHP自身也不打包该库,需要自行到官方网站下载代码进行编译安装。
可以在libmcrypt的sourceforge下载最新版libmcrypt,文件格式为libmcrypt-版本.tar.gz。libmcrypt自2007年就没更新了,最新版本为2.5.8。若以后更新了,请使用最新版,命令只要替换版本号就行了。
cd /usr/local/src wget http://softlayer-dal.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz tar -zxf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8 ./configure make make install ldconfig cd libltdl/ ./configure --enable-ltdl-install make make install
使用ldconfig是因为安装完成后把libmcrypt作为一个共享组件了,执行命令后共享对象就可以在C/C++开发中被使用了。
可以在mhash的sourceforge下载最新版mhash,文件格式为mhash-版本.tar.gz。mhash自2008年就没更新了,最新版本为0.9.9.9。可以在mcrypt的sourceforge下载最新版mcrypt,文件格式为mcrypt-版本.tar.gz。mcrypt自2008年就没更新了,最新版本为2.6.8。若以后更新了,请使用最新版,命令只要替换版本号就行了。
cd /usr/local/src wget http://tcpdiag.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz wget http://softlayer-dal.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz tar -zxf mhash-0.9.9.9.tar.gz tar -zxf mcrypt-2.6.8.tar.gz cd mhash-0.9.9.9 ./configure make make install cat >> /etc/ld.so.conf.d/local.conf <<EOF /usr/local/lib EOF ldconfig cd ../mcrypt-2.6.8 ./configure make make install
这里博主其实是遇到了问题的,就在mcrypt的./configure那步会出现验证libmcrypt版本失败的情况,博主查找了很多资料,各有各的解决办法,最后博主还是使用了往共享库添加路径的方法解决的。
三、安装PHP5.5
接下来要进行PHP5.5的安装。
不使用PHP5.6是因为有些程序对PHP5.6的兼容性不足。不使用PHP5.4及之前版本是因为博主比较能接受PHP5.5,而且后面的Shell使用了PHP5.5才带的opcache,PHP5.4及之前的版本虽然支持,但是要自行下载,当然也可以去除–enable-opcache来配置。
PHP安装在/usr/local/php里,若先前安装Apache时改变了默认安装路径,需要修改–with-apxs2。Mysql我们将使用PHP的Mysqlnd驱动,所以关于Mysql的编译选项都设置为mysqlnd。
注:若您的内存低于1G,请加上 –disable-fileinfo ,不然编译报错,或者增加Swap分区,若在make时出现not find liconv的报错,请去除make后面的 ZEND_EXTRA_LIBS=’-liconv’。
if [ `getconf WORD_BIT` = ‘32‘ ] && [ `getconf LONG_BIT` = ‘64‘ ] ; then cp -frp /usr/lib64/libldap* /usr/lib fi #这里对64位系统拷贝文件,为了支持ldap ln -s /usr/lib64/libc-client.so /usr/lib/libc-client.so #为了支持imap链接lib64的文件到lib cd /usr/local/src wget http://cn2.php.net/distributions/php-5.5.18.tar.gz tar -zxf php-5.5.18.tar.gz cd php-5.5.18 ./configure \ --prefix=/usr/local/php \ --with-apxs2=/usr/local/apache/bin/apxs \ --with-config-file-path=/usr/local/php/etc \ --with-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-mysql-sock=/tmp/mysql.sock \ --with-pcre-dir=/usr/local/pcre \ --with-iconv-dir=/usr/local/libiconv \ --with-libxml-dir=/usr \ --with-icu-dir=/usr \ --with-mhash \ --with-bz2 \ --with-curl \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --with-gd \ --with-gettext \ --with-gmp \ --with-ldap \ --with-ldap-sasl \ --with-mcrypt \ --with-openssl \ --with-xmlrpc \ --with-xsl \ --with-zlib \ --with-imap \ --with-imap-ssl \ --with-kerberos \ --without-pear \ --enable-opcache \ --enable-bcmath \ --enable-calendar \ --enable-sysvsem \ --enable-exif \ --enable-ftp \ --enable-gd-native-ttf \ --enable-intl \ --enable-mbstring \ --enable-pcntl \ --enable-shmop \ --enable-soap \ --enable-sockets \ --enable-wddx \ --enable-zip make ZEND_EXTRA_LIBS=‘-liconv‘ make install #若内存低于1G,请把 --enable-zip 改为 --enable-zip --disable-fileinfo ,也就是加上 --disable-fileinfo 这项配置 #若编译出现有关于liconv的报错,请去掉 make 后面的ZEND_EXTRA_LIBS=‘-liconv‘ #PHP5.5安装完成 mkdir -p /usr/local/php/etc cp php.ini-production /usr/local/php/etc/php.ini #拷贝配置文件到指定位置
安装完成后,/usr/local/apache/conf/httpd.conf文件不需要再进行修改,PHP会自动增加一行LoadModule。
四、配置PHP5.5
安装完PHP5.5后,还有需要配置php.ini文件,接下来继续配置PHP。
注:以下PHP的配置shell本人亲测有效,全复制下来黏贴就行。
sed -i ‘s@^short_open_tag = Off@short_open_tag = On@‘ /usr/local/php/etc/php.ini sed -i ‘s@^disable_functions.*@disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,pfsockopen@‘ /usr/local/php/etc/php.ini sed -i ‘s@^expose_php = On@expose_php = Off@‘ /usr/local/php/etc/php.ini sed -i ‘s@^allow_url_fopen.*@allow_url_fopen = Off@‘ /usr/local/php/etc/php.ini sed -i ‘s@^max_execution_time.*@max_execution_time = 300@‘ /usr/local/php/etc/php.ini sed -i ‘s@^;upload_tmp_dir.*@upload_tmp_dir = /tmp@‘ /usr/local/php/etc/php.ini sed -i ‘s@^post_max_size.*@post_max_size = 50M@‘ /usr/local/php/etc/php.ini sed -i "s@extension_dir = \"ext\"@extension_dir = \"ext\"\nextension_dir = \"/usr/local/php/lib/php/extensions/`ls /usr/local/php/lib/php/extensions/`\"@" /usr/local/php/etc/php.ini sed -i ‘s@^upload_max_filesize.*@upload_max_filesize = 100M@‘ /usr/local/php/etc/php.ini sed -i ‘s@^;date.timezone.*@date.timezone = Asia/Shanghai@‘ /usr/local/php/etc/php.ini sed -i ‘s@^session.cookie_httponly.*@session.cookie_httponly = 1@‘ /usr/local/php/etc/php.ini sed -i ‘s@^request_order.*@request_order = "CGP"@‘ /usr/local/php/etc/php.ini #以上配置了php.ini部分 sed -i ‘s@^\[opcache\]@[opcache]\nzend_extension=opcache.so@‘ /usr/local/php/etc/php.ini sed -i ‘s@^;opcache.enable=.*@opcache.enable=1@‘ /usr/local/php/etc/php.ini sed -i ‘s@^;opcache.enable_cli.*@opcache.enable_cli=1@‘ /usr/local/php/etc/php.ini sed -i ‘s@^;opcache.memory_consumption.*@opcache.memory_consumption=128@‘ /usr/local/php/etc/php.ini sed -i ‘s@^;opcache.interned_strings_buffer.*@opcache.interned_strings_buffer=8@‘ /usr/local/php/etc/php.ini sed -i ‘s@^;opcache.max_accelerated_files.*@opcache.max_accelerated_files=4000@‘ /usr/local/php/etc/php.ini sed -i ‘s@^;opcache.max_wasted_percentage.*@opcache.max_wasted_percentage=5@‘ /usr/local/php/etc/php.ini sed -i ‘s@^;opcache.validate_timestamps.*@opcache.validate_timestamps=1@‘ /usr/local/php/etc/php.ini sed -i ‘s@^;opcache.revalidate_freq.*@opcache.revalidate_freq=60@‘ /usr/local/php/etc/php.ini sed -i ‘s@^;opcache.fast_shutdown.*@opcache.fast_shutdown=1@‘ /usr/local/php/etc/php.ini #以上配置了php.ini的OPCache部分 ln -s /usr/local/php/bin/php /usr/bin/php #任何地方都可以使用php命令
五、启动,测试PHP
在/data/www/default/创建一个index.php文件,写上phpinfo(),重启httpd服务,能看到服务器的各种信息表示PHP安装成功。
cat > /data/www/default/index.php << EOF <?php phpinfo(); ?> EOF #创建一个index.php文件,里面是phpinfo()函数。 /etc/init.d/httpd restart #重启Apache服务
访问你的网站的IP,如果出现下图样式,则表示LAMP安装成功。
原文地址:http://574076359.blog.51cto.com/10651705/1698463