www-data - Ubuntu Web服务所属用户/组

理解并配置www-data用户/用户组,解决Typecho无法直接编辑主题文件、上传附件等问题。

www-data - Ubuntu Web服务所属用户/组

1 问题由来

1.1 Typecho环境下的问题

  • Console中无法直接编辑html及php文件
  • 文章无法上传附件,提示附件上传失败
  • 无法创建配置文件*.conf
  • ……

1.2 网上流传的解决方案

  • 网络上常见的解决方法集中是放宽权限,如:
    • 对Typecho所在的Web目录赋予最高的777权限;
    • 给相关子文件夹,如theme, usruploads 赋予最高权限;
  • 注意:这种方式确实是可以解决以上问题的,但是,这种赋予所有用户最高权限的方式极其草率,用于测试、分析原因尚可,但最大化的权限赋予极不规范

1.3 分析

  • 经测试,赋予777权限确实可以解决问题,其原因在于 其它用户 的获得了完整的权限,这里就包含了服务器框架程序执行进程所属于的用户/组。服务器进程拥有了写权限,也就可以写入修改主题文件、写入接收到的上传文件了。

2 www-data

2.1 www-data是什么?

www-data 是 Debian/Ubuntu 上处理Web服务的用户/用户组。

服务器程序,如:Apache,Nginx(读作:engine X),运行在www-data用户/用户组的身份下。

2.2 理解

Web服务运行于www-data的这个机制就类似于数据库管理机制,存在Role的对象。

Role 实质上是一种身份,是一组特定权限的集合。数据库中通过定义Role来实现清晰明确、有条理的权限分配。

Debian/Ubuntu 中的原理也类似,通过专用的身份,也就是由专用的用户/用户组来执行特定类型的程序或服务。

通过 lastlog 命令可以看到系统的诸多用户/用户组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
ubuntu@VM-49-193-ubuntu:~$ lastlog
Username Port From Latest
root 四 1月 1 08:00:10 +0800 1970
daemon **Never logged in**
bin **Never logged in**
sys **Never logged in**
sync **Never logged in**
games **Never logged in**
man **Never logged in**
lp **Never logged in**
mail **Never logged in**
news **Never logged in**
uucp **Never logged in**
proxy **Never logged in**
www-data **Never logged in**
backup **Never logged in**
list **Never logged in**
irc **Never logged in**
gnats **Never logged in**
nobody **Never logged in**
systemd-timesync **Never logged in**
systemd-network **Never logged in**
systemd-resolve **Never logged in**
systemd-bus-proxy **Never logged in**
syslog **Never logged in**
_apt **Never logged in**
lxd **Never logged in**
messagebus **Never logged in**
uuidd **Never logged in**
dnsmasq **Never logged in**
sshd **Never logged in**
ubuntu pts/0 42.244.62.236 三 4月 5 22:28:29 +0800 2017
mysql **Never logged in**
ftp **Never logged in**
  • 可以看到,一个Ubuntu Server里就有这么多用户/用户组,事实上它们具体都对应着特定类型的程序和服务。

因此,只要把所在的Web路径下的文件及子目录放心地交给www-data用户/用户组即可!

权限方面,采用默认方案即可,目录配755,文件配644,比777不知妥当到那里去了。

2.3 操作

更改所属用户及用户组的bash命令如下(递归):

1
2
sudo chown -R www-data /var/www/html/
sudo chgrp -R www-data /var/www/html/

修改权限命令如下:

1
sudo chmod 755 /var/www/html/