centos7 中关于 nginx 的权限问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
veezzz
V2EX    NGINX

centos7 中关于 nginx 的权限问题

  •  
  •   veezzz 2015-02-19 18:23:22 +08:00 12695 次点击
    这是一个创建于 3888 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在centos中有一个user名为worker,所以在nginx.conf的配置中配置

    user: worker server{ location: /static/{ root /home/worker; } } 

    可是运行后,访问127.0.0.1/static/test.html,依然报错权限问题

    2015/02/19 01:45:42 [error] 3634#0: *open()"/home/worker/static/test.html" failed (13: Permission denied), 

    nginx应该如何配置

    22 条回复    2015-02-22 15:09:32 +08:00
    Comphuse
        1
    Comphuse  
       2015-02-19 19:04:57 +08:00   3
    假设你的 Nginx 配置没有任何问题,并且运行 getenforce 的结果是 Enforcing。

    首先你要让 SELinux 允许 httpd[1] 访问用户目录。很简单,root 运行 setsebool -P httpd_enable_homedirs 。
    "-P" 的意思是 permanent,不带 -P 的话系统重启后恢复默认配置。

    然后你要修改 /home/user/static 的 SELinux context。告诉 SELinux,允许此目录被 httpd 访问:
    chcon -v -t httpd_user_content_t /home/user/static

    没有意外的话应该就可以访问了。

    简单易懂的关于 SELinux 的讲座:

    Red Hat 出的 SELinux 手册: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/SELinux_Users_and_Administrators_Guide/index.html

    更多和 httpd 有关的 SELinux 开关:
    getsebool -a | grep httpd
    安装 selinux-policy-devel,然后 man httpd_selinux

    [1] 在 RHEL/CentOS/Fedora 下,
    httpd 包是 apache。但 apache 和 nginx 的 SELinux context 都是:system_u:system_r:httpd_t:s0。
    Comphuse
        2
    Comphuse  
       2015-02-19 19:07:50 +08:00   1
    Sorry,漏掉了 boolean,是 setsebool -P httpd_enable_homedirs on
    veezzz
        3
    veezzz  
    OP
       2015-02-19 19:13:06 +08:00
    @Comphuse 那nginx的user配置的目的是什么 为什么不能直接访问呢
    Comphuse
        4
    Comphuse  
       2015-02-19 19:15:36 +08:00   1
    @veezzz DAC 权限和 SELinux 必须同时满足才能运行。
    Comphuse
        5
    Comphuse  
       2015-02-19 19:41:25 +08:00
    刚才查了以下,Nginx 你好像配错了......
    http://wiki.nginx.org/UserDir
    veezzz
        6
    veezzz  
    OP
       2015-02-19 20:21:02 +08:00
    @Comphuse 路径配置我是参考nginx的doc的 我去试试配置selinux 万分感谢你耐心的回答 有问题再请教你
    kxmp
        7
    kxmp  
       2015-02-19 23:58:24 +08:00   1
    所有上层目录都要有读取权限
    WildCat
        8
    WildCat  
       2015-02-20 00:06:59 +08:00 via iPhone
    我晕,我今天也遇到这个情况了,无论怎么改权限都不行。明天试试吧
    ryd994
        9
    ryd994  
       2015-02-20 01:13:10 +08:00 via Android   1
    @WildCat
    @kxmp
    先用sudo确认权限,再看selinux,实在不行就先关掉,先定位问题再看办法
    WildCat
        10
    WildCat  
       2015-02-20 10:07:29 +08:00
    @ryd994 解决了,如 @kxmp 所说,确实是上层目录的问题。
    祝各位新春愉快!
    veezzz
        11
    veezzz  
    OP
       2015-02-20 10:09:36 +08:00
    @WildCat 需要把上层目录的权限都修改么,应该添加什么权限
    WildCat
        12
    WildCat  
       2015-02-20 10:16:23 +08:00
    @veezzz 我部署了个新版本,又不行了,233
    我再试试去把
    WildCat
        13
    WildCat  
       2015-02-20 10:28:40 +08:00
    @veezzz
    linux 新手,刚才是把 home 路径又记错了。
    重新试了下,假设 home 路径是 /root

    chomd -R a+r /root

    没用

    chomd -R a+x /root

    可以解决。

    楼上有说要读取权限,不知这里为何还得给执行权限。

    自己是小采集站,就随意了,楼主如果是生产环境要小心了。

    nginx version: nginx/1.6.2
    veezzz
        14
    veezzz  
    OP
       2015-02-20 11:03:01 +08:00   1
    @WildCat 我有个疑问 如果nginx的user设置为 username 那么 nginx的worker进程应该是以username用户执行的 按理说 username用户是有/home/username下的相关权限的 为什么不行呢
    ryd994
        15
    ryd994  
       2015-02-20 12:26:26 +08:00 via Android   1
    @WildCat +x对文件是执行,对目录是进入权限
    @veezzz Nginx要对文件做stat操作,所以对整个目录链要有x。抱歉之前没说清楚。用sudo就是sudo -u 用户 做
    ryd994
        16
    ryd994  
       2015-02-20 12:27:06 +08:00 via Android
    @veezzz (续上)做两件事,stat 和cat
    ryd994
        17
    ryd994  
       2015-02-20 12:29:22 +08:00 via Android   1
    @WildCat 别chmod +R用find
    find -type d | xargs chmod +x
    大约是这样
    veezzz
        18
    veezzz  
    OP
       2015-02-20 16:28:21 +08:00   1
    @WildCat 我测试了下 好像是因为selinux的问题引起的
    veezzz
        19
    veezzz  
    OP
       2015-02-22 12:04:11 +08:00
    @Comphuse 按照你的方法解决了,万分感谢,静态文件可以访问了但是当nginx做反向代理的时候,selinux禁止访问上游服务器,这个问题该怎么处理
    veezzz
        20
    veezzz  
    OP
       2015-02-22 13:38:51 +08:00
    @Comphuse 解决了, 不过还是想请问你, 有没有nginx与selinux的配置的最佳实践学习下
    Comphuse
        21
    Comphuse  
       2015-02-22 14:38:32 +08:00
    @veezzz nginx 配置文件和 aureport -a 的结果贴一下
    veezzz
        22
    veezzz  
    OP
       2015-02-22 15:09:32 +08:00
    @Comphuse 反向代理的问题解决了, 在http_port_t中添加了反向代理用的port,我是想问问有没有nginx与selinux配置的文章啊什么的可以学习
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     862 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 19:45 PVG 03:45 LAX 12:45 JFK 15:45
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86