Может ли учетная запись в Solaris 11 с префиксом # быть использована для входа?

Вот по крайней мере один переносимый метод Posix, который полагается только на встроенные модули оболочки (за возможным исключением printf), (Posix) нарезку параметров и пытается зацикливаться как можно меньше:

lowerunder() { local c="${1%[A-Z ]*}" 
    set -- "$1" "$c" "${1#"$c"}"
    [ -z "$3" ] && printf %s "$1" || {            
        c="${3%"${3#?}"}"
        [ -z "${c#[ ]}" ] && c=_
        [ -z "${c#[A-Z]}" ] && { 
            c="$(printf %x "'$c")";
            c="$(printf %b "\x$((c+20))")" ; }
        lowerunder "${2}${c}${3#?}"
} ; }

Подайте ему один аргумент, заключенный в кавычки, и он заменит пробелы внутри и все прописные символы на строчные.

Подайте ему два или более, и он все равно вернет ваш первый аргумент, преобразованный в нижний регистр, а пробелы - в подчеркивания. Это не так уж много.

Признаюсь, я не силен в шестнадцатеричной математике, и это может быть слабым местом здесь - я использую printf для преобразования из кода символов Ascii в шестнадцатеричное значение в десятичное и обратно. Тем не менее, писать было весело.

1
20.02.2019, 15:08
3 ответа

Согласноpasswd(5)руководству , имя пользователя, начинающееся с символа, отличного от буквенного, должно генерировать предупреждение (предположительно при доступе к passwdбазе данных ).

Возможно, ваш администратор полагается на тот факт, что записи для пользователей, которым не должно быть разрешено входить в систему, просто искажены(обратите внимание, что нет возможности закомментировать строки в файле passwd).

Я бы предложил, чтобы вместо того, чтобы полагаться на искаженные записи, пользователи, которым не должно быть разрешено входить в систему, должным образом ограничивались с помощью passwd -N usernameвместо (, см. passwd(1)), или с помощью какой-либо подобной механики. Или, возможно, просто удалены, если пользователи не должны существовать в системе.

4
27.01.2020, 23:14

На справочной странице Solaris 11 passwdуказано:

username

is the user's login name.

The login (login) and role (role) fields accept a string of no more than eight bytes consisting of characters from the set of alphabetic characters, numeric characters, period (.), underscore (_), and hyphen (-). The first character should be alphabetic and the field should contain at least one lower case alphabetic character. A warning message is displayed if these restrictions are not met.

Обратите внимание, что там нет документации, утверждающей, что имя пользователя, начинающееся с #, не будет разрешено для входа в систему.

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

Ваш системный администратор надеется , что такое поведение сохранится и в будущем. Надежда — ужасно низкий стандарт для наложения ограничений безопасности.

1
27.01.2020, 23:14

Да, таблицы паролей могут содержать комментарии…

… но не в Illumos, OpenBSD или Linux; и только в исходной форме . Люди, пишущие на WWW-сайте Gentoo Linux, не имели опыта работы с достаточно широким спектром операционных систем.

Формат файла отличается во всех операционных системах. FreeBSD, читая файл /etc/master.passwd, допускает строчные комментарии. Парсеры Linux, OpenBSD и Illumos для их файлов /etc/passwdили /etc/master.passwdэтого не делают.

Как видите, первые несколько строк начального файла FreeBSD /etc/master.passwdявляются строками комментариев, которые явно игнорируются программой FreeBSD pw_mkdb. В OpenBSD pw_mkdbэтого нет, а в стандартном /etc/master.passwdнет комментариев.

Конечно, после того как программа pw_mkdbскомпилировала исходный код в реальную базу данных, используемую библиотечными подпрограммами, выполняющими поиск в базе данных системных учетных записей, комментарии были отфильтрованы. Фактический скомпилированный формат базы данных — Berkeley DB,который не имеет комментариев.

Подсистема базы данных учетных записей пользователей Linux не использует скомпилированные файлы базы данных с индексами, в отличие от BSD. Однако подпрограммы библиотеки поиска, анализирующие исходные плоские таблицы, не допускают комментариев. То же самое верно для Illumos и для OpenSolaris до него.

Нет, имена пользователей практически не могут содержать #символов.

POSIX указывает, что переносимое имя учетной записи может содержать только символы из так называемого -набора символов переносимого имени файла с дополнительным ограничением на первый символ имени. Этот набор не содержит символа #.

Дополнительное ограничение на первый символ важно, потому что оно затрагивает причины, по которым #вызовет проблемы с именами учетных записей. Имена учетных записей используются в качестве аргументов для программ, а аргументы, начинающиеся с -, обычно обозначают аргументы опции . (Да, существуют способы избежать использования имен учетных записей в качестве аргументов параметров, но они не являются универсальными и не стандартизированными.)

В этом суть проблемы. Хотя фактическая исходная форма самой таблицы допускает любой символ, кроме разделителя полей (), разделителя записей(:)или (во FreeBSD ), конец -из -ввод строки комментария(#)в первом поле записи, использование имен учетных записей в большом количестве других контекстов накладывает на них гораздо больше ограничений:

  • Подпрограммы библиотеки C обрабатывают эти поля как строки с завершением -, поэтому они не могут содержать символ .
  • Имена учетных записей используются в качестве аргументов команд, как уже упоминалось, не в последнюю очередь в качестве аргументов, передаваемых из gettyпрограмм в loginв старых операционных системах -. (Illumos входит в семейство Unices, которое избавилось от программы gettyеще в 1988 году , разумеется.)Это исключает символ и инициал -.
  • Имена учетных записей настраиваются в сценариях оболочки (или их приближениях )с использованием присвоения переменных, от настроек в /etc/rc.confдо /etc/sysconfig/wibble, поэтому метасимволы оболочки, которые нарушили бы такие сценарии, не используются. Таким образом, #, будучи метасимволом оболочки, не используется.
  • Имена учетных записей хранятся в переменных среды и оболочки. Таким образом, такие символы, как и =(, вызывающие неоднозначность при синтаксическом анализе среды процесса ), не используются.
  • Имена учетных записей настраиваются в файлах.INI, поэтому метасимволы для файлов.INI, включая =, #и ;, не используются.
  • … и так далее.

Таким образом, хотя использование #не комментирует вещи в файле паролей на Illumos, его использование вызовет немало проблем в другом месте .

Для имен специальных учетных записей используйте …

… соглашение FreeBSD о начальном _, что-то вроде соглашения Debian о префиксе Debian-или соглашение Дэниела Дж. Бернштейна о начальном верхнем регистре G.

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

… правильное поле записи в первую очередь! Это не поле имени. Это поле пароля, которое в Illumos содержит специальные значения для заблокированных учетных записей и без -учетных записей .

1
27.01.2020, 23:14

Теги

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