.\" -*- coding: UTF-8 -*- .\" Copyright 2006, Red Hat, Inc. .\" Copyright 2016, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH add_key 2 "8 февраля 2026 г." "Linux man\-pages 6.18" .SH НАИМЕНОВАНИЕ add_key \- добавить ключ в систему управления ключами ядра .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP,\ \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .P \fBkey_serial_t add_key(\fPsize_t size; \fB const char *\fP\fItype\fP\fB, const char *\fP\fIdescription\fP\fB,\fP \fB const void \fP\fIpayload\fP\fB[\fP\fIsize\fP\fB], size_t \fP\fIsize\fP\fB,\fP \fB key_serial_t \fP\fIkeyring\fP\fB);\fP .fi .P \fIЗамечание\fP: В glibc нет обёрточной функции для данного системного вызова; смотрите ЗАМЕЧАНИЯ. .SH ОПИСАНИЕ \fBadd_key\fP() creates or updates a key of the given \fItype\fP and \fIdescription\fP, instantiates it with the \fIpayload\fP of size \fIsize\fP, attaches it to the nominated \fIkeyring\fP, and returns the key's serial number. .P Ключ может быть отклонён, если его данные представлены в неправильном формате или возникла другая ошибка. .P .\" FIXME The aforementioned phrases begs the question: .\" which key types support this? .\" FIXME Perhaps elaborate the implications here? Namely, the new .\" key will have a new ID, and if the old key was a keyring that .\" is consequently unlinked, then keys that it was anchoring .\" will have their reference count decreased by one (and may .\" consequently be garbage collected). Is this all correct? Если в указываемой связке ключей \fIkeyring\fP уже есть ключ с таким же \fItype\fP и \fIdescription\fP то, если тип ключа это поддерживает, ключ будет обновлён, а не создан заново; если нет, то будет создан новый ключ (с другим идентификатором) и он вытеснит ссылку на существующий ключ из связки. .P .\" FIXME . Perhaps have a separate page describing special keyring IDs? Связка ключей \fIkeyring\fP может задаваться серийным номером действующей связки ключей, для которой у вызывающего есть права на \fIзапись\fP. Или же это может быть один из следующих специальных идентификаторов связок ключей: .TP \fBKEY_SPEC_THREAD_KEYRING\fP Связка ключей вызывающей нити (\fBthread\-keyring\fP(7)). .TP \fBKEY_SPEC_PROCESS_KEYRING\fP Связка ключей вызывающего процесса (\fBprocess\-keyring\fP(7)). .TP \fBKEY_SPEC_SESSION_KEYRING\fP Связка ключей сеанса вызывающего (\fBsession\-keyring\fP(7)). .TP \fBKEY_SPEC_USER_KEYRING\fP Связка ключей по UID вызывающего (\fBuser\-keyring\fP(7)). .TP \fBKEY_SPEC_USER_SESSION_KEYRING\fP Связка ключей по UID сеанса вызывающего (\fBuser\-session\-keyring\fP(7)). .SS "Типы ключей" Значение \fItype\fP ключа представляет собой строку, которой определяется тип ключа. Внутри ядра определено несколько типов ключей, которые доступны в ядре кода управления ключами. В пользовательском пространстве в аргументе \fItype\fP при вызове \fBadd_key\fP() можно использовать следующие значения: .TP \fI\[dq]keyring\[dq]\fP Keyrings are special key types that may contain links to sequences of other keys of any type. If this interface is used to create a keyring, then \fIpayload\fP should be NULL and \fIsize\fP should be zero. .TP \fI\[dq]user\[dq]\fP Тип ключа общего назначения, чьи полезные данные можно читать и обновлять из пользовательских программ. Ключ полностью хранится в памяти ядра. Полезные данные ключей этого типа представляют собой данные произвольной структуры (blob) размером до 32767 байт. .TP \fI\[dq]logon\[dq]\fP (начиная с Linux 3.3) .\" commit 9f6ed2ca257fa8650b876377833e6f14e272848b This key type is essentially the same as \fI\[dq]user\[dq]\fP, but it does not permit the key to read. This is suitable for storing payloads that you do not want to be readable from user space. .P Для данного типа ключа значение \fIdescription\fP должно уточняться префиксом «service», который в \fIdescription\fP отделяется символом «:» от остальных символов. .TP \fI\[dq]big_key\[dq]\fP (начиная с Linux 3.13) .\" commit ab3c3587f8cda9083209a61dbe3a4407d3cada10 This key type is similar to \fI\[dq]user\[dq]\fP, but may hold a payload of up to 1\ MiB. If the key payload is large enough, then it may be stored encrypted in tmpfs (which can be swapped out) rather than kernel memory. .P Дополнительную информацию об этих типах ключей смотрите в \fBkeyrings\fP(7). .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" On success, \fBadd_key\fP() returns the serial number of the key it created or updated. On error, \-1 is returned and \fIerrno\fP is set to indicate the error. .SH ОШИБКИ .TP \fBEACCES\fP Изменение связки ключей пользователю недоступно. .TP \fBEDQUOT\fP Квота на ключи для данного пользователя была бы превышена, если бы этот ключ создался или был бы прицеплен в связку ключей. .TP \fBEFAULT\fP Значение одного или нескольких полей из \fItype\fP, \fIdescription\fP и \fIpayload\fP указывают вне доступного адресного пространства процесса. .TP \fBEINVAL\fP Размер строки (включая конечный байт null), заданной в \fItype\fP или \fIdescription\fP, превышает ограничение (32 байта и 4096 байт, соответственно). .TP \fBEINVAL\fP Некорректное значение полезных данных. .TP \fBEINVAL\fP \fItype\fP was \fI\[dq]logon\[dq]\fP and the \fIdescription\fP was not qualified with a prefix string of the form \fI\[dq]service:\[dq]\fP. .TP \fBEKEYEXPIRED\fP Срок службы связки ключей истёк. .TP \fBEKEYREVOKED\fP Связка ключей отозвана. .TP \fBENOKEY\fP Связка ключей не существует. .TP \fBENOMEM\fP Недостаточно памяти для создания ключа. .TP \fBEPERM\fP The \fItype\fP started with a period (\[aq].\[aq]). Key types that begin with a period are reserved to the implementation. .TP \fBEPERM\fP \fItype\fP was \fI\[dq]keyring\[dq]\fP and the \fIdescription\fP started with a period (\[aq].\[aq]). Keyrings with descriptions (names) that begin with a period are reserved to the implementation. .SH СТАНДАРТЫ Linux. .SH ИСТОРИЯ Linux 2.6.10. .SH ПРИМЕЧАНИЯ glibc does not provide a wrapper for this system call. A wrapper is provided in the \fIlibkeyutils\fP library. (The accompanying package provides the \fI\fP header file.) When employing the wrapper in that library, link with \fI\-lkeyutils\fP. .SH ПРИМЕРЫ Программа, представленная ниже, создаёт ключ с типом, описанием и полезными данными, указанными в аргументах командной строки, и и цепляет этот ключ в связку ключей сеанса. Пример работы программы: .P .in +4n .EX $\fB ./a.out user mykey \[dq]Some payload\[dq]\fP; Key ID is 64a4dca $\fB grep \[aq]64a4dca\[aq] /proc/keys\fP; 064a4dca I\-\-Q\-\-\- 1 perm 3f010000 1000 1000 user mykey: 12 .EE .in .SS "Исходный код программы" .\" SRC BEGIN (add_key.c) \& .EX #include #include #include #include #include \& int main(int argc, char *argv[]) { key_serial_t key; \& if (argc != 4) { fprintf(stderr, "Usage: %s type description payload\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& key = add_key(argv[1], argv[2], argv[3], strlen(argv[3]), KEY_SPEC_SESSION_KEYRING); if (key == \-1) { perror("add_key"); exit(EXIT_FAILURE); } \& printf("Key ID is %jx\[rs]n", (uintmax_t) key); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "СМОТРИТЕ ТАКЖЕ" .ad l .nh \fBkeyctl\fP(1), \fBkeyctl\fP(2), \fBrequest_key\fP(2), \fBkeyctl\fP(3), \fBkeyrings\fP(7), \fBkeyutils\fP(7), \fBpersistent\-keyring\fP(7), \fBprocess\-keyring\fP(7), \fBsession\-keyring\fP(7), \fBthread\-keyring\fP(7), \fBuser\-keyring\fP(7), \fBuser\-session\-keyring\fP(7) .P The kernel source files \fIDocumentation/security/keys/core.rst\fP and \fIDocumentation/keys/request\-key.rst\fP. .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Dmitry Bolkhovskikh и Yuri Kozlov . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT debian-l10n-russian@lists.debian.org списка рассылки русских переводчиков .ME .