Если Вы хотите управлять им внутренний, получить хороший сервер, Постфикс Реализации и реализовать предложения от этого Теста Почтового сервера. Можно также хотеть подписаться с программами Обратной связи с крупными поставщиками услуг включая Yahoo!, MSN, и т.д.
Если Вы хотите произвести на стороне, рассмотрите сервис Реле SMTP.
Предполагая, что у вас есть права 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. В зависимости от того, что вы проходите в тест
, это может быть поверхностным и может быть удалено путем перенаправления.
Я собрал этот простой сценарий оболочки [*]. Лучше всего работает, когда вы являетесь пользователем 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
Команда 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
доступ к этому каталогу и сам перезапускается.