第 4 部分 - 搭建 LAMP 环境
下面开始搭建 服务器环境,将 Samba ,Apache,MySQL,PHP,配置好。
【方法】
1.Apache 服务器的 都放到 /web/www/html 文件夹下
2.利用 Samba ,让 Windows 端可以修改 icanon 的 宿主文件夹,即 /home/icanon
3.利用 Samba ,让 Windows 端可以修改 Apache 的 DocumentRoot,即 /web/www/html
【步骤】
1.设置 Linux 防火墙
2.修改配置文件,顺序:samba,apache,mysql,php
3.设置 SELinux
4.测试:运行 PHPMyAdmin,织梦CMS
注:
1.这里的步骤只做测试使用,所以权限会给的比较大,只能作为本机的 Web 服务器
2.命令都是以root 身份执行
4.1 安装 Samba ,Apache,MySQL,PHP
确保已经安装了 Samba ,Apache,MySQL,PHP:
通过 rpm -qa 的方式依次查询。
rpm -qa | grep samba
rpm -qa | grep httpd
rpm -qa | grep mysql
rpm -qa | grep php
(ps:我不会同时查询多款软件,见笑了)
如果都安装成功,就可以继续下一步,如果没安装,就执行
yum install 软件名称安装。
4.2 设置 Fedora 16 的防火墙
我的 IP 如下:
网关:192.168.1.1
Windows 7 :192.168.1.3
Fedora 16 :192.168.1.7
打开终端,切换到 root,修改 防火墙的配置文件;
vi /etc/sysconfig/iptables
----------------------------------------
在中间加一行:
-A INPUT -j ACCEPT -s 192.168.1.3
不限制 192.168.1.3 的访问;
:wq
保存退出。
----------------------------------------
4.3 配置 Samba 3.6
新建文件夹,赋予任何人可读可写可执行的权限;
我要在 Windows 下修改 Fedora 这么改的,如果要放到网上可不能如此设置。
mkdir -p /web/www/html
chmod -R 777 /web/www
----------------------------------------
修改 Samba 的配置文件
vi /etc/samba/smb.conf
----------------------------------------
找到 workgroup ,修改成与 Windows 7 一致的 WORKGROUP(选做)。
----------------------------------------
之后再配置文件末尾,加一个共享文件夹,可以直接复制 public 的配置。
[web]
path = /home/samba
public = yes
writable = yes
----------------------------------------
:wq
保存退出。
之后是 SELinux 的设置,我会在最后同 httpd mysql 一起设置,这里先跳过。
执行
systemctl start smb.service
systemctl start nmb.service
测试一下 samba 能否打开,如果没有错误提示则证明可以开启。
查看一下 tcp 和 udp 协议:
netstat -tnl | grep 139
可以看到 139 端口已经打开;
netstat -unl | grep 13
可以看到 137 138 端口已经打开。
----------------------------------------
下面添加一个 samba 用户并设置密码,这个用户必须在 Fedora 16 中 已经建立。
我用的是 icanon 这个账户。
smbpasswd -a icanon
输入两遍密码便可设置成功。
----------------------------------------
修改即时生效,不需要重启 samba 服务,现在到 Windows 的 网上邻居,
若看到 Fedora 的图标就表示 Samba 服务架设成功;
----------------------------------------
若能够进入 Fedora ,看到 两个文件夹,一个是 icanon 的宿主目录,另一个是我们新添加的 web
说明 Samba 的 icanon 账户添加成功,Fedora 的防火墙设置成功。
----------------------------------------
由于现在还没有设置 SELinux ,访问 icanon 与 web 文件夹,可能会弹出一下对话框。
----------------------------------------
----------------------------------------
稍后再来修改。
4.4 配置 Apache 2.2
首先修改配置文件
vi /etc/httpd/conf/httpd.conf
----------------------------------------
找到 DocumentRoot 将原来的 /var/www/html 修改为 /web/www/html
----------------------------------------
找到原来 /var/www/html 的 <Directory "/web/www/html"> 修改为 <Directory "/web/www/html">
----------------------------------------
由于 httpd 的 perl.so 模块会导致 httpd 无法加载,我们需要将其屏蔽。
vi /etc/httpd/conf.d/perl.conf
----------------------------------------
找到 LoadModule perl_module modules/mod_perl.so 的前面加 “#” 注释。
----------------------------------------
下面我们测试一下能否启动 Apache 。
先重置一下 /web 的安全上下文;
restorecon -Rv /web
----------------------------------------
启动 httpd;
systemctl start httpd
如果没有提示信息,则表示启动成功,查看一下 80 端口,已经打开。
netstat -tnl | grep 80
我们打开浏览器,输入 localhost 测试一下,可以看到 Apache 的提示信息。
----------------------------------------
到 Windows 端,输入 Fedora 的 IP 192.168.1.7 也可以访问。
4.5 设置 Mysql 5.5 与 PHP 5.3
MySQL 与 PHP 使用默认的配置文件即可。
MySQL现在无法运行,需要修改SELinux,稍后同前面的服务修改。
PHP 要根据需要通过 yum 安装不同的模块,这个放到最后再来配置。
4.6 配置 SELnux
这里是最头疼的,我只是了解了一点,如果有不对的地方,请您指出,谢谢。
我们现在有下列问题:
【Samba】
4.6.1 Samba 需要对 icanon 的宿主目录具有读写权限;
4.6.2 Samba 需要对 /web/www 具有读写权限;
4.6.3 Samba 需要对 /web/www/html 具有读写权限;
【Apache】
4.6.4 Apache 需要对 /web/www/html 具有读写权限;
【MySQL】
4.6.5 MySQL 现在无法运行。
一步一步来:
4.6.1 Samba 需要对 icanon 的宿主目录具有读写权限
首先查看一下 SELinux 的 boolean 值里有关 samba 的信息:
getsebool -a | grep samba
看到 samba_enable_home_dirs 是禁止的,我们需要将他开启:
setsebool -P samba_enable_home_dirs on
现在,Windows 就可以对 icanon 的宿主目录 /home/icanon 进行读写操作了。
----------------------------------------
4.6.2 Samba 需要对 /web/www 具有读写权限
4.6.3 Samba 需要对 /web/www/html 具有读写权限
4.6.4 Apache 需要对 /web/www/html 具有读写权限
这 3 个问题可以合在一起解决。
首先,需要修改 /web/www 的安全上下文;
因为 /web/www/html 即要让 Samba 的 smb 进程有读写权限,又要让 Apache 的 httpd 进程有读写权限;
所以我将他的 安全上下文设置为 public_content_rw_t:
chcon -Rt public_content_rw_t /web/www
----------------------------------------
其次,需要让 smb 进程 与 httpd 进程本身具有写权限,搜索 SELinux 的布尔值:
getsebool -a | grep smb
getsebool -a | grep httpd
发现他们的写权限对应的2个值均为禁止:
allow_httpd_anon_write --> off
allow_smbd_anon_write --> off
----------------------------------------
现在将他们开启:
setsebool -P allow_httpd_anon_write on
setsebool -P allow_smbd_anon_write on
----------------------------------------
如此便解决了以上 3 个问题。
4.6.5 MySQL 现在无法运
----------------------------------------
2011-11-27 注 :最近一次升级似乎修复了此 BUG,可以直接启动 mysql
selinux-policy-targeted-3.10.0-56.fc16.noarch
libselinux-devel-2.1.6-4.fc16.i686
libselinux-2.1.6-4.fc16.i686
libselinux-Python-2.1.6-4.fc16.i686
libselinux-utils-2.1.6-4.fc16.i686
selinux-policy-3.10.0-56.fc16.noarch
mysql-5.5.17-1.fc16.i686
libdbi-dbd-mysql-0.8.3-8.fc16.i686
mysql-server-5.5.17-1.fc16.i686
mysql-connector-odbc-5.1.8-3.fc16.i686
php-mysql-5.3.8-3.fc16.i686
mysql-libs-5.5.17-1.fc16.i686
----------------------------------------
最后来处理 Mysql 不能启动的问题,这个似乎最麻烦,
第1次安装时我并没有经过这一步骤,直接可以启动 mysql ,
我想这可能与更新有关吧, 如果您有更好的方法,请回复我,谢谢。
首先运行
systemctl start mysqld.service
无法运行,根据提示输入
systemctl status mysqld.service
看到许多提示信息。
----------------------------------------
mysqld.service - MySQL database server
Loaded: loaded (/lib/systemd/system/mysqld.service; disabled)
Active: failed since Thu, 17 Nov 2011 19:39:05 +0800; 6s ago
Process: 2665 ExecStart=/usr/bin/mysqld_safe --nowatch --basedir=/usr (code=exited, status=127)
Process: 2649 ExecStartPre=/usr/libexec/mysqld-prepare-db-dir (code=exited, status=0/SUCCESS)
CGroup: name=systemd:/system/mysqld.service
我们先验证一下是否与 SELinux 有关,执行
setenforce 0
将 SELinux 调整到宽容模式,
再执行:
systemctl start mysqld.service
运行MySQL无提示信息,
systemctl status mysqld.service
提示启动成功,果然是 SELinux 的原因。
----------------------------------------
先将 MySQL 关闭,设置一下 SELinux 规则。
systemctl stop mysqld.service
setenforce 1
----------------------------------------
打开 应用程序 里的 SELinux Troubleshooter 程序。
----------------------------------------
点击 “Details”会有提示信息。
----------------------------------------
SELinux is preventing /bin/bash from read access on the file /bin/bash.
***** Plugin catchall (100. confidence) suggests ***************************
If you believe that bash should be allowed read access on the bash file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep mysqld_safe /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp
Additional Information:
Source Context system_u:system_r:mysqld_safe_t:s0
Target Context system_u:object_r:shell_exec_t:s0
Target Objects /bin/bash [ file ]
Source mysqld_safe
Source Path /bin/bash
Port <Unknown>
Host fedoran.localdomain
Source RPM Packages bash-4.2.10-5.fc16
Target RPM Packages bash-4.2.10-5.fc16
Policy RPM selinux-policy-3.10.0-55.fc16
Selinux Enabled True
Policy Type targeted
Enforcing Mode Permissive
Host Name fedoran.localdomain
Platform Linux fedoran.localdomain 3.1.1-1.fc16.i686.PAE #1
SMP Fri Nov 11 22:04:40 UTC 2011 i686 i686
Alert Count 18
First Seen Thu 17 Nov 2011 07:38:04 PM CST
Last Seen Thu 17 Nov 2011 07:40:10 PM CST
Local ID fad68267-0ab5-40d0-a7b6-9d0f77069edb
Raw Audit Messages
type=AVC msg=audit(1321530010.258:122): avc: denied { read } for pid=2690 comm="mysqld_safe" path="/bin/bash" dev=sda4 ino=132191 scontext=system_u:system_r:mysqld_safe_t:s0 tcontext=system_u:object_r:shell_exec_t:s0 tclass=file
type=SYSCALL msg=audit(1321530010.258:122): arch=i386 syscall=mprotect success=yes exit=0 a0=811c000 a1=1000 a2=1 a3=811c000 items=0 ppid=1 pid=2690 auid=4294967295 uid=27 gid=27 euid=27 suid=27 fsuid=27 egid=27 sgid=27 fsgid=27 tty=(none) ses=4294967295 comm=mysqld_safe exe=/bin/bash subj=system_u:system_r:mysqld_safe_t:s0 key=(null)
Hash: mysqld_safe,mysqld_safe_t,shell_exec_t,file,read
audit2allow
#============= mysqld_safe_t ==============
allow mysqld_safe_t shell_exec_t:file read;
audit2allow -R
#============= mysqld_safe_t ==============
allow mysqld_safe_t shell_exec_t:file read;
根据提示操作即可,但提示的方法似乎有许多重复,提示的操作为:
grep mysqld_safe /var/log/audit/audit.log | audit2allow -M mypol
将 /var/log/audit/audit.log 日志中有关 mysqld_safe 的选项找出来,然后执行 audit2allow
我们先找执行
grep mysqld_safe /var/log/audit/audit.log > ./001.txt
vi ./001.txt
----------------------------------------
看一下,发现有许多是重复的问题,我们可以用输入输出重定向的 执行 audit2allow
有不少,但都是同一个问题,只留一个就好
----------------------------------------
type=AVC msg=audit(1321529884.303:85): avc: denied { read } for pid=2338 comm="mysqld_safe" path="/bin/bash" dev=sda4 ino=132191 scontext=system_u:system_r:mysqld_safe_t:s0 tcontext=system_u:object_r:shell_exec_t:s0 tclass=file
type=SYSCALL msg=audit(1321529884.303:85): arch=40000003 syscall=125 success=no exit=-13 a0=811c000 a1=1000 a2=1 a3=811c000 items=0 ppid=1 pid=2338 auid=4294967295 uid=27 gid=27 euid=27 suid=27 fsuid=27 egid=27 sgid=27 fsgid=27 tty=(none) ses=4294967295 comm="mysqld_safe" exe="/bin/bash" subj=system_u:system_r:mysqld_safe_t:s0 key=(null)
:wq
保存退出。
其实这个与 SELinux Troubleshooter 里的提示是类似的。
----------------------------------------
type=AVC msg=audit(1321530010.258:122): avc: denied { read } for pid=2690 comm="mysqld_safe" path="/bin/bash" dev=sda4 ino=132191 scontext=system_u:system_r:mysqld_safe_t:s0 tcontext=system_u:object_r:shell_exec_t:s0 tclass=file
type=SYSCALL msg=audit(1321530010.258:122): arch=i386 syscall=mprotect success=yes exit=0 a0=811c000 a1=1000 a2=1 a3=811c000 items=0 ppid=1 pid=2690 auid=4294967295 uid=27 gid=27 euid=27 suid=27 fsuid=27 egid=27 sgid=27 fsgid=27 tty=(none) ses=4294967295 comm=mysqld_safe exe=/bin/bash subj=system_u:system_r:mysqld_safe_t:s0 key=(null)
直接从 SELinux 里复制出来,vi 写成文件即可。
----------------------------------------
以上两种方法可以。
再执行
audit2allow -M mypol < 001.txt
这时当前目录变会生成两个文件,
mypol.pp
mypol.te
之后将 mypol.pp 写入规则
semodule -i mypol.pp
----------------------------------------
如此 mysql 的 SELinux 规则设置完成。
再次执行
systemctl start mysqld.service
无提示信息,
systemctl status mysqld.service
提示启动成功。
netstat -tnl | grep 3306
看到 3306 端口已经打开,成功!
好的,下面修改一下啊 mysql 密码:
mysqladmin -u root password
输入 mysql 的 root 用户密码即可
----------------------------------------
好了,LAMP 基本搭建成功,现在就剩下 PHP 的模块了,
我会在安装 织梦 CMS 和 PHPMyAdmin 时修改。
下面我们先将 Samba Apache MySQL 设置为开机启动。
4.6 设置 Samba Apache MySQL 开机自启动
这个就比较容易了:
systemctl enable smb.service
systemctl enable nmb.service
systemctl enable httpd.service
systemctl enable mysqld.service
----------------------------------------
reboot
重启系统。
系统重启后查看端口。
netstat -tunl
----------------------------------------
tcp 80 139 3306
udp 137 138
端口均已打开,说明 Samba Apache MySQL 已经成功运行。
第 1 部分 - Windows 7 的设置
第 2 部分 - VirtualBox 的设置
第 3 部分 - 安装 Fedora 16
第 4 部分 - 搭建 LAMP 环境