NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
oldcai
0.01D
V2EX  ›  NGINX

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

  •  
  •   oldcai ·
    PRO
    ·
    oldcai · Jun 5, 2016 · 6094 views
    This topic created in 3631 days ago, the information mentioned may be changed or developed.

    所有层级目录权限 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 replies    2016-06-07 02:40:17 +08:00
    DoraJDJ
        1
    DoraJDJ  
       Jun 5, 2016 via Android   ❤️ 1
    SELinux 的角色有没有设定好?我之前在 Fedora 里弄 Apache 也是一样的问题
    dndx
        2
    dndx  
       Jun 5, 2016   ❤️ 1
    几乎可以确定是 SELinux 的问题, restorecon 试试。
    notgod
        3
    notgod  
       Jun 5, 2016   ❤️ 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
    PRO
       Jun 5, 2016
    @DoraJDJ
    @dndx
    @notgod
    setenforce Permissive
    暂时就可以用了,但是重启还是会不行,我研究研究,能不 disable 就不 disable 。
    谢谢诸位了
    realpg
        5
    realpg  
    PRO
       Jun 6, 2016   ❤️ 1
    selinux 是个极其牛逼的东西
    牛逼到全地球会配这玩意的人屈指可数……
    mikegreen7892003
        6
    mikegreen7892003  
       Jun 6, 2016
    mikegreen7892003
        7
    mikegreen7892003  
       Jun 6, 2016
    @realpg 一般也不是手动配,用工具配。
    就跟不一定要用 iptables ,可以用 firewall-cmd 。。。。
    McContax
        8
    McContax  
       Jun 6, 2016 via Android
    selinux 完全关闭。当时我刚转到完整版的 centos 时也这样, php 无法写入,明明都 777 权限了,后来永久关掉(disable),现在耳根清净,不过我还是没弄明白 selinux 用来干啥
    lslqtz
        9
    lslqtz  
       Jun 6, 2016
    @McContax 开启 selinux 后更安全一些,可以防止进程读写不该读写的东西。。但实际就是卵用。
    dndx
        10
    dndx  
       Jun 6, 2016
    @notgod 根本不需要禁用。 LZ 的 case 简单一行:

    restorecon -R /var/www/html

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

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

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