应用程序在服务器上创建文件目录权限 0777,会有风险吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
liudaqi
V2EX    Linux

应用程序在服务器上创建文件目录权限 0777,会有风险吗?

  •  
  •   liudaqi Jan 24, 2018 6380 views
    This topic created in 3015 days ago, the information mentioned may be changed or developed.
    应用程序 App (是 root )在服务器上创建了一个文件目录,权限设 0777, 会有风险吗?
    (当然,前提是服务器一般不会配除 root 外的其他账户,也不会把这个文件目录直接开给 web server 的公开路径)
    36 replies    2018-01-27 17:54:56 +08:00
    smileawei
        1
    smileawei  
       Jan 24, 2018   5
    应用程序 app 用 root 启动就已经是最大的安全风险了。只要程序有漏洞。黑客就可以用 root 账号执行操作。目录 777 和 600 其实都没区别
    shapimai
        2
    shapimai  
       Jan 24, 2018   1
    注入之后不就直接拿到 root 权限了 安全的办法还是独立在普通帐号下跑好一点 权限多少没有什么区别
    FFLY
        3
    FFLY  
       Jan 24, 2018   1
    @smileawei +1,必须跑非 root 权限,否则什么权限都一样。
    fcten
        4
    fcten  
       Jan 24, 2018   2
    不必要的权限就是风险。顺便没见过 Linux 上只有一个 root 用户的……(不能控制台登录的用户就不叫用户了吗,气!)
    yujieyu7
        5
    yujieyu7  
       Jan 24, 2018   3
    应用程序 App 都能给 root ?日常服务器的维护人员都没直接 root 权限
    liudaqi
        6
    liudaqi  
    OP
       Jan 24, 2018
    @smileawei
    @shapimai
    @FFLY
    @fcten

    root 用密钥登陆,没那么危险吧
    PureWhite
        7
    PureWhite  
       Jan 24, 2018   1
    @liudaqi
    注入是不需要密钥的。。。。
    你以为黑客和你一样也是直接用 ssh 登上你服务器的啊。。。。
    liudaqi
        8
    liudaqi  
    OP
       Jan 24, 2018
    @yujieyu7
    运维没有 root 权限,那环境配置怎么搞啊?

    @PureWhite
    防注入的流程有 DBA 检查着,我只负责文件处理的模块,别让文件路径访问权限出纰漏就行,真要是系统权限被攻下,这个责任我还不够资格格抗哪
    lfzyx
        9
    lfzyx  
       Jan 24, 2018
    应用程序 App 在服务器上创建了一个文件目录,权限设 0777, 完全没有风险

    有风险的仅仅是 App 用 root 启动而已
    PureWhite
        10
    PureWhite  
       Jan 24 2018
    @liudaqi
    @lfzyx 正解,我们一直说的是用 root 启动。。。因为如果拿到了 root 权限相当于拿到了一切。
    yujieyu7
        11
    yujieyu7  
       Jan 24, 2018
    @liudaqi sudo 基本够用了
    MartinWu
        12
    MartinWu  
       Jan 24, 2018
    root 跑对外的服务本身就是最大的风险了啊。。。。。
    lolizeppelin
        13
    lolizeppelin  
       Jan 24, 2018 via Android
    上面 777 没问题的 程序员吧哈哈哈
    loveminds
        14
    loveminds  
       Jan 24, 2018
    不建议给任何东西大于 755 的权限,Socket 这种特殊物体除外
    liuxu
        15
    liuxu  
       Jan 24, 2018
    换用户名,配上 selinux role
    jyf007
        16
    jyf007  
       Jan 24, 2018
    root 权限仅限急救时使用。
    Tink
        17
    Tink  
    PRO
       Jan 24, 2018 via iPhone
    @liudaqi #6 都注入了你的密钥还有用???
    xnile
        18
    xnile  
       Jan 24, 2018
    能不用 root 用户尽量不要用 root,否则程序有漏洞话很容易被提权,整个服务就沦陷了,不安全
    Applenice
        19
    Applenice  
       Jan 25, 2018
    不建议应用给那么高的权限
    msg7086
        20
    msg7086  
       Jan 25, 2018
    密钥可以让你获得 root 权限。现在你 App 都已经获得 root 权限了,拿下 App 就可以随便搞了,还要密钥作甚。
    lemonda
        21
    lemonda  
       Jan 25, 2018 via Android   1
    意思是不是用 root 直接运行 service nginx start 或者 service php7.0-fpm start 这样的命令不安全?
    那么重启后开机启动时这些服务是以什么用户运行的呢?
    liudaqi
        22
    liudaqi  
    OP
       Jan 25, 2018 via iPhone
    @lemonda 是的,就是这个问题。基础服务用什么用户启动呢?
    liuzuo
        23
    liuzuo  
       Jan 25, 2018   1
    @lemonda nginx 如果需要 512 一下端口需要用 root 启动,但 nginx 可以配置运行用户。
    hugee
        24
    hugee  
       Jan 25, 2018 via Android
    风险太大
    Hardrain
        25
    Hardrain  
       Jan 25, 2018
    @liudaqi 私钥登录那是 SSH 的事。
    使用私钥登录和禁止密码登陆不是在 /etc/ssh/sshd_config 里面配置的么?
    Hardrain
        26
    Hardrain  
       Jan 25, 2018
    做个假设,你的服务以 HTTP(S)为协议,后端是 PHP
    直接用 root 运行 php-fpm 的话,如果有个上传漏洞被用来挂了 shell


    我可以想象骇客输入 whoami 后兴奋的表情,毕竟提权都免了
    Hardrain
        27
    Hardrain  
       Jan 25, 2018   1
    @lemonda Apache Nginx 等都可以配置运行所使用的用户
    用 root 用户通过 systemd/sysV 等启动 web 服务器 != 服务器以 root 用户运行
    LokiSharp
        28
    LokiSharp  
       Jan 25, 2018
    用包管理正常安装的话 Nginx 主进程 root,子进程是 nginx 所以没啥问题。
    LokiSharp
        29
    LokiSharp  
       Jan 25, 2018   1
    @lemonda #21 这个是启动服务的,具体用什么启动的,可以看 /etc/systemd/system/ /usr/lib/systemd/system/ 里面的配置脚本。
    MeteorCat
        30
    MeteorCat  
       Jan 25, 2018 via Android
    777 权限一般主要负责文件上传和日志写入,有些目录需要给 777 保证上传目录和日志能够正常写入,这些问题都不大
    JamesMackerel
        31
    JamesMackerel  
       Jan 25, 2018 via iPhone   1
    @lemonda 就拿 nginx 来说。它的架构是一个 manager 管很多 worker。你开一个 ubuntu 下的 nginx 看看,是不是只有一个是 root 的,其余都是 www-data。
    smileawei
        32
    smileawei  
       Jan 25, 2018
    @liudaqi 秘钥登录与否与程序 root 运行的风险无关。你程序是 root 用户在跑 那么程序也就有 root 用户的权限。假设黑客通过你程序的漏洞黑进了 你的机器。他同样有 root 权限。秘钥登录是指通过 ssh 登录服务器。黑客不需要通过 ssh 登录你的服务器
    GG668v26Fd55CP5W
        33
    GG668v26Fd55CP5W  
       Jan 25, 2018 via iPhone
    app 执行用户和 777 不能乱开,我宁愿把 owner 设置成实际运行的用户,比如一个 php 的网站,只有储存用户上传文件的目录用的 owner 是 php-fpm 的运行用户。权限 755,其他目录 owner 都是 root,755. 并且在 nginx 或 Apache 里禁止上传目录解析 php 脚本。
    lemonda
        34
    lemonda  
       Jan 27, 2018
    @liuzuo
    @Hardrain
    @LokiSharp
    @JamesMackerel
    感谢释疑,因为我有很多台 VPS 都是直接用 root 这么直接运行的 - - !


    @falcon05
    我也是这么干的,每个网站一个 owner, 那么若是给这个网站添加 FTP 用户怎么办呢? 我是都给个 SFTP 账号
    JamesMackerel
        35
    JamesMackerel  
       Jan 27, 2018
    @lemonda #34
    ftp 就在 ftp 那边做权限控制吧。

    在 Linux 里,目录的 x 权限不是执行,是“是否可以 cd 到这个目录”。
    控制这些权限很重要,比如我拿了一个低权限用户的 webshell,然后如果你的网站是 777,那我就可以上传脚本,然后如果手头有 EXP 的话,就可以拿到 root 权限,为所欲为。当然这只是一个思路,实际上并不会那么简单,但是安全工作做好了至少可以过滤一大批别有居心的人。
    lemonda
        36
    lemonda  
       Jan 27, 2018
    @JamesMackerel
    奥,我一直用文件夹 755 和 文件 644。
    问的原因是 PHP-fpm 默认运行用户是 www 或者 www-data,FTP 上传的文件用户属组是 ftpuser:ftpgroup,这样比如安装 WordPress 时就提示有权限问题,所以我现在都是这么干的 passwd www-data
    About     Help     Advertise     Blog     API     FAQ     Solana     1486 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 70ms UTC 17:03 PVG 01:03 LAX 10:03 JFK 13:03
    Do have faith in what you're doing.
    ubao msn 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