Удалите групповую группу с идентификатором группы как основная группа пользователя

Генераторы случайных чисел программного обеспечения не являются единственным источником энтропии в системе. На самом деле они не источники энтропии вообще - использование программного обеспечения RNGs внешние энтропийные источники для предоставления энтропии к системе. Реальный источник всегда является физическим (быть этим выделенное оборудование RNG, температурные датчики, аудиовход, синхронизация сетевых пакетов, вводы данных пользователем или даже внутренние состояния ЦП (которые для виртуального ЦП не являются строго "физическими" в некотором смысле) - Вы называете его).

Теперь что касается Вашего вопроса: как Mat упоминает в своем комментарии, большинство ошибок происходит из-за неаккуратного дизайна/кодирования (/тестирующий) - я пошел бы, до для высказывания это - 100%. Мое предположение - то, что Ваш код испытывает некоторое состояние состязания, которое обрабатывается плохо (если вообще). Так в некотором смысле это - связанная энтропия (как состояние состязания является случайным событием). Обвинение RNG для него является довольно полужирным оператором, по крайней мере - если Вы не используете случайные числа для инициирования его, в этом случае это больше походит на функцию.

Между прочим, если бы поврежденный RNG был причиной Ваших проблем, то Вы на самом деле видели бы их скорее очевидно. Относительно ошибки Debian OpenSSL - я не думаю, что любое другое распределение кроме Debian базировалось, (включая Ubuntu) был поражен им. Все же сама ошибка является довольно воспитательной с точки зрения того, как это, возможно, произошло во-первых.

3
22.06.2014, 02:43
3 ответа

Ошибка, которую вы получаете, заключается в ограничении способа написания groupdel и в том, что система спроектирована вокруг чисел (ID), а не имен. Как видно из исходного кода groupdel из groupdel, она проверяет только, есть ли пользователь, имеющий GID, который вы хотите удалить, в качестве его основной группы. Не имеет значения, есть ли другая группа с таким же идентификатором, но с другим именем.

/* [ Note: I changed the style of the source code for brevity purposes. ]
 * group_busy - check if this is any user's primary group
 *
 *      group_busy verifies that this group is not the primary group
 *      for any user.  You must remove all users before you remove
 *      the group.
 */
static void group_busy (gid_t gid)
{
        struct passwd *pwd;

        /* Nice slow linear search. */
        setpwent ();
        while ( ((pwd = getpwent ()) != NULL) && (pwd->pw_gid != gid) )
                ;
        endpwent ();

        /* If pwd isn't NULL, it stopped because the gid's matched. */
        if (pwd == (struct passwd *) 0)
                return;

        /* Can't remove the group. */
        fprintf (stderr,
                 _("%s: cannot remove the primary group of user '%s'\n"),
                 Prog, pwd->pw_name);
        exit (E_GROUP_BUSY);
}

Так что вы либо связываетесь с конфигурационными файлами, используя другие инструменты, такие как Perl в ответе mtm, либо временно меняете GID этого пользователя, чтобы group_busy больше не подвел.

.
2
27.01.2020, 21:19

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

[ ! -f /etc/group.lock ] && perl -ne 'next if /^testing2:/; print' /etc/group > /etc/group.lock && mv /etc/group.lock /etc/group && grpconv
2
27.01.2020, 21:19

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

.
0
27.01.2020, 21:19

Теги

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