LINUX下FTP用户和apache用户权限问题的解析
发布时间:2012-10-15 14:43:56 作者:佚名
我要评论
本文带你分析一下LINUX下FTP用户和apache用户权限问题
原来完全没有研究过LINUX系统,由于论坛空间的需要,购买的国外的VPS,装的LINUX系统。刚得到后台帐号时完全就晕菜了,什么都是空白的,没有系统,没有HTTP服务器,就是一个全裸的“网络硬盘”。还好有百度大叔在,让我可以“水中捞月”一翻,不查不知道,原来这些国外VPS的使用资料也少得可怜。。。好不容易学会了SSH,并且费了一番周折,终于装上了kloxo面板。这下总算好了,有HTTP了,FTP也有了。。。传好资料后居然发现权限的问题很严重,“用户名”、“用户组”还有什么“所有者”,要用chown命令来改“所有者”,差点搞晕了。。总算让论坛运行起来了,没有过多久,问题又来了。不知道怎么回事,FTP的文件显示不了了,在kloxo面板修改,死活显示不了,有时还登录不了。。。百度大叔那边也没有查到什么可用资料,估计就我一个碰到这种问题吧!关于FTP权限问题,我仔细的想了很久,估计就是出现在FTP用户的权限以及目录的所有者权限出现问题了。kloxo面板里的FTP用户管理功能太简单了,而且怎么改都没有用,我只好查相关的命令了。黄天不负有心人啦,终于让我找到了命令方式的管理FTP用户:sudo useradd -g apache -d /dev/null -s /bin/false ftpadmin先创建一个ftpadmin的用户,隶属于apache用户组结果出现下面的内容:Creating mailbox file: File exists
useradd: warning: the home directory already exists.Not copying any file from skel directory into it.
估计是以前有创建过同样的文件吧,不管它,再来下面的代码:sudo pure-pw useradd admin -u ftpadmin -d /home/admin/XXX.com
这是在pure-ftpd程序中建立一个FTP用户admin 并绑定到刚才建立的系统用户ftpadmin,这个FTP用户的主目录是/home/admin/XXX.com执行每条命令之后pure-pw会要求输入账号的密码。连续输入2遍密码后FTP帐号就生成了。接着,每次修改用户设置后都要更新一下虚拟用户数据库,不需要重新启动服务,运行下行命令:
sudo pure-pw mkdb
最后,再将网站根目录的所有者改成ftpadmin,不然FTP上传不了文件。chown -R ftpadmin /home/admin/XXX.com
------------
当我们使用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等不能直接使用,修改后才能使用。
useradd: warning: the home directory already exists.Not copying any file from skel directory into it.
估计是以前有创建过同样的文件吧,不管它,再来下面的代码:sudo pure-pw useradd admin -u ftpadmin -d /home/admin/XXX.com
这是在pure-ftpd程序中建立一个FTP用户admin 并绑定到刚才建立的系统用户ftpadmin,这个FTP用户的主目录是/home/admin/XXX.com执行每条命令之后pure-pw会要求输入账号的密码。连续输入2遍密码后FTP帐号就生成了。接着,每次修改用户设置后都要更新一下虚拟用户数据库,不需要重新启动服务,运行下行命令:
sudo pure-pw mkdb
最后,再将网站根目录的所有者改成ftpadmin,不然FTP上传不了文件。chown -R ftpadmin /home/admin/XXX.com
------------
当我们使用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等不能直接使用,修改后才能使用。
相关文章

集成系统级Claw模式! Deepin 官宣发布 25.1 版本
deepin操作系统发布了最新的 25.1 版本更新,该版本基于 deepin 25 正式版积累的多轮内测成果,在 AI 能力、内核版本、桌面环境、文件管理器以及系统安全等方面进行了更新2026-04-13
又一代老硬件退场! Linux 内核正式放弃Intel 486 CPU
在过去的几十年间,CPU 的架构已经经历了飞速发展,x86 系列就是其中之一,而 i486 则属于该系列中的一个,当前,i486 的CPU处理器已经够老,从 Linux 7.1 开始将不再有对2026-04-09
我把 Linux 中最常用、最实用、最常被问到的命令按照实际使用场景分类整理,方便你快速查阅和记忆,内容覆盖日常运维、开发调试、性能分析、文件处理、网络、安全、系统管2026-04-08
一分钟内检查Linux服务器性能? 9个性能检测常用的基本命令
今天我们来看看Linux系统中用于性能监控的一系列命令,这些命令可以快速查看机器的负载情况,详细请看下文介绍2026-03-18
Linux作为操作系统领域灵活性和可定制性的基石,提供了大量满足不同用户需求的发行版,今天分享适合高级用户的15款Linux发行版2026-03-10
开箱即用? 这4个高手级Linux发行版远没你想象的那么安全易用
如果你正在纠结用哪个发行版?零基础新手别被“高端”“极客”“声明式”这些词冲昏头脑,先用好用的,再慢慢进阶2026-03-10
这几款SSH工具真的够用了! Linux好用的ssh工具推荐
在Linux上使用SSH,您需要安装一个SSH客户端,今天整理找到的8 款 SSH / 终端工具,从免费开源到企业级商用,从轻量化命令行到一站式工具箱,每款都做了介绍与对比,希望能2026-03-09
在Linux系统下有两种用户,即高级用户root,普通用户,高级用户root可以在系统中做任何事情,普通用户仅可在Linux系统中做有限的事情,下面我们就来看看切换方法2026-02-28
揭秘当前登录用户的身份! Linux中使用logname命令的技巧
logname命令就是这样一个简单但强大的工具,它能帮助我们轻松获取当前登录用户的用户名,今天,我们就来深入探索一下这个命令的工作原理、使用方法和最佳实践2026-02-26
在 Linux 系统中,DNS 缓存是一种将域名和 IP 地址映射关系缓存在本地的机制,可以加快域名解析速度,并减轻 DNS 服务器的负载2026-02-26




最新评论