.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2006 Red Hat, Inc. All Rights Reserved. .\" Written by David Howells (dhowells@redhat.com) .\" and Copyright (C) 2016 Michael Kerrisk .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH add_key 2 "31 октября 2023 г." "Linux man\-pages 6.06" .SH ИМЯ add_key \- добавить ключ в систему управления ключами ядра .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .P \fBkey_serial_t add_key(const char *\fP\fItype\fP\fB, const char *\fP\fIdescription\fP\fB,\fP \fB const void \fP\fIpayload\fP\fB[.\fP\fIplen\fP\fB], size_t \fP\fIplen\fP\fB,\fP \fB key_serial_t \fP\fIkeyring\fP\fB);\fP .fi .P \fIЗамечание\fP: В glibc нет обёрточной функции для данного системного вызова; смотрите ЗАМЕЧАНИЯ. .SH ОПИСАНИЕ Вызов \fBadd_key\fP() создаёт или обновляет ключ заданного типа \fItype\fP с описанием \fIdescription\fP, конструирует его с полезными данными \fIpayload\fP и длиной \fIplen\fP, присоединяет его к заданной связке ключей \fIkeyring\fP и возвращает его серийный номер. .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"keyring"\fP Связки ключей — это специальные типы ключей, которые могут содержать ссылки на цепочки других ключей любого типа. Если данный интерфейс используется для создания связки ключей, то значение \fIpayload\fP должно быть равно NULL, а \fIplen\fP должно быть равно нулю. .TP \fI"user"\fP Тип ключа общего назначения, чьи полезные данные можно читать и обновлять из пользовательских программ. Ключ полностью хранится в памяти ядра. Полезные данные ключей этого типа представляют собой данные произвольной структуры (blob) размером до 32767 байт. .TP \fI"logon"\fP (начиная с Linux 3.3) .\" commit 9f6ed2ca257fa8650b876377833e6f14e272848b Данный тип ключа подобен \fI"user"\fP, но не позволяет читать ключ. Этот тип подходит для хранения полезных данных, которые вам не нужно читать из пользовательского пространства. .P Для данного типа ключа значение \fIdescription\fP должно уточняться префиксом «service», который в \fIdescription\fP отделяется символом «:» от остальных символов. .TP \fI"big_key"\fP (начиная с Linux 3.13) .\" commit ab3c3587f8cda9083209a61dbe3a4407d3cada10 Данный тип ключа подобен \fI"user"\fP, но может содержать полезные данные размером до 1\ МиБ. Если полезной нагрузки много, то её можно хранить зашифрованной в tmpfs (может вытесняться из памяти), а не в памяти ядра. .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 равно \fI"logon"\fP, но значение \fIdescription\fP не начинается строкой\-префиксом в виде \fI"service:"\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"keyring"\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 "Some payload"\fP Key ID is 64a4dca $ \fBgrep \[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\en", 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\en", (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 .\" commit b68101a1e8f0263dbc7b8375d2a7c57c6216fb76 .\" commit 3db38ed76890565772fcca3279cc8d454ea6176b Файлы исходного кода ядра \fIDocumentation/security/keys/core.rst\fP и \fIDocumentation/keys/request\-key.rst\fP (или, до Linux 4.13, файлы \fIDocumentation/security/keys.txt\fP и \fIDocumentation/security/keys\-request\-key.txt\fP). .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Dmitry Bolkhovskikh и Yuri Kozlov . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .