Как узнать, имеет ли данный пользователь разрешения на чтение и/или запись для данного пути
Я должен начать с того, что я считаю себя опытным пользователем. Но сегодня у меня была необходимость автоматизировать это и был в тупике.
предположим, что я root, и как таковой я могу пересечь всю файловую систему, но я не могу запустить "sudo" или "su".
Я данного пользователя и данного пути.
Как я могу проверить, через CLI, сможет ли пользователь читать и / или писать путь?
Я знаю, это звучит легко, но имейте в виду что:
- мы не являемся и не можем стать пользователем.
- мы не можем просто полагаться на конечные разрешения каталога, поскольку разрешения выше по пути могут блокировать доступ к конечному каталогу.
- мы не можем просто полагаться только на разрешения группы каталогов либо, в этом возрасте унаследованных групп.
Я предполагаю, что это не может быть сделано с помощью какой-либо команды, и мне нужно сначала собрать все группы пользователей, а затем пересечь все иерархия пути, проверьте разрешения на чтение по всему пути, а затем чтение и запись для окончательного каталога. Звучит ужасно дорого.
4 ответов
пометьте меня гуру сценариев!
check_access() {
checked_file=
target_user=
result=PASS
groups=`id -G $target_user | sed -e 's| | -o -group |g' -e 's|^|\( -group |' -e 's|$| \)|'`
while [ $checked_file != / ]; do
find $checked_file -maxdepth 0 \
-type f \( \
\( -user $target_user -perm 0400 \) \
-o \( $groups -perm 0040 \) \
-o -perm 0004 \
\) -o -type d \( \
\( -user $target_user -perm 0100 \) \
-o \( $groups -perm 0010 \) \
-o -perm 0001 \
\) >/dev/null 2>&1 || result=FAIL
checked_file=`dirname $checked_file`
done
echo $result
}
Я не могу дать полного ответа, и я не могу добавить ничего существенного к вашим собственным идеям, кроме, возможно, этого:
Я подозреваю, что общий подход к проверке эффективного права доступа не существует, просто потому, что права доступа сильно зависит от файловой системы(с). Например, проверка прав доступа работает совершенно иначе в файловых системах, использующих стандарт Unix rwx
флаги (например, Linux ' ext2, ext3), чем с файловыми системами, поддерживающими ACLs (такие as XFS или NTFS).
может быть несколько конкретных инструменты, которые делают то, что вы хотите сделать для определенных типов файловых систем. (Аналогия: такие инструменты, как fsck
, mkfs
может существовать для каждого типа файловой системы.)
особенно с UNIX-подобными операционными системами, где все виды файловых систем могут быть установлены в одной большой структуре каталогов, предполагая, что только один конкретный механизм разрешений может привести к проблемам.
если вы создайте свое собственное решение для этой проблемы, сначала подумайте об этом факте, а затем решите, какой именно механизм(ы) доступа вы хотите поддержать. (Я не уверен, но я мог бы представить, что спецификация Unix / POSIX предписывает rwx
флаги прав доступа как минимум, которые должен поддерживать каждый Unix.)
лучший способ проверить через самого пользователя:
if sudo su - $user_to_check -c "[[ -r $path_to_check ]]"
then echo "$user_to_check can read $path_to_check"
else echo "$user_to_check can not read $path_to_check"
fi
if sudo su - $user_to_check -c "[[ -w $path_to_check ]]"
then echo "$user_to_check can write $path_to_check"
else echo "$user_to_check can not write $path_to_check"
fi
ls -l <file-name or dir-name>
Предположим, вы хотите проверить разрешения для каталогов закачек.Входить
ls -l uploads
Это приведет к такому
total 20
drwxrwxr-x 2 tomcat ec2-user 4096 Nov 5 04:21 deals
drwxrwxr-x 2 tomcat ec2-user 4096 Nov 5 04:25 gallery-images
drwxrwxr-x 3 tomcat ec2-user 4096 Nov 5 04:25 hotels
drwxrwxr-x 3 tomcat ec2-user 4096 Nov 5 04:28 rooms
drwxrwxr-x 3 tomcat ec2-user 4096 Nov 5 04:32 temp