nginx 的配置中, user nginx nginx; 指定 nginx 运行的用户及用户组,这个用户名 用 useradd nginxuser 创建了后。需要给他什么权限 以限给他什么组?

2017-08-24 17:50:24 +08:00
 bb2018
nginx 的配置中,user nginx nginx; 指定 nginx 运行的用户及用户组,这个用户名 用 useradd nginxuser 创建了后。需要给他什么权限 以限给他什么组? 怎么设置他的组与权限。

让 user nginxuser ;
可以正常运行?
22995 次点击
所在节点    Python
14 条回复
RH
2017-08-24 19:37:46 +08:00
根据你的 Nginx 提供服务所需的最小权限给。如果只是提供静态文件服务,只需要给到能读取静态文件的权限。
ansheng
2017-08-24 19:39:28 +08:00
useradd -s /sbin/nologin nginx ...

不创建家目录的那个参数忘记了,-m 还是-M 来着
bb2018
2017-08-24 22:12:54 +08:00
@RH
就是只提供静态文件
那要怎么设置新用户 nginxuser 的权限 及用户组呢?
bb2018
2017-08-24 22:35:21 +08:00
看到三个回复。进来了一看只有两个。。。。。

3 回复
cxbig
2017-08-24 22:58:53 +08:00
没那么多讲究的,保证 server root 可以被该用户访问到即可
比方说是 /var/www/project
用 sudo -u nginxuser ls /var/www/project 就可以验证该用户是否拥有访问权限
这类系统服务用户可以指定默认 shell 为 /sbin/nologin, /bin/true|false 来避免远程登录

另外切换新用户需要指定稳定的 client_body_temp_path,不然缓存可能会有写入权限的问题
NoAnyLove
2017-08-24 23:57:25 +08:00
可以创建一个 nginx 用户,nginx 组,然后什么权限都不给,shell 指定为 nologin 或者 false 都行
msg7086
2017-08-25 03:27:38 +08:00
Debian 中的惯例是拿 www-data 权限,然后网站路径 /var/www 分配给 www-data 就行了。
miaomiao0323
2017-08-25 10:44:47 +08:00
最小权限原则,nginxuser 对静态资源有只读权限就行
bb2018
2017-08-25 11:19:36 +08:00
@miaomiao0323

这个。。怎么设置 nginxuser 对静态资源有只读权限就行?
bb2018
2017-08-25 11:22:47 +08:00
@cxbig

sudo -u nginxuser ls /var/www/project
我这样就只列出 project 下面的文件了。
这样就说明可以有访问权限?
cxbig
2017-08-25 14:27:36 +08:00
@bb2018 不,只是该文件夹的访问权限

这只是一个例子,如果你想彻底了解文件夹下所有文件和文件夹的权限,可以用 find 命令
-type d //只寻找文件夹
-perm -u=rx //(至少有)读和执行的权限,前面加!号去反

sudo -u nginxuser find /var/www/project -type d ! -perm -u=rx -ls
用该用户的名义查找文件夹和子文件夹,列举所有没有读+执行权限(文件夹基本权限)的所有文件夹。
这命令找到了某个文件夹,那么里面的东西也是看不见的,你要给了权限再运行一次去探索内部

同理可以检查文件
sudo -u nginxuser find /var/www/project -type f ! -perm -u=r -ls

这些只是基本的检查,至于极限的安全配置,你得读读相关文章了,几句话说不清楚。
bb2018
2017-08-30 23:42:17 +08:00
@cxbig

你好。我进行如下操作。

1. groupadd nginxuser 创建个用户组
2.useradd -s /sbin/nologin -g nginxuser nginxuser 创建个用户

用这个
sudo -u nginxuser find /var/wwwroot/html/xxx -type d ! -perm -u=rx -ls
查不到任何文件

这样用这个用户:nginxuser 可以用在 ningx.conf 里

user nginxuser nginxuser;

上传图片大于 10K 的话就提示如下错误:

2017/08/30 23:35:11 [crit] 1471#0: *5 open() "/var/lib/nginx/tmp/client_body/0000000002" failed (13: Permission denied), client: 111.10.111.1111, server: xxxx.com, request: "POST /user/change/admin/ HTTP/1.1", host: "xxxx.com", referrer: "http://xxxx.com/user/change/admin/"

如果我在 nginx.conf 用:

user root 或者 user nginx

上传什么的都正常。

那我自已创建的用户。需要给他设置什么最小安全权限才可以正常上传文件?
怎么设置这个 nginxuser ?具体 谢谢
cxbig
2017-08-31 05:02:52 +08:00
@bb2018

这就是我上面说的 client_body_temp_path 系列配置问题
/var/lib/nginx/tmp/ 是默认的缓存根目录,通常属于 nginx:root
你 nginx 用户改了就不能再用这个路径,更新到新用户也会遇到问题(具体原因我没有深挖,v2ex 有行家的烦请提点)

可以考虑建立新目录 /var/www/tmp,归属 nginxuser:root 0755

再在 nginx 的 http 层添加如下配置
client_body_temp_path /var/www/tmp/client_body_temp 1 2; // 解决你上面那个问题

下面这 2 个也用到的话,酌情添加
proxy_temp_path /var/www/tmp/proxy_temp 1 2; // proxy 相关
fastcgi_temp_path /var/www/tmp/fastcgi_temp 1 2; // fastcgi 相关
bb2018
2017-08-31 09:42:44 +08:00
@cxbig
谢谢.这样确实完美解决了...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/385529

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX