2015-02-09 5 views
1

У меня есть скрипт, который должен запускаться от имени root. В этом скрипте я создаю каталоги и файлы. Файлы и каталоги не могут быть изменены пользователем, который запускал скрипт (если, конечно, не существует root).Права доступа к файлам, скрипт root bash, редактировать пользователя

Я попробовал несколько решений, найденные здесь и другие сайты, сначала я пытался 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 /* из каталога сценария, не дал никаких ошибок, но я до сих пор не могу удалить файлы без корневого разрешения.

Heres полный сценарий, это еще не сделано. Не запускайте его с помощью устройства Android, подключенного к компьютеру.

http://pastebin.com/F20rLJQ4

ответ

1

touch не меняет владельца. Я думаю, вы хотите chown.

Если вы используете sudo для запуска сценария, $USER является корень, но $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 

Или таким образом (если вы хотите использовать УИП так обычных пользователей может запускать сценарий без доступа к 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 
Смежные вопросы