1
RH 2017-08-24 19:37:46 +08:00 via iPhone
根据你的 Nginx 提供服务所需的最小权限给。如果只是提供静态文件服务,只需要给到能读取静态文件的权限。
|
4
bb2018 OP 看到三个回复。进来了一看只有两个。。。。。
3 回复 |
5
cxbig 2017-08-24 22:58:53 +08:00 1
没那么多讲究的,保证 server root 可以被该用户访问到即可
比方说是 /var/www/project 用 sudo -u nginxuser ls /var/www/project 就可以验证该用户是否拥有访问权限 这类系统服务用户可以指定默认 shell 为 /sbin/nologin, /bin/true|false 来避免远程登录 另外切换新用户需要指定稳定的 client_body_temp_path,不然缓存可能会有写入权限的问题 |
6
NoAnyLove 2017-08-24 23:57:25 +08:00
可以创建一个 nginx 用户,nginx 组,然后什么权限都不给,shell 指定为 nologin 或者 false 都行
|
7
msg7086 2017-08-25 03:27:38 +08:00
Debian 中的惯例是拿 www-data 权限,然后网站路径 /var/www 分配给 www-data 就行了。
|
8
miaomiao0323 2017-08-25 10:44:47 +08:00
最小权限原则,nginxuser 对静态资源有只读权限就行
|
9
bb2018 OP |
10
bb2018 OP |
11
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 这些只是基本的检查,至于极限的安全配置,你得读读相关文章了,几句话说不清楚。 |
12
bb2018 OP @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 ?具体 谢谢 |
13
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 相关 |