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

时间:2015-02-09 00:18:36

标签: bash shell root file-permissions

我有一个需要以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作为root触摸每个创建的文件和目录,如下所示:

#!/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权限的情况下删除这些文件。

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

http://pastebin.com/F20rLJQ4

1 个答案:

答案 0 :(得分:1)

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

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

如果您没有使用sudo,则无法相信$USER具体。调用者可以将其设置为任何内容(例如"root cat /etc/shadow",这会使您的上述脚本执行您不希望它执行的令人惊讶的事情,因为您说$USER而不是"$USER"。)< / p>

如果您使用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