V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
liudaqi
V2EX  ›  Linux

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

  •  
  •   liudaqi · 2018-01-24 15:12:06 +08:00 · 5807 次点击
    这是一个创建于 2529 天前的主题,其中的信息可能已经有所发展或是发生改变。
    应用程序 App (是 root )在服务器上创建了一个文件目录,权限设 0777, 会有风险吗?
    (当然,前提是服务器一般不会配除 root 外的其他账户,也不会把这个文件目录直接开给 web server 的公开路径)
    36 条回复    2018-01-27 17:54:56 +08:00
    smileawei
        1
    smileawei  
       2018-01-24 15:18:16 +08:00   ❤️ 5
    应用程序 app 用 root 启动就已经是最大的安全风险了。只要程序有漏洞。黑客就可以用 root 账号执行操作。目录 777 和 600 其实都没区别
    shapimai
        2
    shapimai  
       2018-01-24 15:22:47 +08:00   ❤️ 1
    注入之后不就直接拿到 root 权限了 安全的办法还是独立在普通帐号下跑好一点 权限多少没有什么区别
    FFLY
        3
    FFLY  
       2018-01-24 15:22:55 +08:00   ❤️ 1
    @smileawei +1,必须跑非 root 权限,否则什么权限都一样。
    fcten
        4
    fcten  
       2018-01-24 15:29:29 +08:00   ❤️ 2
    不必要的权限就是风险。顺便没见过 Linux 上只有一个 root 用户的……(不能控制台登录的用户就不叫用户了吗,气!)
    yujieyu7
        5
    yujieyu7  
       2018-01-24 15:33:01 +08:00   ❤️ 3
    应用程序 App 都能给 root ?日常服务器的维护人员都没直接 root 权限
    liudaqi
        6
    liudaqi  
    OP
       2018-01-24 15:33:11 +08:00
    @smileawei
    @shapimai
    @FFLY
    @fcten

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

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

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


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


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

    在 Linux 里,目录的 x 权限不是执行,是“是否可以 cd 到这个目录”。
    控制这些权限很重要,比如我拿了一个低权限用户的 webshell,然后如果你的网站是 777,那我就可以上传脚本,然后如果手头有 EXP 的话,就可以拿到 root 权限,为所欲为。当然这只是一个思路,实际上并不会那么简单,但是安全工作做好了至少可以过滤一大批别有居心的人。
    lemonda
        36
    lemonda  
       2018-01-27 17:54:56 +08:00
    @JamesMackerel
    奥,我一直用文件夹 755 和 文件 644。
    问的原因是 PHP-fpm 默认运行用户是 www 或者 www-data,FTP 上传的文件用户属组是 ftpuser:ftpgroup,这样比如安装 WordPress 时就提示有权限问题,所以我现在都是这么干的 passwd www-data
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   977 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:00 · PVG 04:00 · LAX 12:00 · JFK 15:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.