【问题标题】:File permissions, root bash script, edit by user文件权限、root bash 脚本、由用户编辑
【发布时间】:2015-04-08 16:12:59
【问题描述】:

我有一个需要以 root 身份运行的脚本。在此脚本中,我创建目录和文件。运行脚本的用户不能修改文件和目录(当然,除非有 root)。

我已经尝试了在这里和其他网站找到的几种解决方案,首先我尝试mkdir -m 777目录如下:

#!/bin/bash

...

#Check execution location

CDIR=$(pwd)

#File setup

DATE=$(date +"%m-%d_%H:%M:%S")
LFIL="$CDIR/android-tools/logcat/logcat_$DATE.txt"
BFIL="$CDIR/android-tools/backup/backup_$DATE"

mkdir -m 777 -p "$CDIR/android-tools/logcat/"
mkdir -m 777 -p "$CDIR/android-tools/backup/"

...

我还尝试过以 $USER 作为根目录来触摸每个创建的文件和目录,如下所示:

#!/bin/bash

...

#Check execution location

CDIR=$(pwd)

#File setup

DATE=$(date +"%m-%d_%H:%M:%S")
LFIL="$CDIR/android-tools/logcat/logcat_$DATE.txt"
BFIL="$CDIR/android-tools/backup/backup_$DATE"

mkdir -p "$CDIR/android-tools/logcat/"
mkdir -p "$CDIR/android-tools/backup/"

sudo -u $USER touch "$CDIR/"
sudo -u $USER touch "$CDIR/android-tools/"
sudo -u $USER touch "$CDIR/android-tools/logcat/"
sudo -u $USER touch "$CDIR/android-tools/backup/"
sudo -u $USER touch "$CDIR/android-tools/logcat/logcat_*.txt"
sudo -u $USER touch "$CDIR/android-tools/logcat/Backup_*"

...

我也试过从脚本目录手动运行sudo chmod 777 /android-tools/*sudo chmod 777 /*,没有报错,但是没有root权限我还是不能删除文件。

这是完整的脚本,还没有完成。不要在连接到计算机的安卓设备上运行它。

http://pastebin.com/F20rLJQ4

【问题讨论】:

    标签: bash shell root file-permissions


    【解决方案1】:

    touch 不会更改所有权。我想你想要chown

    如果您使用 sudo 运行脚本,$USER 是 root,但 $SUDO_USER 是运行 sudo 的用户,因此您可以使用它。

    如果您不使用sudo,则不能相信$USER 是特定的。调用者可以将其设置为任何值(例如"root cat /etc/shadow",这会使您的上述脚本做出您不希望它做的令人惊讶的事情,因为您说的是$USER 而不是"$USER")。

    如果您使用 setuid 运行此脚本,则需要更安全的东西,例如 id -u,以获取调用进程的合法 UID,而不管 $USER 中的任意字符串是什么。

    如果您通过像这样创建makestuff.sh 来涵盖这两种可能性:

    # $SUDO_USER if set, otherwise the current user
    caller="${SUDO_USER:-$(id -u)}"
    
    mkdir -p foo/bar/baz
    chown -R "$caller" foo
    

    那么你可以这样使用它:

    sudo chown root makestuff.sh
    sudo chmod 755 makestuff.sh
    
    # User runs it with sudo
    sudo ./makestuff.sh
    
    # User can remove the files
    rm -r foo
    

    或者这种方式(如果您想使用 setuid 以便普通用户可以在没有 sudo 访问权限的情况下运行脚本——您可能没有,因为您对此不够小心):

    sudo chown root makestuff.sh
    sudo chmod 4755 makestuff.sh   # Danger! I told you not to do this.
    
    # User runs it without sudo
    ./makestuff.sh
    
    # User can remove the files
    rm -r foo
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-24
      • 2019-08-17
      • 2011-05-09
      • 1970-01-01
      • 2010-12-05
      • 2022-12-15
      • 1970-01-01
      • 2010-09-28
      相关资源
      最近更新 更多