自动化部署网站所需的权限设置

首先为网站内容目录设置权限:

1
2
3
4
5
6
7
usermod -a -G www-data operator
chown -R www-data:www-data /var/html/htdocs
chmod -R o-x /var/html/htdocs
chmod /var/html/htdocs -type d -exec chmod g+s {} \;
setfacl -d -R -m u::rwx /var/html/htdocs
setfacl -d -R -m g::rwx /var/html/htdocs
setfacl -d -R -m o::--- /var/html/htdocs

operator 加入 www-data 组使其有权限部署网站内容。

设置组的 setgid 标志位,可以确保子文件夹写入或修改后,依然属于 www-data 组。值得注意的是,Linux 会忽略文件夹的 setuid 标志位。

最后用 ACL 修改 umask。使用 ACL 修改的原因是,ACL 对 umask 的修改可以持久化。

同理,为 Nginx 配置目录设置权限:

1
2
3
4
5
6
7
8
useradd  webmaster
usermod -a -G webmaster operator
chown -R webmaster:webmaster /etc/nginx/sites
chmod -R o-x /etc/nginx/sites
chmod /etc/nginx/sites -type d -exec chmod g+s {} \;
setfacl -d -R -m u::rwx /var/html/htdocs
setfacl -d -R -m g::rwx /var/html/htdocs
setfacl -d -R -m o::--- /var/html/htdocs

最后,允许 webmaster 通过 sudo 重启 Nginx:

1
echo "%webmaster ALL= NOPASSWD: /usr/bin/systemctl restart nginx" >> /etc/sudoers