Bash-файл | В доступе отказано, нет такого файла или каталога [дубликат]

Я создал файл bash для регистрации пользователей на сервере ProFTPD. Файл bash запускается из файла PHP, отправляя 5 переменных в качестве параметров, а именно: имя, фамилию, пользователь, пароль и случайный номер из 4 цифр (например, 7215)

Каждый раз, когда я запускаю его, я получаю эти ошибки, и создаются только пользователи и их папки. Конфигурация ProFTPD не меняется.

#!/bin/bash

var1=$(echo $1 | tr [:upper:] [:lower:] | cut -c 1)
var2=$(echo $2 | tr [:upper:] [:lower:] | cut -c 1)

rnumber=$(echo $5)
dir=$(echo "dir")
folder=$(echo $var1$var2$var3$dir$rnumber)
user=$(echo $3)

sudo mkdir -p /var/www/ftpdir/Hostitec/usersftp/$folder

sudo chmod 777 /var/www/ftpdir/Hostitec/usersftp/$folder

command=$(cat -n /etc/proftpd/proftpd.conf | grep DefaultRoot | tail -n 1 | cut -f 1)

sudo head -n $command /etc/proftpd/proftpd.conf > /etc/proftpd/copyconf

echo "DefaultRoot   /var/www/ftpdir/Hostitec/usersftp/$folder $user" >> /etc/proftpd/copyconf

lastone=$(expr $command + 1)

sudo tail -n +$lastone /etc/proftpd/proftpd.conf >> /etc/proftpd/copyconf

sudo cat /etc/proftpd/copyconf > /etc/proftpd/proftpd.conf

sudo rm /etc/proftpd/copyconf

sudo useradd $user

sudo chown $user:$user /var/www/ftpdir/Hostitec/usersftp/$folder

echo "$user:$4" | sudo chpasswd -m

sudo service proftpd restart

checkdir=$(ls /var/www/ftpdir/Hostitec/usersftp/$folder | grep $folder)

checkuser=$(cat /etc/passwd | grep $user)

echo $checkdir > check.txt

echo $checkuser > check.txt

if ! [ -s check.txt ]
then
    rm -r /var/www/ftpdir/Hostitec/usersftp/$folder
    sudo userdel $user
fi

Я получаю следующие ошибки:

./script.sh: line 17: /etc/proftpd/copyconf: Permission denied
./script.sh: line 19: /etc/proftpd/copyconf: Permission denied
./script.sh: line 23: /etc/proftpd/copyconf: Permission denied
cat: /etc/proftpd/copyconf: No such file or directory
rm: You cannot remove '/etc/proftpd/copyconf': No such file or directory
1
задан 5 September 2018 в 14:38

2 ответа

Перенаправление оболочки не, работал как корень. Попытайтесь заменить перенаправления tee

Замените их:

# Overwrite
sudo command > /path/file  # Original
sudo command | sudo tee /path/file  # Replacement

# Append
sudo command >> /path/file  # Original
sudo command | sudo tee -a /path/file  # Replacement

Другая альтернатива должна запустить весь скрипт как root

0
ответ дан 7 December 2019 в 23:26

Существует несколько проблем с Вашим сценарием, например, в строке sudo cat /etc/proftpd/copyconf > /etc/proftpd/proftpd.conf только sudo cat /etc/proftpd/copyconf выполняется с полномочиями суперпользователя, > /etc/proftpd/proftpd.conf часть выполняется с полномочиями пользователя вызова, я думаю, что следующие изменения в Вас сценарий решат Ваши вопросы.

    #!/bin/bash

var1=$(echo $1 | tr [:upper:] [:lower:] | cut -c 1)
var2=$(echo $2 | tr [:upper:] [:lower:] | cut -c 1)

rnumber=$(echo $5)
dir=$(echo "dir")
folder=$(echo $var1$var2$var3$dir$rnumber)
user=$(echo $3)

sudo mkdir -p /var/www/ftpdir/Hostitec/usersftp/$folder

sudo chmod 777 /var/www/ftpdir/Hostitec/usersftp/$folder

command=$(cat -n /etc/proftpd/proftpd.conf | grep DefaultRoot | tail -n 1 | cut -f 1)

sudo head -n $command /etc/proftpd/proftpd.conf > /tmp/copyconf

echo "DefaultRoot   /var/www/ftpdir/Hostitec/usersftp/$folder $user" >> /tmp/copyconf

lastone=$(expr $command + 1)

sudo tail -n +$lastone /etc/proftpd/proftpd.conf >> /tmp/copyconf

sudo cp /tmp/copyconf /etc/proftpd/proftpd.conf

sudo rm /tmp/copyconf

sudo useradd $user

sudo chown $user:$user /var/www/ftpdir/Hostitec/usersftp/$folder

echo "$user:$4" | sudo chpasswd -m

sudo service proftpd restart

checkdir=$(ls /var/www/ftpdir/Hostitec/usersftp/$folder | grep $folder)

checkuser=$(cat /etc/passwd | grep $user)

echo $checkdir > check.txt

echo $checkuser > check.txt

if ! [ -s check.txt ]
then
    rm -r /var/www/ftpdir/Hostitec/usersftp/$folder
    sudo userdel $user
fi
0
ответ дан 7 December 2019 в 23:26

Другие вопросы по тегам:

Похожие вопросы: