@@ -17,6 +17,8 @@ DATABASES="${MANUFACTURER_DATABASE} ${OWNER_DATABASE} ${RENDEZVOUS_DATABASE}"
1717
1818OV_STORE_DRIVER=" ${OV_STORE_DRIVER:- Directory} "
1919
20+ SERVICE_INFO_DIR=" /var/lib/fdo/service-info/files"
21+
2022DATABASE_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+
4496setup_postgresql () {
4597 systemctl stop postgresql.service
4698 rm -rf /var/lib/pgsql/data
@@ -60,7 +112,7 @@ setup_postgresql() {
60112setup_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---
155207service_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
161292bind: 0.0.0.0:8083
162293service_info_auth_token: 2IOtlXsSqfcGjnhBLZjPiHIteskzZEW3lncRzpEmgqI=
163294admin_auth_token: Va40bSkLcxwnfml1pmIuaWaOZG96mSMB6fu0xuzcueg=
164295device_specific_store_driver:
165296 Directory:
166297 path: ${STORES_DIR} /serviceinfo_api_devices
167-
168298EOF
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
181311perform_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
188318onboard () {
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
244326setup_manufacturing
245327setup_owner
246328setup_rendezvous
329+ generate_serviceinfo_files
247330setup_serviceinfo
248331systemctl 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
265338perform_no_plain_di
266339[ " ${OV_STORE_DRIVER} " = " Directory" ] || export_import_vouchers
267340sleep 60
0 commit comments