【问题标题】:how to set umask for directory and exit places如何为目录和退出位置设置umask
【发布时间】:2019-08-06 10:29:00
【问题描述】:

我正在编写一个脚本,它使用以下命令创建要使用的目录mktemp -d

我必须在以上述方式创建的目录中添加一个 umask。我必须将它添加到代码的退出条件中。

下面是示例代码:

DIR1=$(mktemp -d)

wget_output=$(wget -q -P "$DIR1" "$CERT1")
    if [ $? -ne 0 ]; then
        echo "Certificates NOT Found OR Saving the certificates in directory failed."
        exit
    fi

怎么做?

【问题讨论】:

  • 不清楚。 mktemp 不服从 umask 吗?或者你想为它设置一个特定的umask?还是别的什么?
  • 是的,我想设置一个特定的值而不是系统默认值。
  • 事后对它进行 chmod 还不够好?是的,这留下了一个小的漏洞窗口,但未能将其恢复的危险更大。

标签: bash umask


【解决方案1】:

更好的答案可能是 shell,因为 umask 是在 shell 级别保存的。

$SHELL -c "umask $mask; mktemp -d"

这可确保退出当前脚本时不会修改当前的 umask。

【讨论】:

    【解决方案2】:

    我找到了解决办法。

    在文件开头记录原始umask

    umask=$(umask)

    然后在创建目录之前设置值。

    umask 077
    DIR1=$(mktemp -d)
    
    wget_output=$(wget -q -P "$DIR1" "$CERT1")
        if [ $? -ne 0 ]; then
            echo "Certificates NOT Found OR Saving the certificates in directory failed."
            exit
        fi
    

    然后最后恢复umask使用

    umask ${umask}

    所以,更新后的代码变成:

    umask=$(umask) #record umask
    .
    .
    .
    umask 077 # set umask value
    DIR1=$(mktemp -d)
    
    wget_output=$(wget -q -P "$DIR1" "$CERT1")
        if [ $? -ne 0 ]; then
            echo "Certificates NOT Found OR Saving the certificates in directory failed."
            exit
        fi
    
    umask ${umask} # restore umask
    

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      umask 0700
      DIR1="$(mktemp -d)"
      

      将DIR1的权限设置为0700(drwx------)

      【讨论】:

      • 这里的umask不正确。如果我运行你的命令,我会将目录设置为d---------。 umask 应该类似于0077,以使权限最终类似于drwx------
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 2011-04-22
      • 2011-03-11
      • 2018-09-10
      • 2015-08-25
      • 2016-06-21
      相关资源
      最近更新 更多