Если rc.local запускается как root, почему он не может коснуться файла

разрешено в мире *nix

В мире *nix разрешено практически все.

возможно (я еще не пробовал в тестовой коробке)

Да, это возможно. Когда пользователю назначается домашний каталог, это каталог, в который он cd по умолчанию попадает при входе в систему. Вы можете изменить домашний каталог ftp_user2 с помощью опции -d в usermod:

usermod -d [directory] [ftp_user2]

В вашем случае это будет выглядеть следующим образом: usermod -d /var/www/vhosts/website/subfolder ftp_user2

Если вам все еще нужно создать ftp_user2, вы можете назначить их домашний каталог при создании, используя useradd.

useradd -m -d /var/www/vhosts/website/subfolder -s /bin/bash ftp_user2

Опция -m создаст домашний каталог пользователя, если он еще не существует. Опция -d указывает, какой домашний каталог должен быть назначен пользователю. Опция -s указывает, какую оболочку будет использовать пользователь при входе в систему. -s не нужен, но обычно хорошей практикой является указание оболочки пользователя по умолчанию, если пользователь будет входить в систему.

и есть ли у этого какой-либо признанный негативный аспект?

Единственный негативный аспект, о котором я могу думать: если кто-то решит удалить ftp_user1 и его домашний каталог, то домашний каталог для ftp_user2 также будет удален.

1
06.02.2019, 20:36
2 ответа

При таком подходе возникают две проблемы. Во-первых, rc.localвыполняется пользователем root, поэтому все создаваемые им файлы будут принадлежать пользователю root, если вы не запустите для них chown. Во-вторых, это дыра в безопасности, поскольку root выполняет код, который потенциально может быть изменен пользователем без привилегий root.

Лучше использовать спецификатор времени @reboot с cronв качестве непривилегированного пользователя. Если у вас уже есть файл crontab , отредактируйте его, добавив эту строку, а затем выполните команду crontab <yourcrontab>. Или используйте команду crontab -eдля прямого входа в эту строку.

@reboot /home/debian/startscript.sh

Обратите внимание, что вам не нужно sh, если скрипт является исполняемым, потому что он начинается с #!/bin/sh.

0
28.04.2021, 23:37

Если ваш дистрибутив использует systemd, проблема может заключаться в том, что /etc/rc.localвыполняется слишком рано , в то время как корневая файловая система по-прежнему доступна только для чтения -или в то время как некоторые другие файловые системы еще не смонтированы.

Если в файле systemd .service, который запускает rc.local, не настроены конкретные зависимости порядка, systemdзапустит его как можно раньше.

Запустите systemctl cat rc-local.service, чтобы увидеть полное определение запущенной службы rc.local. Обратите внимание на любые строки After=и подумайте о самой ранней возможной точке процесса запуска системы -, которая может их удовлетворить. Возможно, вы захотите добавить файл переопределения, который добавляет одну или две дополнительные строки After=в соответствии с потребностями вашей конфигурации.

0
28.04.2021, 23:37

Теги

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