文件权限,root bash 脚本,由用户编辑

File permissions, root bash script, edit by user

我有一个脚本需要 运行 作为 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_*"

...

我也尝试过从脚本目录手动 运行ning sudo chmod 777 /android-tools/*sudo chmod 777 /* ,没有错误,但我仍然无法在没有 root 权限的情况下删除文件。

这是完整的脚本,尚未完成。不要 运行 它与 android 设备连接到您的计算机。

http://pastebin.com/F20rLJQ4

touch 不改变所有权。我想你想要 chown.

如果您使用 sudo 到 运行 您的脚本,$USER 是 root,但 $SUDO_USER 是 运行 sudo,所以你可以使用它。

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

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

如果您通过像这样 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