Сценарий, который проверяет, что Apache (или любая учетная запись) имеет верные полномочия перейти к каталогу

cpx.exe из utx проекта поддерживает рекурсивное копирование и рекурсивные подстановочные знаки для простого и мощного выбора файлов для копирования.

1
задан 4 March 2012 в 23:20
4 ответа

Для Debian:

sudo -u www-data test -r /path/to/file && echo ok
6
ответ дан 3 December 2019 в 16:37

Примите во внимание:

#!/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!
1
ответ дан 3 December 2019 в 16:37

Вот что у меня получилось (должен запускаться как пользователь, который может 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"
0
ответ дан 3 December 2019 в 16:37

Следующие команды 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
0
ответ дан 3 December 2019 в 16:37

Теги

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