Как найти файл с определенным разрешением определенного пользователя?

Если можно загрузить debian пакет, этот сайт мог бы помочь создать opkg файл из него.

Если об/мин является единственным доступным форматом, Вы могли бы иметь успех, выполняющий это через посторонний объект сначала.

4
19.09.2013, 12:45
3 ответа

Необходимо искать файлы, которые являются RW всеми ИЛИ являются RW uid пользователя ИЛИ которые являются RW всеми группами, которых пользователь является членом. Но это немного более сложно, чем это. Как указано здесь Stephane Chazelas, если файл принадлежит пользователю затем ТОЛЬКО владелец количество перманента, и если файл принадлежит группе, что пользователь является членом затем только группы количество перманента.

Таким образом, мы должны проверить на "owner=RW или (не владелец и group=rw) или (не владелец и не группа и other=rw)"

Можно получить список ценурозов группы, которых пользователь является членом с id -G. Это может использоваться для построения командной строки находки со стандартной заменой команды оболочки.

Мой исходный ответ имел остроту, но это задания слишком сложно, чтобы хотеть сделать в остроте. Вот сценарий оболочки удара, который делает задание.

#! /bin/bash

U="$1"      # username to do perm search on - e.g. popo
TOPDIR="$2" # starting directory for search - e.g. /Users/Me/Desktop

# permissions to search for - defaults to "rw"
PERMS=${3:-rw}

# permission bits "style".  "/"=ANY or "-"=ALL. defaults to / 
#
# see find(1) and search for '-perm -mode' or '-perm /mode' for 
# details on how this works.
PSTYLE=${4:-/}

# construct a find expression specifying all groups that the user
# is a member of
GIDS="$(for i in $(id -G "$U"); do echo -n " -gid $i -o "; done)"
GIDS=$(echo "$GIDS" | sed -e 's/ -o $//')    # strip trailing " -o "

find "$TOPDIR" \
   \( -user "$U" -perm ${PSTYLE}u=$PERMS \) \
   -o \( -not -user "$U" -a \( $GIDS \) -perm ${PSTYLE}g=$PERMS \) \
   -o \( -not -user "$U" -not \( $GIDS \) -perm ${PSTYLE}o=$PERMS \) 

Этот скрипт должен быть запущен как корень. У других пользователей не может быть необходимых полномочий посмотреть во всех каталогах, что popo может.

Примечание: Я протестировал это в системе Linux Debian с помощью последних версий id от GNU Coreutils и find от GNU findutils. Реализации Mac id и find может отличаться, я не имею Mac в наличии в данный момент для тестирования. Если это отличается, проверьте страницы справочника Mac на id и find - вещи искать, который мог бы потребовать, чтобы изменение удовлетворило Mac, -G и -u опции для id и -perm / или '-перманент -' опции find.

3
27.01.2020, 20:52
  • 1
    на самом деле, они находят, что команды проигнорируют читаемые миром файлы, которые не принадлежат popo или читаемые группами popo. потребность добавить /-perm o+r -o сразу прежде ... -uid . я обновил ответ. –  cas 19.09.2013, 11:13
  • 2
    я неправильно читал вопрос сначала, я думал, что Вы только хотели найти все читаемые файлы, не файлы RW. обновили ответ для нахождения файлов RW. –  cas 19.09.2013, 11:24
  • 3
    Это не работает также. Если файл является читаемым миром, popo все еще не имеет доступа к нему, если у группы нет доступа для чтения, и popo является членом той группы или если он владеет файлом и там не прочитал разрешение для пользователя. См. также unix.stackexchange.com/a/88591/22565 –  Stéphane Chazelas 19.09.2013, 12:06
  • 4
    Это - то, что Вы имеете неправильно. Когда владелец процесса соответствует владельцу файла, только полномочия пользователя рассматривают. Иначе, если группа файлов соответствует какой-либо из групп процесса затем, полномочия группы рассматривают. Полномочия "других" только рассматривают, если пользователь и группа не соответствуют. Сделайте a chmod 7 на одном из Ваших файлов, и Вы теряете доступ к нему. Посмотрите, что unix.stackexchange.com/a/88591/22565 –  Stéphane Chazelas 19.09.2013, 18:18
  • 5
    007 был просто пример. И существуют все другие проблемы, упомянутые по unix.stackexchange.com/a/88591/22565, где Вы также найдете корректный способ записать это find команда. –  Stéphane Chazelas 19.09.2013, 19:43

Это вызвано тем, что -user опция ищет файлы, где указанный пользователь, если владелец файла и это не являются Вашим случаем.

Это похоже на самый легкий способ сделать то, что Вы хотите, должен выполнить команду при popo пользователе:

find /Users/Me/Desktop -readable
2
27.01.2020, 20:52
  • 1
    Этому не удается найти файлы в каталогах, к которым popo имеет поисковый доступ к, но не доступ для чтения. Вот почему в решении я дал, я создаю список файлов как корень как проверки на доступ как соответствующий пользователь. –  Stéphane Chazelas 19.09.2013, 13:31
  • 2
    Это работало бы над Linux (запрещающий угловой случай, который Stephane упоминает), но OSX's find имеет нет -readable опция. –  Gilles 'SO- stop being evil' 20.09.2013, 00:36
sudo find . -print0 | 
  sudo -u popo perl -Mfiletest=access -l -0ne '
    print if -r && -w'

Посмотрите, что ответ на почти идентичный вопрос для того, почему проверка полномочий обычно не работает.

1
27.01.2020, 20:52

Теги

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