Skip to content

Commit 4a0a7bf

Browse files
authored
Merge pull request #681 from mmartinv/enhance-onboarding-testing
enhance onboarding testing
2 parents f0bd963 + 359ea48 commit 4a0a7bf

3 files changed

Lines changed: 169 additions & 81 deletions

File tree

.packit.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ jobs:
3434
fedora-latest-stable: {}
3535
fedora-latest: {}
3636
fedora-rawhide: {}
37-
fedora-eln:
38-
additional_repos:
39-
- https://kojipkgs.fedoraproject.org/repos/eln-build/latest/$basearch/
37+
# fedora-eln:
38+
# additional_repos:
39+
# - https://kojipkgs.fedoraproject.org/repos/eln-build/latest/$basearch/
4040

4141
- job: tests
4242
trigger: pull_request
@@ -48,6 +48,7 @@ jobs:
4848
fedora-latest-stable: {}
4949
fedora-latest: {}
5050
fedora-rawhide: {}
51+
# fedora-eln: {}
5152

5253
- <<: *fdo_copr_build
5354
trigger: commit

test/fmf/plans/onboarding.fmf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,20 @@ execute:
66
prepare:
77
- how: shell
88
script: dnf install -y postgresql-server sqlite
9+
- how: shell
10+
script: |
11+
echo "Adding missing SELinux permissions"
12+
tee /tmp/fdo-missing.cil <<EOF
13+
(allow fdo_t etc_t (file (write)))
14+
(allow fdo_t fdo_conf_t (file (append create rename setattr unlink write)))
15+
(allow fdo_t fdo_var_lib_t (dir (add_name remove_name write)))
16+
(allow fdo_t fdo_var_lib_t (file (create setattr unlink write)))
17+
(allow fdo_t krb5_keytab_t (dir (search)))
18+
(allow fdo_t postgresql_port_t (tcp_socket (name_connect)))
19+
(allow fdo_t sssd_t (unix_stream_socket (connectto)))
20+
(allow fdo_t sssd_var_run_t (sock_file (write)))
21+
EOF
22+
semodule -i /tmp/fdo-missing.cil
923
provision:
1024
how: virtual
1125
memory: 4096

test/fmf/tests/onboarding/run-onboarding.sh

Lines changed: 151 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ DATABASES="${MANUFACTURER_DATABASE} ${OWNER_DATABASE} ${RENDEZVOUS_DATABASE}"
1717

1818
OV_STORE_DRIVER="${OV_STORE_DRIVER:-Directory}"
1919

20+
SERVICE_INFO_DIR="/var/lib/fdo/service-info/files"
21+
2022
DATABASE_DRIVER="None"
2123
[ "${OV_STORE_DRIVER}" != "Postgres" ] || DATABASE_DRIVER="postgresql"
2224
[ "${OV_STORE_DRIVER}" != "Sqlite" ] || DATABASE_DRIVER="sqlite"
@@ -28,7 +30,7 @@ DATABASE_PASSWORD="redhat"
2830
[ "$DATABASE_DRIVER" != "postgresql" ] || DATABASE_URL="${DATABASE_DRIVER}://${DATABASE_USER}:${DATABASE_PASSWORD}@127.0.0.1/fdo"
2931
[ "$DATABASE_DRIVER" != "sqlite" ] || DATABASE_URL="${DATABASE_DRIVER}://${DATABASE_DIR}/fido-device-onboard.db"
3032

31-
generate_keys() {
33+
generate_fdo_certificates() {
3234
ORGANIZATION="Red Hat"
3335
COUNTRY="US"
3436
VALIDITY="3650"
@@ -41,6 +43,56 @@ generate_keys() {
4143
done
4244
}
4345

46+
generate_serviceinfo_files() {
47+
mkdir -p ${SERVICE_INFO_DIR}/etc/{sudoers.d,pki/ca-trust/source/anchors}
48+
cat > "${SERVICE_INFO_DIR}/etc/hosts" <<EOF
49+
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
50+
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
51+
EOF
52+
cat > "${SERVICE_INFO_DIR}/etc/sudoers.d/edge" <<EOF
53+
edge ALL=(ALL) NOPASSWD: ALL
54+
EOF
55+
cat > "${SERVICE_INFO_DIR}/etc/pki/ca-trust/source/anchors/isrg-root-x2-cross-signed.crt" <<EOF
56+
-----BEGIN CERTIFICATE-----
57+
MIIEYDCCAkigAwIBAgIQB55JKIY3b9QISMI/xjHkYzANBgkqhkiG9w0BAQsFADBP
58+
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
59+
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yMDA5MDQwMDAwMDBa
60+
Fw0yNTA5MTUxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5l
61+
dCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgy
62+
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0H
63+
ttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7
64+
AlF9ItgKbppbd9/w+kHsOdx1ymgHDB/qo4HlMIHiMA4GA1UdDwEB/wQEAwIBBjAP
65+
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR8Qpau3ktIO/qS+J6Mz22LqXI3lTAf
66+
BgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQw
67+
IgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wJwYDVR0fBCAwHjAc
68+
oBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzAiBgNVHSAEGzAZMAgGBmeBDAEC
69+
ATANBgsrBgEEAYLfEwEBATANBgkqhkiG9w0BAQsFAAOCAgEAG38lK5B6CHYAdxjh
70+
wy6KNkxBfr8XS+Mw11sMfpyWmG97sGjAJETM4vL80erb0p8B+RdNDJ1V/aWtbdIv
71+
P0tywC6uc8clFlfCPhWt4DHRCoSEbGJ4QjEiRhrtekC/lxaBRHfKbHtdIVwH8hGR
72+
Ib/hL8Lvbv0FIOS093nzLbs3KvDGsaysUfUfs1oeZs5YBxg4f3GpPIO617yCnpp2
73+
D56wKf3L84kHSBv+q5MuFCENX6+Ot1SrXQ7UW0xx0JLqPaM2m3wf4DtVudhTU8yD
74+
ZrtK3IEGABiL9LPXSLETQbnEtp7PLHeOQiALgH6fxatI27xvBI1sRikCDXCKHfES
75+
c7ZGJEKeKhcY46zHmMJyzG0tdm3dLCsmlqXPIQgb5dovy++fc5Ou+DZfR4+XKM6r
76+
4pgmmIv97igyIintTJUJxCD6B+GGLET2gUfA5GIy7R3YPEiIlsNekbave1mk7uOG
77+
nMeIWMooKmZVm4WAuR3YQCvJHBM8qevemcIWQPb1pK4qJWxSuscETLQyu/w4XKAM
78+
YXtX7HdOUM+vBqIPN4zhDtLTLxq9nHE+zOH40aijvQT2GcD5hq/1DhqqlWvvykdx
79+
S2McTZbbVSMKnQ+BdaDmQPVkRgNuzvpqfQbspDQGdNpT2Lm4xiN9qfgqLaSCpi4t
80+
EcrmzTFYeYXmchynn9NM0GbQp7s=
81+
-----END CERTIFICATE-----
82+
EOF
83+
84+
}
85+
86+
87+
generate_ssh_key() {
88+
SSH_KEY_TMP_DIR=$(mktemp -d)
89+
SSH_KEY_FILE="${SSH_KEY_TMP_DIR}/ssh_key"
90+
SSH_PUB_KEY_FILE="${SSH_KEY_FILE}.pub"
91+
ssh-keygen -q -N '' -f "${SSH_KEY_FILE}"
92+
cat "${SSH_PUB_KEY_FILE}"
93+
rm -rf "${SSH_KEY_TMP_DIR}"
94+
}
95+
4496
setup_postgresql() {
4597
systemctl stop postgresql.service
4698
rm -rf /var/lib/pgsql/data
@@ -60,7 +112,7 @@ setup_postgresql() {
60112
setup_sqlite() {
61113
mkdir -p ${DATABASE_DIR}
62114
DATABASE_FILE="${DATABASE_DIR}/fido-device-onboard.db"
63-
> ${DATABASE_FILE}
115+
true > ${DATABASE_FILE}
64116
for DATABASE in ${DATABASES}; do
65117
sqlite3 ${DATABASE_FILE} < "${MIGRATIONS_BASE_DIR}/migrations_${DATABASE}_server_sqlite/up.sql"
66118
done
@@ -153,18 +205,96 @@ setup_serviceinfo() {
153205
tee "${CONF_DIR}/serviceinfo-api-server.yml" <<EOF
154206
---
155207
service_info:
156-
initial_user: null
157-
files: null
158-
commands: null
159-
diskencryption_clevis: null
160-
additional_serviceinfo: null
208+
initial_user:
209+
username: edge
210+
sshkeys:
211+
- "${SSH_PUB_KEY}"
212+
commands:
213+
- command: touch
214+
args:
215+
- /etc/command-testfile1
216+
- command: bash
217+
args:
218+
- -c
219+
- echo command-testfile1-content1 > /etc/command-testfile1
220+
- command: bash
221+
args:
222+
- -c
223+
- echo command-testfile1-content2 >> /etc/command-testfile1
224+
- command: mkdir
225+
args:
226+
- -p
227+
- /etc/commands
228+
- command: mv
229+
args:
230+
- /etc/command-testfile1
231+
- /etc/commands/
232+
- command: bash
233+
args:
234+
- -c
235+
- echo command-testfile2-content1 > /etc/commands/command-testfile2
236+
- command: bash
237+
args:
238+
- -c
239+
- echo command-testfile2-content2 >> /etc/commands/command-testfile2
240+
- command: rm
241+
args:
242+
- -rf
243+
- /etc/commands
244+
- command: find
245+
args:
246+
- /etc
247+
- /var
248+
- -type
249+
- f
250+
- -exec
251+
- touch {}
252+
- ;
253+
- command: mkdir
254+
args:
255+
- -p
256+
- /etc/sudoers.d /var/fdo /var/lib/fdo /var/fdo-test /var/lib/fdo-test
257+
- command: /usr/bin/sed
258+
args:
259+
- -i
260+
- -e
261+
- s/^#PasswordAuthentication yes/PasswordAuthentication no/
262+
- /etc/ssh/sshd_config
263+
may_fail: false
264+
return_stdout: true
265+
return_stderr: true
266+
- command: systemctl
267+
args:
268+
- restart
269+
- sshd
270+
return_stdout: true
271+
return_stderr: true
272+
- command: systemctl
273+
args:
274+
- daemon-reload
275+
return_stdout: true
276+
return_stderr: true
277+
files:
278+
- path: /etc/hosts
279+
permissions: 644
280+
source_path: ${SERVICE_INFO_DIR}/etc/hosts
281+
- path: /etc/sudoers.d/edge
282+
source_path: ${SERVICE_INFO_DIR}/etc/sudoers.d/edge
283+
- path: /etc/pki/ca-trust/source/anchors/isrg-root-x2-cross-signed.crt
284+
source_path: ${SERVICE_INFO_DIR}/etc/pki/ca-trust/source/anchors/isrg-root-x2-cross-signed.crt
285+
# diskencryption_clevis:
286+
# - disk_label: /dev/vda
287+
# binding:
288+
# pin: test
289+
# config: "{}"
290+
# reencrypt: true
291+
# after_onboarding_reboot: true
161292
bind: 0.0.0.0:8083
162293
service_info_auth_token: 2IOtlXsSqfcGjnhBLZjPiHIteskzZEW3lncRzpEmgqI=
163294
admin_auth_token: Va40bSkLcxwnfml1pmIuaWaOZG96mSMB6fu0xuzcueg=
164295
device_specific_store_driver:
165296
Directory:
166297
path: ${STORES_DIR}/serviceinfo_api_devices
167-
168298
EOF
169299
}
170300

@@ -175,93 +305,36 @@ export_import_vouchers() {
175305
fdo-owner-tool export-manufacturer-vouchers "http://${PRIMARY_IP}:8080" --path "${MANUFACTURER_EXPORT_DIR}"
176306
sudo tar xvf "${MANUFACTURER_EXPORT_DIR}"/export.tar -C "${MANUFACTURER_EXPORT_DIR}"
177307
sudo rm -rf "${MANUFACTURER_EXPORT_DIR}"/export.tar
178-
fdo-owner-tool import-ownership-vouchers "$(tr [:upper:] [:lower:] <<< ${OV_STORE_DRIVER})" "${DATABASE_URL}" "${MANUFACTURER_EXPORT_DIR}"
308+
fdo-owner-tool import-ownership-vouchers "$(tr "[:upper:]" "[:lower:]" <<< "${OV_STORE_DRIVER}")" "${DATABASE_URL}" "${MANUFACTURER_EXPORT_DIR}"
179309
}
180310

181311
perform_no_plain_di() {
182312
rm -f "${DEVICE_CREDENTIAL}" "${ONBOARDING_PERFORMED}"
183-
/usr/libexec/fdo/fdo-manufacturing-client no-plain-di \
184-
--manufacturing-server-url http://${PRIMARY_IP}:8080 \
185-
--rootcerts ${KEYS_DIR}/diun_cert.pem
313+
LOG_LEVEL=trace /usr/libexec/fdo/fdo-manufacturing-client no-plain-di \
314+
--manufacturing-server-url http://${PRIMARY_IP}:8080 \
315+
--rootcerts ${KEYS_DIR}/diun_cert.pem
186316
}
187317

188318
onboard() {
189-
/usr/libexec/fdo/fdo-client-linuxapp
190-
}
191-
192-
fix_selinux_policies() {
193-
SELINUX_MODULE="fdo-db"
194-
SELINUX_TE_FILE="${SELINUX_MODULE}.te"
195-
SELINUX_MOD_FILE="${SELINUX_MODULE}.mod"
196-
SELINUX_POLICY_FILE="${SELINUX_MODULE}.pp"
197-
semodule -l | grep -q "${SELINUX_MODULE}" || (tee "${SELINUX_TE_FILE}" <<EOF
198-
module fdo-db 1.0;
199-
200-
require {
201-
type postgresql_port_t;
202-
type fdo_conf_t;
203-
type fdo_t;
204-
type etc_t;
205-
type krb5_keytab_t;
206-
type sssd_var_run_t;
207-
type fdo_var_lib_t;
208-
type sssd_t;
209-
class tcp_socket name_connect;
210-
class dir { add_name remove_name search write };
211-
class sock_file write;
212-
class unix_stream_socket connectto;
213-
class file { append create rename setattr unlink write };
214-
}
215-
216-
#============= fdo_t ==============
217-
218-
allow fdo_t etc_t:file write;
219-
220-
allow fdo_t fdo_conf_t:file { append create rename setattr unlink write };
221-
222-
allow fdo_t fdo_var_lib_t:dir { add_name remove_name write };
223-
224-
allow fdo_t fdo_var_lib_t:file { create setattr unlink write };
225-
226-
allow fdo_t krb5_keytab_t:dir search;
227-
228-
allow fdo_t postgresql_port_t:tcp_socket name_connect;
229-
230-
allow fdo_t sssd_t:unix_stream_socket connectto;
231-
232-
allow fdo_t sssd_var_run_t:sock_file write;
233-
EOF
234-
checkmodule -M -m -o ${SELINUX_MOD_FILE} ${SELINUX_TE_FILE}
235-
semodule_package -o ${SELINUX_POLICY_FILE} -m ${SELINUX_MOD_FILE}
236-
semodule -i ${SELINUX_POLICY_FILE})
237-
319+
LOG_LEVEL=trace /usr/libexec/fdo/fdo-client-linuxapp
238320
}
239321

240322
[ "${OV_STORE_DRIVER}" != "Sqlite" ] || setup_sqlite
241323
[ "${OV_STORE_DRIVER}" != "Postgres" ] || setup_postgresql
242-
fix_selinux_policies
243-
generate_keys
324+
SSH_PUB_KEY=$(generate_ssh_key)
325+
generate_fdo_certificates
244326
setup_manufacturing
245327
setup_owner
246328
setup_rendezvous
329+
generate_serviceinfo_files
247330
setup_serviceinfo
248331
systemctl restart fdo-{manufacturing,owner-onboarding,rendezvous,serviceinfo-api}-server.service
249332
# Wait for servers to be up and running
250-
until [ "$(curl -X POST http://${PRIMARY_IP}:8080/ping)" == "pong" ]; do
251-
sleep 1;
252-
done;
253-
254-
until [ "$(curl -X POST http://${PRIMARY_IP}:8081/ping)" == "pong" ]; do
255-
sleep 1;
256-
done;
257-
258-
until [ "$(curl -X POST http://${PRIMARY_IP}:8082/ping)" == "pong" ]; do
259-
sleep 1;
260-
done;
261-
262-
until [ "$(curl -X POST http://${PRIMARY_IP}:8083/ping)" == "pong" ]; do
263-
sleep 1;
264-
done;
333+
for PORT in 808{0..3}; do
334+
until [ "$(curl -s -X POST http://${PRIMARY_IP}:${PORT}/ping)" == "pong" ]; do
335+
sleep 1;
336+
done;
337+
done
265338
perform_no_plain_di
266339
[ "${OV_STORE_DRIVER}" = "Directory" ] || export_import_vouchers
267340
sleep 60

0 commit comments

Comments
 (0)