Требования к которому я предложу решения, поскольку пули Points:
Следующие примеры основаны на 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).
На данный момент я использую этот раствор, но мне бы хотелось чего-нибудь почище.
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
Предполагая, что домен является самым последним до совпадающей 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")