Как вывести в терминал права конкретного пользователя для конкретного файла?
Как выводить в терминал права доступа(читать/писать/исполнять) к конкретному файлу для конкретно указанного пользователя?
ls -l выводит все скопом, а stat выводит только для владельца.
Здесь была подобная тема уже 2 года назад, но по ней выходит ошибка, сейчас это можно как то реализовать? прошлая подобная тема
По данному коду выходит постоянно ---, независимо от вводимого пользователя.
#!/bin/bash
file=$1
user=$2
for p in r w x; do
c="-"
sudo -u "$user" test -$p "$file" && c="$p"
r=$r$c
done
echo "у пользователя $user имеются права $r на $file"
Ответы (1 шт):
Автор решения: PotroNik
→ Ссылка
Требуется тщательно доработать напильником, но как то так:
check_grant() {
#Возвращаем ошибку если не передан ни один параметр
fileName=${1:?Параметры не могут быть пустыми}
#Если второй параметр пустой то проверяем для текущего пользователя
userName=${2:-`whoami`}
#Проверяем существует ли файл
[[ -e "${fileName}" ]] || { echo "Файл ${fileName} не существует"; return 1; }
#Получаем группы для пользователя
userGroup=`groups ${userName}`
#Получаем данные о файле
IFS=';' read typeFile userFile groupFile access <<< `stat -c "%F;%U;%G;%A" "${fileName}"`
#(НЕверно)на случай если это каталог убираем из прав букву d
#Исключил, так как данный атрибут можно исключить при выборе элементов
if [[ $userFile == $userName ]]; then
userPriv=${access:1:3}
elif [[ -n `grep -w "${groupFile}" <<< "${userGroup/*:/}"` ]]; then
userPriv=${access:4:3}
else
userPriv=${access:7:3}
fi
printf "%-15s | %-20s | %s" "$userName" "`sed 's/---/ без доступа/;s/x/ запуск/;s/r/ чтение/;s/w/ запись/;s/-//g' <<< "${userPriv}"`" "${typeFile} ${fileName}"
}
# check_grant /etc/crontab
root | чтение запись | обычный файл /etc/crontab
#check_grant /etc/crontab robot
robot | чтение | обычный файл /etc/crontab
