V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
oldcai
V2EX  ›  NGINX

超级诡异的 Nginx 403 错误问题,老司机折腾了半天都没找到原因

  •  
  •   oldcai ·
    oldcai · 2016-06-05 18:33:10 +08:00 · 5314 次点击
    这是一个创建于 3097 天前的主题,其中的信息可能已经有所发展或是发生改变。

    所有层级目录权限 755 、文件权限 644 ,但是还是会 403

    于是我把演示目录中的 html 目录整个复制过来,结果发现正常 200

    好,我就按照演示目录的权限、所有者、用户组把目录设置的一模一样。

    结果还是 403

    结果还是 403

    结果还是 403


    折腾半天才定位到这个原因

    如果只是使用,我直接复制演示目录就好了,但是还是不甘心,想知道到底 为什么 为什么 为什么

    我把能想到的信息都查了一遍,发上来给各位大神们来看看,还需要其他什么有用的信息也可以找我要


    环境简介:

    CentOS Linux release 7.2.1511 (Core)

    内核 3.10.0-327.18.2.el7.x86_64

    文件系统是 xfs

    本来第二块盘是绑定在 /home 的,后来我重新给绑定到了 /var

    不能使用的这个目录是我从另一台机器上压缩打包过来解压的

    26 条回复    2016-06-07 02:40:17 +08:00
    DoraJDJ
        1
    DoraJDJ  
       2016-06-05 18:41:01 +08:00 via Android   ❤️ 1
    SELinux 的角色有没有设定好?我之前在 Fedora 里弄 Apache 也是一样的问题
    dndx
        2
    dndx  
       2016-06-05 18:44:20 +08:00   ❤️ 1
    几乎可以确定是 SELinux 的问题, restorecon 试试。
    notgod
        3
    notgod  
       2016-06-05 18:55:05 +08:00   ❤️ 1
    perl -pi -e 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    perl -pi -e 's/SELINUX=permissive/SELINUX=disabled/' /etc/selinux/config

    echo "0" > /selinux/enforce
    /usr/sbin/setenforce 0



    done 了
    oldcai
        4
    oldcai  
    OP
       2016-06-05 19:06:01 +08:00
    @DoraJDJ
    @dndx
    @notgod
    setenforce Permissive
    暂时就可以用了,但是重启还是会不行,我研究研究,能不 disable 就不 disable 。
    谢谢诸位了
    realpg
        5
    realpg  
       2016-06-06 00:44:34 +08:00   ❤️ 1
    selinux 是个极其牛逼的东西
    牛逼到全地球会配这玩意的人屈指可数……
    mikegreen7892003
        6
    mikegreen7892003  
       2016-06-06 01:42:37 +08:00
    mikegreen7892003
        7
    mikegreen7892003  
       2016-06-06 01:43:14 +08:00
    @realpg 一般也不是手动配,用工具配。
    就跟不一定要用 iptables ,可以用 firewall-cmd 。。。。
    McContax
        8
    McContax  
       2016-06-06 02:26:27 +08:00 via Android
    selinux 完全关闭。当时我刚转到完整版的 centos 时也这样, php 无法写入,明明都 777 权限了,后来永久关掉(disable),现在耳根清净,不过我还是没弄明白 selinux 用来干啥
    lslqtz
        9
    lslqtz  
       2016-06-06 03:16:29 +08:00
    @McContax 开启 selinux 后更安全一些,可以防止进程读写不该读写的东西。。但实际就是卵用。
    dndx
        10
    dndx  
       2016-06-06 05:52:27 +08:00
    @notgod 根本不需要禁用。 LZ 的 case 简单一行:

    restorecon -R /var/www/html

    应该就解决了
    dndx
        11
    dndx  
       2016-06-06 05:55:55 +08:00   ❤️ 1
    @McContax 我自己的生产服务器从来不禁用 SELinux ,熟悉后很快就能定位、解决权限问题。

    如果应用程序本身有漏洞, SELinux 是最有效的一道防线,一个配置良好的 SELinux 系统有时甚至会让 remote exploit 变的完全 useless 。直接禁用未免因噎废食。

    参考:
    http://stopdisablingselinux.com/
    oldcai
        12
    oldcai  
    OP
       2016-06-06 06:07:40 +08:00
    @dndx 试过 restorecon -R /var/www ,没有解决访问问题,后来加了个 httpd_sys_content_t 的 type ,就解决了。
    dndx
        13
    dndx  
       2016-06-06 06:35:55 +08:00   ❤️ 1
    @oldcai 那就很奇怪了。 restorecon -vR /var/www/html 看看输出,应该会自动恢复 httpd_sys_content_t 。经常用这个 command ,从来没出过问题。
    chaegumi
        14
    chaegumi  
       2016-06-06 08:05:44 +08:00
    nginx 的 server 配置加上 index index.html;
    chaegumi
        15
    chaegumi  
       2016-06-06 08:06:25 +08:00
    直接访问 index.html 能不能访问,如果不能就是配置下 index
    gpw1987
        16
    gpw1987  
       2016-06-06 08:55:29 +08:00
    我觉得 linux 的 SE 的确是有点问题, linux 在 BASH 操作下似乎一切都显得很复杂,像我们刚入门人很累呀,权限很多,容易设的混乱
    cccRaim
        17
    cccRaim  
       2016-06-06 09:03:53 +08:00
    这个我也遇到过...然而忘记什么问题了...忘记写博客了
    imxieke
        18
    imxieke  
       2016-06-06 09:28:35 +08:00 via iPhone
    楼主挂载是 ext4 格式?
    skylancer
        19
    skylancer  
       2016-06-06 10:13:05 +08:00
    @imxieke 不知道这个问题的意义何在呐..
    imxieke
        20
    imxieke  
       2016-06-06 10:53:26 +08:00 via iPhone
    @skylancer 我之前也遇到过 各种折腾 无效 改成 ext3 就好了 对你这适应不就不知道了。
    wensonsmith
        21
    wensonsmith  
       2016-06-06 12:41:59 +08:00
    歪个楼,楼主的这个 bash 主题是啥?
    oldcai
        22
    oldcai  
    OP
       2016-06-06 12:45:35 +08:00
    @wensonsmith 是 zsh ,主题名是 af-magic
    oldcai
        23
    oldcai  
    OP
       2016-06-06 12:53:40 +08:00
    @dndx 看了下,默认 httpd 有权限的目录似乎没有 /var/www/的,所以单纯恢复不一定有 httpd_sys_content_t 吧,而且之前的机器可能并没有开 selinux ,所以。。。
    至于那个文件夹已经被怒删了。。原来的压缩包也删了,暂时复现不了了,下次碰到再试试吧
    blackshadow
        24
    blackshadow  
       2016-06-06 12:58:12 +08:00 via Android
    修改 nginx 配置文件,直接访问 index 。文件夹用户设成 www ,重启 nginx 试试。
    oldcai
        25
    oldcai  
    OP
       2016-06-06 13:04:57 +08:00
    @blackshadow 作为一个老司机,这些肯定都试过, centos 的用户是 nginx , debian/ubuntu 的是 www-data
    oldcai
        26
    oldcai  
    OP
       2016-06-07 02:40:17 +08:00
    @dndx
    你好,找到一个压缩包,试了下,结果果然改成正确的 type 了,好像它是根据路径来给予的 type ,
    所以可能是我当时使用命令的路径不对,所以当时没有成功,现在测试是可运行的。
    感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5407 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 01:20 · PVG 09:20 · LAX 17:20 · JFK 20:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.