为了备份资料或者即时修订站点程序,我们常会使用Syncthing这款优秀的同步软件。如果在VPS上以root用户启动Syncthing,你会发现web界面会提示“应该用普通用户权限此程序,否则会有安全风险”。那么如何用普通用户运行Syncthing,如果要同步的目标路径不在此普通用户的家目录下,如何解决权限问题呢?本文解答此问题以及实操中遇到的一些其它相关问题。
核心问题
背景:我在VPS上运行网站,站点程序是在本地工作机上开发然后通过syncthing同步到VPS上的。站点程序位于VPS的/var/www/html目录下,这个目录的所有者和用户组都是www-data。
问题:如果用root开启syncthing,syncthing会警告权限太高,并且同步过去的文件/目录的所有者和用户组将被更改为root,这在站点程序需要对某些目录拥有写权限时会报错;如果用普通权限的用户运行syncthing,这个用户通常对/var/www/html目录没有写权限,因而会同步失败。
解决方案:用普通权限的用户运行syncthing,但需要提前将其加入待同步目录的所属用户组;如果是初次同步到尚不存在的目录,则将其加入待同步目录的父目录的所属用户组。
举例:要将本地的mysite目录同步到VPS的/var/www/html下,因为/var/www/html的所属用户组是www-data,所以将当前登陆的普通权限用户xiaoming加入www-data,再开启syncthing就可以同步成功。如果/var/www/html下已经存在mysite目录,因为其所属用户组也是www-data,所以处理办法相同。
代码:
// 确保/var/www/html的owner和group是www-data xiaoming@TopVps:~$ sudo chown -R www-data: /var/www/html/ xiaoming@TopVps:~$ ll /var/www/ total 12 drwxr-xr-x 3 root root 4096 Apr 14 19:45 ./ drwxr-xr-x 13 root root 4096 Apr 14 19:45 ../ drwxr-xr-x 2 www-data www-data 4096 Apr 15 10:11 html/ xiaoming@TopVps:~$ ll /var/www/html/ total 20 drwxr-xr-x 2 www-data www-data 4096 Apr 15 10:11 ./ drwxr-xr-x 3 root root 4096 Apr 14 19:45 ../ -rw-r--r-- 1 www-data www-data 10701 Apr 14 19:45 index.html -rw-rw-r-- 1 www-data www-data 0 Apr 15 10:11 test // 将用户加入www-data用户组并验证 xiaoming@TopVps:~$ sudo usermod -a -G www-data xiaoming xiaoming@TopVps:~$ id xiaoming uid=500(xiaoming) gid=500(xiaoming) groups=500(xiaoming),4(adm),24(cdrom),27(sudo),30(dip),33(www-data),46(plugdev),115(lpadmin),116(sambashare) // 此时以xiaoming这个用户运行的syncthing就可以向/var/www/html目录同步资料了。
相关问题
/var/www/html的合适的用户组
问题1:对于/var/www/html目录,什么所属用户(组)是最合适的,是root还是www-data?
回答:Ubuntu上安装apache后,/var/www/html的owner是root:root;但apache进程的所有者主要是www-data,为适应其对某些目录的写权限要求,将这个目录机器子目录的所有者更改为www-data:www-data会更方便一些。
代码:关于apache进程的启动者,第一个进程是由root启动的,之后的进程的所有者都是www-data。
xiaoming@TopVps:~$ sudo ps aux | grep apache root 21847 0.0 0.2 87600 5504 ? Ss Apr14 0:01 /usr/sbin/apache2 -k start www-data 21848 0.0 0.3 942764 6256 ? Sl Apr14 0:00 /usr/sbin/apache2 -k start www-data 21849 0.0 0.2 680524 5672 ? Sl Apr14 0:00 /usr/sbin/apache2 -k start xiaoming 25965 0.0 0.0 13236 876 pts/3 S+ 10:09 0:00 grep --color=auto apache
参考:Proper owner of var/www/html和Which group should own /var/www/html?
新用户组权限的生效要件
问题2:怎么将用户xiaoming加入www-data组,为什么加入后syncthing进程仍然无法写入/var/www/html?
回答:通过usermod -a -G www-data xiaoming将其加入;为使权限更改生效,需停止syncthing进程并注销当前用户,然后重新登入并开启syncthing。
参考:I added a user to a group, but group permissions on files still have no effect
sudo的mv操作对文件用户组的影响
问题3:sudo转移文件会改变其用户(组)吗?
回答:不会。
代码:sudo转移文件不会改变文件的owner
xiaoming@TopVps:~$ touch test xiaoming@TopVps:~$ sudo mv test /var/www/html/ xiaoming@TopVps:~$ ll /var/www/html/ total 20 drwxr-xr-x 2 root root 4096 Apr 15 10:11 ./ drwxr-xr-x 3 root root 4096 Apr 14 19:45 ../ -rw-r--r-- 1 root root 10701 Apr 14 19:45 index.html -rw-rw-r-- 1 xiaoming xiaoming 0 Apr 15 10:11 test
-- EOF --
本文最后修改于6年前 (2019-04-26)