VirtualBox 安装 Fedora 16 运行 Gnome3 Samba Apache2 MySQL(6)

第 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 环境

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/bf4ab60504133c71916c76e0bee1eb3d.html