Как увеличить порядковый номер в зоне bind9 dns

Я привычка дает Вам точный код, но может дать Вам шаги для достижения этого:

  • Найдите владельца каталога. Если это соответствует user на который Вы ищете, затем проверяете полномочия владельца на том каталоге. Если это r+x(5) или r+w+x(7), затем пользователь может искать в том каталоге, иначе нет.

  • Если владелец каталога не соответствует пользователю, проверьте группу каталога и узнайте ли вводимый user принадлежит той группе или нет. Если пользователь принадлежит. Проверьте полномочия группы на том каталоге. Если это r+x(5) или r+w+x(7), затем пользователь может искать в том каталоге, иначе нет.

  • Если вводимый user не принадлежит группе каталога, проверяют другие полномочия на том каталоге. Если это r+x(5) или r+w+x(7), затем пользователь может искать в том каталоге, иначе нет.

Я думаю, что вышеупомянутый алгоритм выполнит задачу, которую Вы хотите.

Править:

Метод 1:

Можно использовать, находят команду для этого:

$ find / -maxdepth 1 -type d -perm -u=rx

Это найдет все каталоги внутри / до одного уровня с полномочиями пользователя как по крайней мере (read+execute).

Метод 2:

$ stat <filename/directoryname>  | grep Access | head -1 | awk 'BEGIN{FS="[/)]"} {print $2}'  

Это даст Вам полномочия в rwx нотации (например, drwxr-xr-x)

$ stat <filename/directoryname>  | grep Access | head -1 | awk 'BEGIN{FS="[(/]"} {print $2}'

Это даст Вам полномочия в 755 нотациях (например, 0755)

6
26.04.2015, 19:09
2 ответа

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

Сказав это, я бы порекомендовал подход на основе меток времени по схеме вроде:

 YYYYMMDDxx

где xx начинается с 00 и увеличивается для всех правок в этот конкретный день ( при редактировании в другой день вы сбрасываете xx на 00 )

Основным преимуществом этой схемы является то, что вы также знаете дату последней модификации вашего файла зоны на первый взгляд.

Это также делает увеличение серийного номера более надежным.

В качестве альтернативы можно начать с 1 и просто увеличивать каждый раз при редактировании файла.

Если серийный номер уже основан на метке времени (и 2015040500 выглядит очень похоже), вы, вероятно, придерживаетесь этого решения (даже если не вами) и используйте логическую схему . преемник 2015042200

8
27.01.2020, 20:25

Сценарий bash ищет:

   12345 ; Serial

в каталоге / etc / bind / zone . Он должен соответствовать любому числу перед ; Серийный (с учетом регистра). И замените его форматом ГГГГММДДxx .

#!/bin/bash

ZONES_PATH="/etc/bind/zones"
DATE=$(date +%Y%m%d)
# we're searching for line containing this comment
NEEDLE="Serial"
for ZONE in $(ls -1 $ZONES_PATH) ; do
    curr=$(/bin/grep -e "${NEEDLE}$" $ZONES_PATH/${ZONE} | /bin/sed -n "s/^\s*\([0-9]*\)\s*;\s*${NEEDLE}\s*/\1/p")
    # replace if current date is shorter (possibly using different format)
    if [ ${#curr} -lt ${#DATE} ]; then
      serial="${DATE}00"
    else
      prefix=${curr::-2}
      if [ "$DATE" -eq "$prefix" ]; then # same day
        num=${curr: -2} # last two digits from serial number
        num=$((10#$num + 1)) # force decimal representation, increment
        serial="${DATE}$(printf '%02d' $num )" # format for 2 digits
      else
        serial="${DATE}00" # just update date
      fi
    fi
    /bin/sed -i -e "s/^\(\s*\)[0-9]\{0,\}\(\s*;\s*${NEEDLE}\)$/\1${serial}\2/" ${ZONES_PATH}/${ZONE}
    echo "${ZONE}: "
    grep "; ${NEEDLE}$" $ZONES_PATH/${ZONE}
done

Измененная версия для конфигурации привязки, управляемая в репозитории git , которая обновляет серийный номер только для измененного файла зоны:

#!/bin/bash
ZONES_PATH="$(pwd)/zones"
REPO_PATH="$(git rev-parse --show-toplevel)"
DATE=$(date +%Y%m%d)
NEEDLE="Serial"
for ZONE in $(git diff --name-only --diff-filter=AM `git merge-base origin/master HEAD` $ZONES_PATH) ; do
    curr=$(/bin/grep -e "${NEEDLE}$" ${REPO_PATH}/${ZONE} | /bin/sed -n "s/^\s*\([0-9]*\)\s*;\s*${NEEDLE}\s*/\1/p")
    if [ ${#curr} -lt ${#DATE} ]; then
      serial="${DATE}00"
    else
      prefix=${curr::-2}
      if [ "$DATE" -eq "$prefix" ]; then # same day
        num=${curr: -2} # last two digits from serial number
        num=$((10#$num + 1)) # force decimal representation, increment
        serial="${DATE}$(printf '%02d' $num )" # format for 2 digits
      else
        serial="${DATE}00" # just update date
      fi
    fi
    /bin/sed -i -e "s/^\(\s*\)[0-9]\{0,\}\(\s*;\s*${NEEDLE}\)$/\1${serial}\2/" ${REPO_PATH}/${ZONE}
    echo "${ZONE}: "
    grep "; ${NEEDLE}$" ${REPO_PATH}/${ZONE}
done

Примечание: вы не должны вносить более 99 изменений в течение одного дня: )

0
27.01.2020, 20:25

Теги

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