【问题标题】:Using mkdir -m -p and chown together correctly正确使用 mkdir -m -p 和 chown
【发布时间】:2014-11-10 11:32:31
【问题描述】:

我想使用 bash 脚本创建一个目录,然后同时将模式设置为 00755

mkdir -p -m=00755 "/dir/dir2"

这是一起使用它们的正确方法吗?我可以在创建它们时将 chown 命令添加到同一行吗?

【问题讨论】:

    标签: linux bash sh mkdir


    【解决方案1】:

    有点像这样:

    install -d -m 0755 -o someuser -g somegroup /dir/dir2
    

    【讨论】:

    • 谢谢,这就是我要找的。是否可以为父目录“/dir/”赋予相同的所有者和组,而不仅仅是“/dir2/”?
    • 您可能必须在命令行上同时传递它们,例如install -d ... /dir /dir/dir2.
    • 我在尝试使用 install -d -m 0755 -o 1000 -g 1000 / 创建 /dir 目录时遇到以下错误:install: cannot change owner and permissions of ‘/dir’: No such file or directory。我认为这个想法是在同一个命令中创建一个目录并更改所有者?
    • 我已经厌倦了mkdir,然后是chown
    【解决方案2】:

    如果您想在创建过程中设置所有者,您可以简单地模拟为该用户,例如使用sudo

    sudo -uTHE_USER mkdir -p -m=00755 "/dir/dir2"
    

    这样做的好处是创建和更改所有权之间没有时间差,否则如果被利用可能会有害。

    【讨论】:

    • 如果你想在THE_USER 没有写访问权限的目录下创建一个属于THE_USER 的目录,那是行不通的。
    • 您在问题中没有提到这一点,但您是对的。然后我会将操作分成两个单独的创建。
    • 明确地说,这不是我的问题,我不知道 OP 是否需要该功能。
    【解决方案3】:

    是的,应该可以。至于 chown,只需按照命令 ' && chown... '。 && 类似于 ;除了下一个命令在上一个命令成功退出 (0) 时执行。

    【讨论】:

    • 根本不是原子的——这意味着存在一个目录被错误用户拥有的时刻。当然,除了@hek2mgl 给出的方法之外,这很难解决,如果初始用户是不受信任的进程无法访问的用户,它不一定是有害的。我必须查看install 的实现才能知道它是否有同样的问题。
    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2014-01-27
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多