cpx.exe из utx проекта поддерживает рекурсивное копирование и рекурсивные подстановочные знаки для простого и мощного выбора файлов для копирования.
Примите во внимание:
#!/bin/bash
# testperms.sh
if [ -r $1 ];
then echo "Can read file!";
else
echo "Cannot read file!";
fi
Использование:
shultzc@lithium:~$ ./testperms.sh /etc/ssl
Can read file!
shultzc@lithium:~$ ./testperms.sh /etc/ssl/private
Cannot read file!
Вы должны иметь возможность адаптировать этот код к своим потребностям. В сочетании с sudo
его можно легко использовать для проверки доступности файлов в каталогах только с разрешениями + x (например, для многих домашних каталогов), например:
shultzc@lithium:~$ sudo -u www-data ./testperms.sh /home/shultzc/testperms.sh
Can read file!
shultzc@lithium:~$ sudo -u www-data ./testperms.sh /home/shultzc
Cannot read file!
Вот что у меня получилось (должен запускаться как пользователь, который может su - <тестовый пользователь>
:
#!/bin/bash
IFS='/'
CWD='/'
for dir in $2; do
# Set directory to test
if [[ $CWD == '/' ]]
then
CWD="/$dir"
else
CWD="${CWD}/${dir}"
fi
# Test if user has access
if !(su - $1 -c "cd $CWD" 2> /dev/null)
then
echo "$CWD - No access for $1"
exit -1
fi
done
echo "Access for $1 all the way through $2"
Следующие команды find
должны быть запускаться как root или, по крайней мере, как пользователь, имеющий полный доступ к дереву каталогов. Вам потребуется дополнительная проверка, чтобы проверить доступ к путям, используемым в командах поиска. Это можно сделать, запустив команду от имени целевого пользователя. Сбои при запуске от имени пользователя без полномочий root должны обрабатываться соответствующим образом.
Замените / srv / www
соответствующим каталогом или каталогами в соответствии с вашими требованиями. Измените пользователя и группу соответствующим образом для других пользователей. Если пользователь принадлежит к нескольким группам, вам нужно будет добавить дополнительные тесты для вторичных групп. (Во многих случаях может быть достаточно просто пометить файлы, принадлежащие вторичным группам.)
Для системы, где apache
работает как www-data: www-data
, будет найдено следующее файлы, которые нельзя прочитать.
find /srv/www ! -type d ! \( -user www-data -perm -400 \) -a ! \( -group www-data -perm -040 \) -a ! -perm -004
Эквивалент для доступных каталогов:
find /srv/www -type d ! \( -user www-data -perm -500 \) -a ! \( -group www-data -perm -050 \) -a ! -perm -005
Для каталогов, которые не нужно указывать, используйте 1
вместо 5
в приведенном выше примере. Файлы с известными именами будут доступны, но автоматическое создание индекса не будет.
Вы также можете убедиться, что только несколько файлов или каталогов могут быть записаны. Следующее позволяет найти файлы и каталоги, которые тоже могут быть записаны.
find -L /srv/www \( -user www-data -perm -200 \) -o \( -group www-data -perm -020 \) -a -perm -002