Мой bash-скрипт dotfiles каким-то образом удалил свой собственный каталог?

Вы можете использовать audit2why, чтобы узнать, почему доступ был запрещен, и, возможно, существует ли логическое значение SELinux , разрешающее доступ.

SELinux boolean httpd_enable_homedirsпозволяет Apache читать домашние каталоги, и в вашем случае этого должно быть достаточно. Вы можете включить его, используя (как root)setsebool -P httpd_enable_homedirs 1.

Если вам нужно изменить политику SELinux,вы можете использоватьaudit2allowдля создания модуля политики для разрешения доступа.

Правила SELinux проверяются после разрешений Unix. Правила SELinux только добавляют более строгие правила контроля доступа и никогда не сделают существующие права доступа к файлам менее ограничивающими.

Apache имеет FollowSymLinks и SymLinksIfOwnerMatchпараметры , которые влияют на то, как обрабатываются символические ссылки. По умолчанию FollowSymlinks включен, и Apache переходит по символическим ссылкам, но эти параметры можно изменить в разделах файла конфигурации или в файлах .htaccess.

2
21.07.2020, 03:45
1 ответ

Вот ответ на ваш вопрос, аннотированный:

drakeprovost@shatterdome:~/RoverCoreOS$ git clone https://github.com/DrakeProvost/dotfiles.git
Cloning into 'dotfiles'...
remote: Enumerating objects: 42, done.
remote: Counting objects: 100% (42/42), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 42 (delta 21), reused 29 (delta 11), pack-reused 0
Unpacking objects: 100% (42/42), done.

ПРИМЕЧАНИЕ. :вы находились в каталоге ~/RoverCoreOS, когда запускали приведенный выше git clone, поэтому вышеприведенный каталог создал каталог ~/RoverCoreOS/dotfiles, а не ~/dotfiles.

drakeprovost@shatterdome:~/RoverCoreOS$ cd dotfiles/
drakeprovost@shatterdome:~/RoverCoreOS/dotfiles$ ls
bash_aliases  bashrc  makesymlinks.sh  README.md  vimrc
drakeprovost@shatterdome:~/RoverCoreOS/dotfiles$./makesymlinks.sh 
Creating /home/drakeprovost/dotfiles_old for backup of any existing dotfiles in ~
Moving any existing dotfiles from ~ to /home/drakeprovost/dotfiles_old
Creating symlink to /home/drakeprovost/dotfiles/bash_aliases in ~
Creating symlink to /home/drakeprovost/dotfiles/bashrc in ~
Creating symlink to /home/drakeprovost/dotfiles/vimrc in ~

To complete the setup, please run the following command:

    source ~/.bashrc

drakeprovost@shatterdome:~/RoverCoreOS/dotfiles$ ls
bash_aliases  bashrc  makesymlinks.sh  README.md  vimrc

Все вышеперечисленное произошло в ~/RoverCoreOS/dotfiles.

drakeprovost@shatterdome:~/RoverCoreOS/dotfiles$ cd

Теперь вы находитесь в каталоге~

drakeprovost@shatterdome:~$ ls -al #.bashrc,.vimrc, and.bash_aliases were all red symlinks here, meaning they pointed to non-existent files. Also note that the dotfiles directory has disappeared

~/dotfilesне исчез, он никогда не существовал. ~/RoverCoreOS/dotfilesсуществовал и предположительно существует до сих пор.

...
drakeprovost@shatterdome:~$ git clone https://github.com/DrakeProvost/dotfiles.git
Cloning into 'dotfiles'...
remote: Enumerating objects: 42, done.
remote: Counting objects: 100% (42/42), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 42 (delta 21), reused 29 (delta 11), pack-reused 0
Unpacking objects: 100% (42/42), done.

Теперь вы создали каталог ~/dotfiles, и с этого момента все работает так, как вы ожидаете.

Я бы порекомендовал вам изменить ваш сценарий, добавив в него некоторые защитные проверки. Они не могут помешать вам сделать вышеперечисленное, но они могут, по крайней мере, предупредить вас о некоторых проблемах, и они бы обнаружили указанную выше проблему (, предполагая, что у вас нет старого каталога dotfilesс ожидаемыми файлами в вашем HOME. директор ), например:

[[ -d "$dir" ]] || { ret="$?"; echo "dir \"$dir\" does not exist"; exit "$ret"; }

for file in $files; do
    [[ -s "$dir/$file" ]] || { ret="$?"; echo "file \"$dir/$file\" does not exist or is empty"; exit "$ret"; }
done

# create dotfiles_old in homedir
echo "Creating $olddir for backup of any existing dotfiles in ~"
mkdir -p "$olddir" || { ret="$?"; echo "Failed to create olddir \"$olddir\""; exit "$ret"; }

Вы можете добавить другие подобные защитные проверки, если посчитаете нужным.

2
18.03.2021, 23:18

Теги

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