虚拟主机用户ftp和apache用户文件互操作权限解决方法

近来用linux虚拟主机学习了一下linux下的权限比较高级一点的权限管理,当我们使用PHP程序的时候,在安装好以后,如果你想删除整个目录,你会发现apache用户生成了一些文件,ftp的用户不能删除.

其实这是有办法解决的。

方法1.用户组控制方法
先给所有的虚拟主机主机中的虚拟用户(ftp用户)加入到apache这个组.然后设置umask为002.这样用户和组都有读写执行权限。这个是比较容易的方法.但不安全。不同的用户可以删除对方的文件,因为是同一个组,组有读写执行的权限.

方法2.使用linux高级的权限管理acl。

对一个目录设置二重权限,除了用户本身的用户组,在加入apache对他要读写执行的权限.
这样用户就能删除apache生成的文件.但为别人的组,别的虚拟用户他没法删除.

下面我们就来看看第二种的控制方法

linux系统里面,并不是只能为所有者,同组用户和其他用户这三类人分配一个文件(目录)的权限,你还可以指定其他的用户或者组,不过有个前提,挂载分区的时候加上acl选项,比如:
mount /dev/hda1 /home -o acl。

然后你可以使用
setfacl -m u:ftp:rwx /home/ftp/www
命令来给ftp用户分配/home/ftp/www目录的所有权限

如果你要/home/ftp/www/下面新建的目录和文件也有同样的权限
setfacl -d -m u:ftp:rwx /home/ftp/www

设置默认的权限,这个命令还可以实现多个用户的不同权限的控制,比如
setfacl -m u:ftp:rwx /home/www;
setfacl -m u:tmp:r-x /home/www;
ftp用户拥有所有权限,tmp用户拥有只读权限。

你还可以设置mask的值:
setfacl -m m::rwx /home/www;

这样,新建的你就可以让虚拟主机的用户和apache用户都有权限操作文件和目录了,比如apache用户的用户名是apache,虚拟主机的用户名是vmuser,目录是/home/vmuser/www,可以使用以下的命令:
setfacl -m u:vmuser:rwx /home/vmuser/www;
setfacl -m u:apache:rwx /home/vmuser/www;
setfacl -d -m u:vmuser:rwx /home/vmuser/www;
setfacl -d -m u:apache:rwx /home/vmuser/www;
setfacl -m m::rwx /home/vmuser/www;
setfacl -d -m m::rwx /home/vmuser/www;

这样,在安装PHP程序的时候,就不会提示你apache的用户没有权限写文件,而你想删除一个目录的时候,也不会因为下面有apache用户生成的文件而不能删除了。当然这个办法有点局限就是基本上只有ext2和ext3分区格式能用,其他的,比如xfs,jfs等不能直接使用,修改后才能使用。



Linux下的XAMPP基本配置技巧(设置虚拟主机、添加FTP账户等)

xampp安装好之后就只有一个默认站点及一个默认nobody的ftp账户,这显然不符合我们平时的需求了,那么下面就来讲一下如何设置并管理多个虚拟主机及ftp账户了,至于xampp的安装不在此讨论范围,读者可自行参阅官网的相关说明。

1、首先讲一下ftp账户的配置:

xampp采用的是proftpd服务端,这个不像我们Win环境下常用的Serv-U,用户帐户不是在服务端工具里面进行配置,而是在linux系统帐户里面配置的。因此我们可以使用命令:

groupadd ftpusers

先在系统中创建一个名称为ftpusers的用户组,这里的名称可以随便设置,主要是为了区分ftp帐户与系统其他类型的帐户所以我这里就命名为ftpusers,然后在这个组里面添加一个用户:

useradd -d /opt/lampp/www/site1 -g ftpusers -s /sbin/nologin site1ftp

第一个参数-d表示用户home目录,其中/opt/lampp/www/这个路径必须是存在的,而site1则是在该命令执行时自动创建的。第二 个参数-g表示此用户隶属于哪个用户组,第三个参数-s表示此用户的shell环境,为安全起见我们应该设置为一个无权限的路径。最后一个参数才是此帐户 的登录名称,我这里是site1ftp。

创建好之后我们就要为该帐户设置一个密码了:

passwd site1ftp

执行该命令后按提示输入两次密码即可完成帐户site1ftp的密码设置了。

接下来我们设置一下帐户home目录的权限:

chmod -R 777 /opt/lampp/www/site1

至此,ftp帐户的添加算是完成了,顺便提示一下,删除帐户的命令是userdel,修改帐户的命令是usermod,存储帐户的文件路径为/etc/passwd。

另外,为安全起见,我们应该在proftpd的服务配置文件(一般路径是/opt/lampp/etc/proftpd.conf)中修改一下 DefaultRoot为ftpusers,将ftpusers组里面的用户访问范围限制在其home目录。也可以把DefaultRoot设为~(键盘 左上角的那个符号),这样表示所有的组里面的用户都有这个限制了。如果要单独设置两个组或更多的组你必须另起一行或多行,说明如下:

DefaultRoot ftpusers      #限制ftpusers组里面的用户
DefaultRoot ~      #限制所有组里面的用户
DefaultRoot ftpusers
DefaultRoot nobody      #限制ftpusers组及nobody组里面的用户
DefaultRoot ftpusers,nobody      #限制既隶属于ftpusers组同时也隶属于nobody组里面的用户

对了,还差一个步骤,应该在proftpd配置文件中对ftp目录添加可重写的权限,如下:

<Directory /opt/lampp/www/*>
  AllowOverwrite            on
</Directory>

否则会出现ftp上传文件时无法覆盖同名文件的问题。

2、然后我们再讲一下虚拟主机的配置
先执行:

cat /opt/lampp/etc/httpd.conf

查看一下xampp的apache配置文件,我们发现其中有一行:

#Include etc/extra/httpd-vhosts.conf

看来,xampp为我们准备了一个专用于配置虚拟主机的文件了,去掉#号以删除其注释,然后编辑/opt/lampp/etc/extra /httpd-vhosts.conf文件,此文件中xampp为我们创建了两个虚拟主机的示例,我们把这两个示例注释掉,然后添加我们自己需要的虚拟主 机,例如:

<VirtualHost *:80>
    DocumentRoot /opt/lampp/www/site1
    ServerName blog.ewebe.net
</VirtualHost>

DocumentRoot表示虚拟主机对应的路径,即网站目录,ServerName表示虚拟主机的访问地址,类似IIS中的主机头值。

至此,虚拟主机的设置也算是完成了。

最后我们需要在apache配置文件/opt/lampp/etc/httpd.conf中添加一下网站目录的访问权限。

<Directory "/opt/lampp/www/site1">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

这里可以将目录路径/opt/lampp/www/site1改为/opt/lampp/www,为以后建立更多的虚拟主机如site2、site3……等等做准备。



用Apache仿照FTP的列表方式的虚拟主机配置写法

<Virtualhost *:80>

DocumentRoot “/home/123456″

ServerName ftp.aaa.com

AddDefaultCharset UTF-8

<directory home=””/home/123456″”>

Options Indexes

IndexOptions NameWidth=* //这个是让表格字段名自动适应宽度

IndexOptions FancyIndexing //采用类似Windows的排列方式

IndexOptions FoldersFirst //文件夹排在文件前面

IndexOptions HTMLTable //采用HTML的表格方式

AddIcon (IMG,/icons/pdf.gif) .pdf

AddIcon (IMG,/icons/doc.gif) .doc

AddIcon (IMG,/icons/xls.gif) .xls

AddIcon (IMG,/icons/ppt.gif) .ppt

AddIcon (IMG,/icons/rar.gif) .rar .zip .tgz .tar.gz .rpm .iso

AddIcon (IMG,/icons/msi.gif) .msi .exe

AddIcon (IMG,/icons/txt.gif) .txt

AddIcon (IMG,/icons/dll.gif) .dll .sys

AddIcon (IMG,/icons/xml.gif) .xml

AddIcon (IMG,/icons/html.gif) .htm .html

AddIcon (IMG,/icons/media.gif) .wmv .rm .rmvb .asf .mov

AddIcon (IMG,/icons/img.gif) .jpg .gif .png .bmp

IndexStyleSheet “ftp.css” //指定CSS文件,对样式进行具体规定

AllowOverride None

Order allow,deny

Allow from all

</directory>

</Virtualhost>


CentOS 7.0安装配置Vsftp服务器

一、配置防火墙,开启FTP服务器需要的端口

CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。

1、关闭firewall:

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

2、安装iptables防火墙

yum install iptables-services #安装

vi /etc/sysconfig/iptables #编辑防火墙配置文件

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 10060:10090 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

:wq! #保存退出

systemctl restart iptables.service #最后重启防火墙使配置生效

systemctl enable iptables.service #设置防火墙开机启动

说明:21端口是ftp服务端口;10060到10090是Vsftpd被动模式需要的端口,可自定义一段大于1024的tcp端口。

系统运维  www.osyunwei.com  温馨提醒:qihang01原创内容©版权所有,转载请注明出处及原文链接

二、关闭SELINUX

vi /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存退出

setenforce 0 #使配置立即生效

三、安装vsftpd

yum install -y vsftpd #安装vsftpd

yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI  #安装vsftpd虚拟用户配置依赖包

systemctl start vsftpd.service #启动

systemctl enable vsftpd.service #设置vsftpd开机启动

四、配置vsftp服务器

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-bak #备份默认配置文件

执行以下命令进行设置

sed -i "s/anonymous_enable=YES/anonymous_enable=NO/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#anon_upload_enable=YES/anon_upload_enable=NO/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#anon_mkdir_write_enable=YES/anon_mkdir_write_enable=YES/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#chown_uploads=YES/chown_uploads=NO/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#async_abor_enable=YES/async_abor_enable=YES/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#ascii_upload_enable=YES/ascii_upload_enable=YES/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#ascii_download_enable=YES/ascii_download_enable=YES/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#ftpd_banner=Welcome to blah FTP service./ftpd_banner=Welcome to FTP service./g" '/etc/vsftpd/vsftpd.conf'

echo -e "use_localtime=YES\nlisten_port=21\nchroot_local_user=YES\nidle_session_timeout=300

\ndata_connection_timeout=1\nguest_enable=YES\nguest_username=vsftpd

\nuser_config_dir=/etc/vsftpd/vconf\nvirtual_use_local_privs=YES

\npasv_min_port=10060\npasv_max_port=10090

\naccept_timeout=5\nconnect_timeout=1" >> /etc/vsftpd/vsftpd.conf

五、建立虚拟用户名单文件

touch /etc/vsftpd/virtusers

编辑虚拟用户名单文件:(第一行账号,第二行密码,注意:不能使用root做用户名,系统保留)

vi /etc/vsftpd/virtusers

web1

123456

web2

123456

web3

123456

:wq! #保存退出

六、生成虚拟用户数据文件

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

chmod 600 /etc/vsftpd/virtusers.db #设定PAM验证文件,并指定对虚拟用户数据库文件进行读取

七、在/etc/pam.d/vsftpd的文件头部加入以下信息(在后面加入无效)

修改前先备份 cp /etc/pam.d/vsftpd /etc/pam.d/vsftpdbak

vi /etc/pam.d/vsftpd

auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

注意:如果系统为32位,上面改为lib,否则配置失败

八、新建系统用户vsftpd,用户目录为/home/wwwroot, 用户登录终端设为/bin/false(即使之不能登录系统)

useradd vsftpd -d /home/wwwroot -s /bin/false

chown vsftpd:vsftpd /home/wwwroot -R

chown www:www /home/wwwroot -R #如果虚拟用户的宿主用户为www,需要这样设置。

九、建立虚拟用户个人Vsftp的配置文件

mkdir /etc/vsftpd/vconf

cd /etc/vsftpd/vconf

touch web1 web2 web3 #这里创建三个虚拟用户配置文件

mkdir -p /home/wwwroot/web1/http/

vi web1 #编辑用户web1配置文件,其他的跟这个配置文件类似

local_root=/home/wwwroot/web1/http/

write_enable=YES

anon_world_readable_only=NO

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

十、最后重启vsftpd服务器

systemctl restart vsftpd.service

备注:

guest_username=vsftpd #指定虚拟用户的宿主用户(就是我们前面新建的用户)

guest_username=www #如果ftp目录是指向网站根目录,用来上传网站程序,可以指定虚拟用户的宿主用户为nginx运行账户www,可以避免很多权限设置问题

至此,CentOS 7.0安装配置Vsftp服务器配置完成。


转载于:https://my.oschina.net/yonghan/blog/468721

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值