найдите родительскую строку на основе regex

Требования к которому я предложу решения, поскольку пули Points:

  1. Putobuldbless CORT CONSOLE Вход в систему
  2. Root Phaness Rood Remote Вход от предварительно авторизованных пользователей
  3. Удаленный логин Passement для указанных учетных записей От предварительно уполномоченных пользователей
  4. Удаленный логин Passwordble для любой учетной записи от предварительно авторизованных пользователей

Следующие примеры основаны на Debian, поскольку это то, что я получил сюда для тестирования. Тем не менее, я не вижу причин, почему принципы не могут быть применены к любому распределению (или действительно любые производные PAM * IX).

Логин корневой консоли Passementless

Я думаю, что, как я бы поддержал это, будет использовать PAM и файл конфигурации / etc / Securetty .

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

в /etc/pam.d/login У меня есть следующий стандартный набор строк для аутентификации (начиная с ключевого слова auth ):

auth       optional   pam_faildelay.so  delay=3000000
auth [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so
auth       requisite  pam_nologin.so

@include common-auth
auth       optional   pam_group.so

ссылки Common-auth включают в себя файл содержит следующие соответствующие строки:

auth    [success=1 default=ignore]      pam_unix.so nullok_secure
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so
auth    optional                        pam_cap.so

Файл Common-auth Указывает PAM пропустить одно правило (отрицание), если «вход в систему Unix» добивается успеха. Обычно это означает матч в / и т. Д. / Тень .

AUTH ... PAM_SECURETTYTY.SO строка сконфигурирована для предотвращения корневых логинов, кроме на устройствах TTY, указанных в / etc / securetty . (Этот файл уже включает в себя все консольные устройства.)

Изменение этого AUTH Линия слегка, можно определить правило, что позволяет логин корня без пароля от TTY Устройство, указанное в / etc / securetty . Параметр = OK параметр должен быть изменен таким образом, чтобы ok заменяется количеством строк Auth , которые будут пропущены в случае успешного совпадения. В ситуации, показанной здесь, этот номер 3 , который прыгает на AUTH ... PAM_PERMIT.SO строка:

auth [success=3 new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so

Root Rood Remote Вход от предварительно авторитетных пользователей

Это простое включение ключей SSH для этих авторизованных пользователей, добавленных в корню файл authorized_keys .

Удаленный логин Passhieldleble для указанных учетных записей от предварительно авторизованных пользователей

Это также простое включение ключей SSH для авторизованных пользователей, добавленных к соответствующему и соответствующему пользователю .ssh / authorized_keys . (Типичный Удаленный пользователь Chris хочет, чтобы войти в систему для локального пользователя Chris Сценарий.)

Обратите внимание, что учетные записи могут оставаться в заблокированном состоянии по умолчанию после создания (т. Е. Сразу ! в Поле пароля для / etc / Shadow ), но разрешить логин на основе ключей SSH. Это требует root для размещения ключа в файле нового пользователя .ssh / authorized_keys . Что такое не так очевидно , заключается в том, что этот подход доступен только в том случае, если useppam да устанавливается в / etc / ssh / sshd_config . PAM дифференцирует ! Как «учетная запись заблокирована для пароля, но другие методы доступа могут быть разрешены» и ! ... «Счета заблокирована. Период». (Если установлен USEPAM NO , то OpenSSH учитывает любое наличие ! , запускаемое поле пароля, чтобы представлять заблокированную учетную запись.)

Удаленный логин для любой учетной записи от предварительно авторизован Пользователи

Мне не совсем понятно, хотите ли вы этого объекта или нет. А именно, некоторые уполномоченные пользователи смогут SSH логин без пароля на любой любой любой локальный счет.

Я не могу проверить этот сценарий, но я считаю, что это может быть достигнуто с помощью OpenSSH 5.9 или новее, что позволяет нескольким файлам authorized_keys , которые будут определены в / etc / ssh / sshd_config . Отредактируйте файл конфигурации, чтобы включить второй файл под названием / etc / ssh / authorized_keys . Добавьте свои выбранные авторизованные пользователи «Общественные клавиши к этому файлу, обеспечение того, чтобы разрешения были таковы, что он принадлежит корнеплоду и имеет доступ к записи только рутом (0644).

0
06.12.2014, 23:05
2 ответа

На данный момент я использую этот раствор, но мне бы хотелось чего-нибудь почище.

volname=`grep $dsk ldm_ls-o_disk.out|uniq|cut -d\| -f2|cut -d= -f2`
linenr=`grep -n $volname ldm_ls-o_disk.out |grep VDISK|cut -d\: -f1`
retval=1
while [ $retval -eq 1 ]
do
        line=`sed -n "${linenr}p" ldm_ls-o_disk.out|grep DOMAIN`
        if [ $? -eq 0 ]; then
                retval=0;
                domain=`echo $line |cut -d= -f2`
        else
                linenr=$(($linenr-1))
        fi
done
-1
28.01.2020, 04:58

Предполагая, что домен является самым последним до совпадающей VDISK строки, я бы использовал awk:

awk -F '[=|]' -v dev="/dev/dev/my_dev2" '
    $1 == "vol" && $5 == dev {vol = $2}
    $1 == "DOMAIN" {domain = $3}
    $1 == "VDISK" && $3 == vol {print vol, domain; exit}
' file

Это выводит

disk02 domain01

Для захвата строк в переменных оболочки используйте чтение с подстановкой процесса:

get_domain () {
    awk -F '[=|]' -v dev="$1" '
        $1 == "vol" && $5 == dev {vol = $2}
        $1 == "DOMAIN" {domain = $3}
        $1 == "VDISK" && $3 == vol {print vol, domain; exit}
    ' file
}

read volume domain < <(get_domain "/dev/dev/my_dev2")
1
28.01.2020, 04:58

Теги

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