Estou tendo um pouco de dificuldade em entender como o keyctl
opera, especificamente a função request2
. Pelo que entendi, request2
tentará procurar a string dada e, se encontrada, a retornará. Se não for encontrado, chame o aplicativo /sbin/request-key
, que executará a operação descrita por /etc/request-key.d/*
e /etc/request-key.conf
(conforme aplicável).
No entanto, ao testar isso, encontrei alguns problemas.
[user@localhost ~]$ cat /etc/request-key.conf
###############################################################################
#
# Copyright (C) 2005 Red Hat, Inc. All Rights Reserved.
...snip...
###############################################################################
#OP TYPE DESCRIPTION CALLOUT INFO PROGRAM ARG1 ARG2 ARG3 ...
#====== ======= =============== =============== ===============================
create dns_resolver * * /sbin/key.dns_resolver %k
create user debug:* negate /bin/keyctl negate %k 30 %S
create user debug:* rejected /bin/keyctl reject %k 30 %c %S
create user debug:* expired /bin/keyctl reject %k 30 %c %S
create user debug:* revoked /bin/keyctl reject %k 30 %c %S
create user debug:loop:* * |/bin/cat
create user debug:* * /usr/share/keyutils/request-key-debug.sh %k %d %c %S
negate * * * /bin/keyctl negate %k 30 %S
[user@localhost ~]$
Crie um loop de depuração que criará uma chave real, keyctl print
gerará a saída correta.
[user@localhost ~]$ keyctl request2 user debug:loop:test "loop test"
181348864
[user@localhost ~]$ keyctl show
Session Keyring
141395006 --alswrv 1000 1000 keyring: _ses
521399390 --alswrv 1000 65534 \_ keyring: _uid.1000
181348864 --alswrv 1000 1000 \_ user: debug:loop:test
691271691 --alswrv 1000 1000 \_ user: debug:test
[user@localhost ~]$ keyctl print 181348864
loop test
[user@localhost ~]$
Crie outra chave que criará uma entrada de depuração por request-key.conf
. keyctl print
imprime corretamente a chave.
[user@localhost ~]$ keyctl request2 user debug:se-test "hello hello"
1061018025
[user@localhost ~]$ keyctl show
Session Keyring
141395006 --alswrv 1000 1000 keyring: _ses
521399390 --alswrv 1000 65534 \_ keyring: _uid.1000
1061018025 --alswrv 1000 1000 \_ user: debug:se-test
181348864 --alswrv 1000 1000 \_ user: debug:loop:test
691271691 --alswrv 1000 1000 \_ user: debug:test
[user@localhost ~]$
[user@localhost ~]$ keyctl print 1061018025
Debug hello hello
[user@localhost ~]$
Crie uma chave que não corresponda a nenhuma outra regra, crie uma chave negativa. keyctl print
aciona uma CPU desativada no VMWare forçando uma redefinição.
[user@localhost ~]$ keyctl request2 user se:test "blah"
request_key: Required key not available
[user@localhost ~]$ keyctl show
Session Keyring
141395006 --alswrv 1000 1000 keyring: _ses
521399390 --alswrv 1000 65534 \_ keyring: _uid.1000
65104736 --alswrv 1000 1000 \_ user: se:test
1061018025 --alswrv 1000 1000 \_ user: debug:se-test
181348864 --alswrv 1000 1000 \_ user: debug:loop:test
691271691 --alswrv 1000 1000 \_ user: debug:test
[user@localhost ~]$ keyctl desc 65104736
65104736: alswrv-----v------------ 1000 1000 user: se:test
[user@localhost ~]$
[user@localhost ~]$ keyctl print 65104736
Crie uma chave de depuração negativa, keyctl print
aciona o mesmo que acima.
[user@localhost ~]$ keyctl request2 user debug:negatetest negate
request_key: Required key not available
[user@localhost ~]$ keyctl show
Session Keyring
1018725144 --alswrv 1000 1000 keyring: _ses
478030378 --alswrv 1000 65534 \_ keyring: _uid.1000
799585275 --alswrv 1000 1000 \_ user: debug:negatetest
[user@localhost ~]$
[user@localhost ~]$ keyctl desc 799585275
799585275: alswrv-----v------------ 1000 1000 user: debug:negatetest
[user@localhost ~]$ keyctl print 799585275
Ao tentar ler (o que deveria ser) a chave negativa, o SO simplesmente é desligado espontaneamente.
Pelo que entendi, uma chave negativa não pode ser lida, no entanto, é um desligamento imediato do SO do resultado esperado?
O erro específico que recebo é o seguinte:
The CPU has been disabled by the guest operating system. Power off or reset the virtual machine.
Eu passei pela documentação de request-key.conf
, keyctl(1)
e keyctl(2)
, mas não consegui encontrar algo. Se eu perdi alguma coisa, sinta-se livre para me apontar para a parte relevante e me RTFM.
Obrigado!