Eugene Berdnikov -> debian-russian@lists.debian.org @ Mon, 17 Dec 2018 23:22:51 +0300:
> On Mon, Dec 17, 2018 at 10:05:55PM +0300, Artem Chuprina wrote: >> Eugene Berdnikov -> debian-russian@lists.debian.org @ Mon, 17 Dec 2018 >> 18:48> > Пришлось уже позаменять syslog-ng на rsyslog, потому что первый >> вызывает >> > getrandom() ДО того, как свалить в бэкграунд (правда, к нему и другие >> > претензии были). Хорошо что sshd так не делает, иначе на серверах >> > пришлось бы его под inetd переводить. >> >> Вот интересно, а зачем syslog-ng понадобилась настоящая энтропия? Чему >> ему urandom не угодил? > Насколько я разбираюсь в медицине, он как раз urandom и читает. > Вот что написано в мане random(7): > * The Linux-specific getrandom(2) system call, available since Linux > 3.17. This system call provides access either to the same source as > /dev/urandom (called the urandom source in this page) or to the same > source as /dev/random (called the random source in this page). The > default is the urandom source; the random source is selected by > specifying the GRND_RANDOM flag to the system call. (The geten‐ > tropy(3) function provides a slightly more portable interface on top > of getrandom(2).) > А вот что делает syslog-ng, фрагмент трассы, который я отправил в BT: > ------------------------------------------------------------------------ > 1501 22:44:00 > getrandom("\x74\x78\x56\x35\x28\xad\x52\xd2\xcb\x51\xb1\x30\xc7\x67\x14\x26\x01\xa4\x2d\xa0\x30\x1d\xad\x09\x9e\xe3\x2c\x4e\x07\x55\x0d\x29", > 32, 0) = 32 <322.583360> > Got with "strace -Tt", means reading of 32 random bytes tooks 322 seconds. > ------------------------------------------------------------------------ > Флаги здесь, как видно, нулевые, в то время как GRND_NONBLOCK = 1, > GRND_RANDOM = 2. Так что именно urandom он и читает, и блокируется > на нём на 5 минут. Как интересно... Хотя, если по уму, то urandom'у бы тоже сначала набрать энтропию, и только потом уже раскручивать псевдорандомизацию. А прикапывать ее между перезагрузками чревато тем же боком. Так-то считается, что urandom — псевдослучайный, но с криптографическим качеством. А значит, должен иметь в виду криптографическую модель угроз. >> > Зато появился новый квест: писать программы так, чтобы они рандомные >> > битики получали асинхронно, в отдельном треде. Рядом с резолвером. >> >> Опять-таки, если им нужна настоящая энтропия, то им ее все равно >> дожидаться. > Да, это правильно, но теперь нужно понимать, что этом сисколе можно крепко > зависнуть, а это может быть критично. Для syslog-ng квест выглядит так: > автор должен был догадаться, что сначала нужно создать сокет в /dev/log > и сказать ему listen(), иначе некоторые сервисы (например, sshd) не захотят > запускаться и процесс загрузки встанет. Так что просто сделать костыль, > принудительно отправив syslog-ng в бэкграуд -- не получится. Я пробовал, > на SysV-init. Возможно, с systemd результат будет иной, но проблема > имеется, для других утилит она может проявляться иначе. Да, одна проблема раскрыла наличие другой. Ну что ж, бывает...