Такие записи, как +::0:0:::
, могут работать должным образом, только если в вашем файле /etc/nsswitch.conf
есть passwd: compat
. Если вместо этого вы используете passwd: files nis
, эта запись не будет иметь ожидаемого эффекта.
По крайней мере, согласно nsswitch.conf(5)
справочной странице моей системы Debian 9, этот синтаксис в любом случае не кажется допустимым :он должен быть либо +user::0:0:::
, где user
будет именем пользователя NIS, которому будет предоставлен root доступ в этой системе или просто +
, который включает всех пользователей NIS, за исключением тех, которые ранее были исключены с помощью синтаксиса -user
или -@netgroup
, без переопределения указанных NIS -значений UID/primaryGID.
В более широком смысле +::0:0:::
может означать, что «каждый пользователь NIS является пользователем root в этой системе», что в первую очередь кажется плохой идеей.
Опасность заключается в том, что для приложения, которое выполняет аутентификацию самостоятельно путем чтения /etc/passwd
и /etc/shadow
, но не реализует расширения синтаксиса стиля passwd: compat
, эта строка буквально означает «пользователь +
имеет UID 0 и GID 0 и не имеет пароля".
Если вы используете такое приложение, это уязвимость «введите +
в приглашение имени пользователя, просто нажмите введите в приглашении пароля; теперь у вас есть root-доступ». Поскольку действительной оболочки нет, вы можете не получить доступ к оболочке немедленно :, но просто наличие доступа с UID 0 через приложение, вероятно, дает сообразительному злоумышленнику достаточно рычагов для получения полного доступа к корневой оболочке вскоре после этого.
Вот небольшой скрипт, который помогает:
#!/bin/bash
ARGS=()
while (( $# > 0 )) ; do
[[ -f "$1" ]] && break
ARGS+=( "$1" )
shift
done
awk -v SORT_ARGS="${ARGS[*]}" '
( NR == 1 ) {
print
next
}
{
print | "sort " SORT_ARGS
}
' $@
Небольшая жирность в случае, когда аргумент сортировки на самом деле может быть файлом; эту логику, вероятно, можно было бы ужесточить. Хотя в целом у меня работает хорошо..
Это сортирует все, что предоставляется как стандартный ввод:
perl -e 'print scalar <>, sort <>;'
Пример:
# echo -e "Heading\n2\n1"|perl -e 'print scalar <>, sort <>;'
Heading
1
2
Если вы хотите отсортировать файл, просто направьте его:
echo -e "Heading\n2\n1" >/tmp/test
</tmp/test perl -e 'print scalar <>, sort <>;'
Единственное, чего следует опасаться, это попытки отсортировать файл в -месте.