文件权限,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 设备连接到您的计算机。
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
我有一个脚本需要 运行 作为 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 设备连接到您的计算机。
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