Автоматически найдите проблемы разрешения каталога

  1. Если Вы хотите управлять им внутренний, получить хороший сервер, Постфикс Реализации и реализовать предложения от этого Теста Почтового сервера. Можно также хотеть подписаться с программами Обратной связи с крупными поставщиками услуг включая Yahoo!, MSN, и т.д.

  2. Если Вы хотите произвести на стороне, рассмотрите сервис Реле SMTP.

1
задан 2 January 2012 в 19:59
3 ответа

Предполагая, что у вас есть права root в системе, вы можете использовать этот

sudo -u USER -g GROUP find ROOTDIR -exec test \! -r {} \; -ls

, где USER и GROUP должны быть заменены на имя пользователя и имя группы, доступ к которым должен быть оценен, а ROOTDIR является верхним каталог дерева каталогов, в котором будет выполняться оценка.

Предостережения

Обратите внимание, что sudo должен быть правильно настроен, что означает, что root должен иметь право действовать как любой пользователь, а также любая группа.

Как это работает

Команда работает, выполняя утилиту test для всех файлов и каталогов в ROOTDIR. Параметры, переданные утилите, заставляют ее возвращать успешный (нулевой) код выхода всякий раз, когда она может не получить доступ к заданному файлу или каталогу. Этот код выхода затем используется командой find , чтобы определить, следует ли печатать имя файла или каталога ( -ls ).

Выходные данные

Выходные данные представляют собой список файлов и каталоги, к которым USER: GROUP не имеет доступ с дополнительной информацией о каждом файле и каталоге, аналогичной выводу ls -l (т.е. с разрешениями, владельцем, временем модификации и т. д.) .

Полезные вещи, которые можно настроить

Вы можете проверить различные виды разрешений, заменив -r другим параметром, см. man test . Вы можете заменить -ls на -print , если вам не нужна дополнительная информация о каждом файле и каталоге, а нужна только их имя. Обратите внимание: если команда находит каталоги, по которым она не может пройти, она также пожалуется на stderr. В зависимости от того, что вы проходите в тест , это может быть поверхностным и может быть удалено путем перенаправления.

4
ответ дан 3 December 2019 в 17:16

Я собрал этот простой сценарий оболочки [*]. Лучше всего работает, когда вы являетесь пользователем root:

my_path=/home/me/Documents/a/b/c/file.txt               
while [[ "$my_path" != "/" ]] ; do 
   ls -lLd "$my_path"
   my_path="`dirname \"$my_path\"`" 
done

Это все еще требует некоторой постобработки человеком, но я не знаю элегантного способа проверить, есть ли у конкретного пользователя разрешение x для каталога (для этого потребуется либо su -c "test -x" или утомительный разбор stat -t ).

[*] работает как в bash, так и в ksh

1
ответ дан 3 December 2019 в 17:16

Команда tree поможет вам с этой задачей.

Из man tree :

Tree - это рекурсивная программа для вывода списка каталогов, которая производит список файлов с отступом в глубину.

Я построил простой пример, чтобы продемонстрировать это использование:

$ mkdir {a,b,c}/{1,2,3}
$ ls *
a:
1  2  3

b:
1  2  3

c:
1  2  3
$ 
$ tree
.
|-- a
|   |-- 1
|   |-- 2
|   `-- 3
|-- b
|   |-- 1
|   |-- 2
|   `-- 3
`-- c
    |-- 1
    |-- 2
    `-- 3

12 directories, 0 files
$ sudo chown root b && sudo chmod go-rwx b
$ tree
.
|-- a
|   |-- 1
|   |-- 2
|   `-- 3
|-- b [error opening dir]
`-- c
    |-- 1
    |-- 2
    `-- 3

9 directories, 0 files

Вы можете запустить tree как соответствующий пользователь, чтобы увидеть, где начинается проблема. Вам нужно будет исправить найденную проблему и повторно запустить программу до тех пор, пока не исчезнут ошибки, чтобы использовать это как средство восстановления, но, поскольку вы можете использовать tree -if для удаления отступов и печати полных путей, вы можете взломать скрипт, который запускает tree, greps для «ошибки открытия каталога», предоставляет apache доступ к этому каталогу и сам перезапускается.

0
ответ дан 3 December 2019 в 17:16

Теги

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