Вы можете использовать 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
.
Вот ответ на ваш вопрос, аннотированный:
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"; }
Вы можете добавить другие подобные защитные проверки, если посчитаете нужным.