Commit Graph

54 Commits

Author SHA1 Message Date
Wei Zhou 67b60385af
Apple FR68: New database encryption cipher (#214)
* Rough start swapping DB Encryption, add CLI PoC

* Enhance EncryptionCLI to have command line parsing

* Refactor new encryption behind AeadBase64Encryptor for every use

* Add comment about encryption passwords

* EncryptionSecretKeyChanger - use reflection to find all encrypted tables

Over the years this hasn't been updated properly. Use reflection to find
the tables with encrypted fields. This will also ensure any plugins in
the classpath that add tables will get their encrypted fields updated as well.

Table vpn_users has encrypted columns [password]
Table sslcerts has encrypted columns [password, key]
Table user_view has encrypted columns [secret_key]
Table account_details has encrypted columns [value]
Table domain_details has encrypted columns [value]
Table s2s_customer_gateway has encrypted columns [ipsec_psk]
Table ucs_manager has encrypted columns [password]
Table vm_instance has encrypted columns [vnc_password]
Table passphrase has encrypted columns [passphrase]
Table keystore has encrypted columns [key]
Table external_stratosphere_ssp_credentials has encrypted columns [password]
Table storage_pool has encrypted columns [user_info]
Table remote_access_vpn has encrypted columns [ipsec_psk]
Table user has encrypted columns [secret_key]
Table oobm has encrypted columns [password]

* Apple FR68: add new class CloudStackEncryptor

* Apple FR68: add interface com.cloud.utils.crypt.Encryptor

* Apple FR68: update com.cloud.utils.EncryptionUtil

* Apple FR68: add cloudstack-utils.jar to cloudstack-common package

* Apple FR68: use cloudstack-utils.jar in scripts

* Apple FR68: revert replace.properties to original version

* Apple FR68: update EncryptionSecretKeyChanger

* Apple FR68: Add EncryptorVersion to CloudStackEncryptor

* Apple FR68: Update com.cloud.utils.crypt.EncryptionCLI

* Apple FR68: Remove check on EncryptionSecretKeyChecker.useEncryption in CloudStackEncryptor

* Apple FR68: update EncryptionSecretKeyChanger part2

* Apple FR68: update EncryptionSecretKeyChanger part3 (force update)

* Apple FR68: move cloud-migrate-databases.in to deprecated and recreate it with java command

* Apple FR68: update EncryptionSecretKeyChanger part4 (add skip-database-migration)

* Apple FR68: set encryptor in first encryption in CloudStackEncryptor

* Apple FR68: save db.cloud.encryptor.version in db.properties

* Apple FR68: update EncryptionSecretKeyChanger part4 (clear db.cloud.encryptor.version)

* Apple FR68: load and save db.cloud.encryptor.version in db.properties

* Apple FR68: Add caller class name in debug messages

* Apple FR68: consider non-exist tables and columns

* Apple FR68: skip tables if no data exists

* Apple FR68: remove GeneralSecurityException from code

* Apple FR68: hide value with Asterisks in CloudStackEncryptor

* Apple FR68: log an error message when fail to load 'init'

* Apple FR68: remove setup/bindir/cloud-migrate-databases.deprecated.in which I think it is not needed

* Apple FR68: add new encryptor version to EncryptionSecretKeyChanger

* Apple FR68: use System.exit(1) in EncryptionSecretKeyChanger

* Apple FR68: check arguments in cloudstack-migrate-databases

* Apple FR68: remove all org.jasypt.* in code

* Apple FR68: initilize database encryptors by getting 'init'

* Apple FR68: migrate server.properties

* Apple FR68: load new management key from environment variable CLOUD_SECRET_KEY_NEW

* Apple FR68: fix unable to load 'init' in fresh installation

* Apple FR68: fix 'Rolling back the transaction' in txn.close

* Apple FR68: improve logging in cloudstack-migrate-databases

* Apple FR68: hide value with Asterisks in other encryptors

* Apple FR68: System.exit(1) if fail to migrate server.properties

* Apple FR68: migrate values from cluster_details,user_vm_details,etc

* Apple FR68: refactor EncryptionSecretKeyChanger

* Apple FR68: update user_vm_deploy_as_is_details values

* Apple FR68: update image_store.url (if protocol is cifs) and storage_pool.path (if pool_type is SMB)

* Apple FR68: minor improvement EncryptionSecretKeyChanger

* Apple FR68: add unit test EncryptionSecretKeyChangerTest

* Apple FR68: support encryption type 'env' in cloudstack-setup-databases to get env "CLOUD_SECRET_KEY" before passed value

* Apple FR68: rename Encryptor to Base64Encryptor

* Apple FR68: Backport community PR 6542

* Apple FR68: code optimization

* Apple FR68: use Options and StringUtils

* Apple FR68: add license headers

* Apple FR68: refactor CloudStackEncryptor as per Daan's review

* Apple FR68: refactor DatabaseUpgradeChecker as per Daan's review

* Apple FR68: show error message in usage.log if fail to get encrypted configurations

* Apple FR68: load new MS key from env before migration

* Apple FR68: return 1 if fail to parse arguments of EncryptionCLI

* Apple FR68: fix code smells

* Apple FR68: fix code smells (part2)

* Apple FR68: revert FOOTER of cloudstack-migrate-databases to use \n

* Apple FR68: update help message of cloudstack-setup-databases

* Apple FR68: fix code smells (part3)

* Apple FR68: make changes as per suggestions

* Apple FR68: migrate database if new encryptor version is set to different

Testing result: (assume db.cloud.encryptor.version=V1)

(1) migrate only db.properties (same db key, same db encryptor version)
Command: /usr/bin/cloudstack-migrate-databases -m mgmtkey -d dbkey -n newmgmtkey -v V1
Changes: db.cloud.encrypt.secret is encrypted by V2 (always)
         db.cloud.encryptor.version=V1
         cloudstack database is not migrated

(2) migrate only db.properties (same db key, new db encryptorversion)
Command: /usr/bin/cloudstack-migrate-databases -m mgmtkey -d dbkey -n newmgmtkey -v V2 --skip-database-migration
Changes: db.cloud.encrypt.secret is encrypted by V2 (always)
         db.cloud.encryptor.version=V2
         cloudstack database is not migrated (mostly on secondary management servers)

(3) migrate only db.properties (same db key, db encryptor version is not set)
Command: /usr/bin/cloudstack-migrate-databases -m mgmtkey -d dbkey -n newmgmtkey
Changes: db.cloud.encrypt.secret is encrypted by V2 (always)
         db.cloud.encryptor.version=V1
         cloudstack database is not migrated

(4) migrate only db.properties (different db key, same db encryptor version)
Command: /usr/bin/cloudstack-migrate-databases -m mgmtkey -d dbkey -n newmgmtkey -e newdbkey -v V1 --skip-database-migration
Changes: db.cloud.encrypt.secret is encrypted by V2 (always)
         db.cloud.encryptor.version=V1
         cloudstack database is not migrated (mostly on secondary management servers)

(5) migrate only db.properties (different db key, new db version)
Command: /usr/bin/cloudstack-migrate-databases -m mgmtkey -d dbkey -n newmgmtkey -e newdbkey -v V2 --skip-database-migration
Changes: db.cloud.encrypt.secret is encrypted by V2 (always)
         db.cloud.encryptor.version=V2
         cloudstack database is not migrated (mostly on secondary management servers)

(6) migrate only db.properties (different db key, db encryptor version is not set)
Command: /usr/bin/cloudstack-migrate-databases -m mgmtkey -d dbkey -n newmgmtkey -e newdbkey --skip-database-migration
Changes: db.cloud.encrypt.secret is encrypted by V2 (always)
         db.cloud.encryptor.version=V1
         cloudstack database is not migrated (mostly on secondary management servers)

(7) migrate db.properties and database (same db key, same db encryptor version)
Command: /usr/bin/cloudstack-migrate-databases -m mgmtkey -d dbkey -n newmgmtkey -v V1 --force-database-migration
Changes: db.cloud.encrypt.secret is encrypted by V2 (always)
         db.cloud.encryptor.version=V1
         cloudstack database is migrated using encryptor V1

(8) migrate db.properties and database (same db key, new db encryptor version)
Command: /usr/bin/cloudstack-migrate-databases -m mgmtkey -d dbkey -n newmgmtkey -v V2
Changes: db.cloud.encrypt.secret is encrypted by V2 (always)
         db.cloud.encryptor.version=V2
         cloudstack database is migrated using encryptor V2

(9) migrate db.properties and database (same db key, db encryptor version is not set)
Command: /usr/bin/cloudstack-migrate-databases -m mgmtkey -d dbkey -n newmgmtkey --force-database-migration
Changes: db.cloud.encrypt.secret is encrypted by V2 (always)
         db.cloud.encryptor.version=V1
         cloudstack database is migrated using encryptor V1

(10) migrate db.properties and database (different db key, same db encryptor version)
Command: /usr/bin/cloudstack-migrate-databases -m mgmtkey -d dbkey -n newmgmtkey -e newdbkey -v V1
Changes: db.cloud.encrypt.secret is encrypted by V2 (always)
         db.cloud.encryptor.version=V1
         cloudstack database is migrated using encryptor V1

(11) migrate db.properties and database (different db key, new db encryptor version)
Command: /usr/bin/cloudstack-migrate-databases -m mgmtkey -d dbkey -n newmgmtkey -e newdbkey -v V2
Changes: db.cloud.encrypt.secret is encrypted by V2 (always)
         db.cloud.encryptor.version=V2
         cloudstack database is migrated using encryptor V2

(12) migrate db.properties and database (different db key, db encryptor version is not set)
Command: /usr/bin/cloudstack-migrate-databases -m mgmtkey -d dbkey -n newmgmtkey -e newdbkey
Changes: db.cloud.encrypt.secret is encrypted by V2 (always)
         db.cloud.encryptor.version=V1
         cloudstack database is migrated using encryptor V1

* smoke test: fix test_primary_storage.py

* smoke test: Do NOT run tests in test_primary_storage.py in parallel

This also fixes an issue in detachvolume

'Failed to detach volume Test Volume-yyyyyy from VM VM-zzzzzz; com.cloud.exception.InternalErrorException: Could not detach volume. Probably the VM is in boot state at the moment'

* Update PR7003: rename method

---------

Co-authored-by: Marcus Sorensen <mls@apple.com>
2023-01-31 13:18:28 +01:00
Spaceman1984 041b8f6220
schema: Added ability to create schemas only when using cloudstack-setup-data… (#5187)
* Added ability to create schemas only when using cloudstack-setup-databases

* Renamed var name

* Added a check for passing --schema-only and --deploy-as together/.

* Moved validation to appropriate method

* Moved description

* fixed whitespace
2021-08-26 15:25:59 +05:30
Rohit Yadav 65672b77fb
setup: pass password in quotes for cloudstack-setup-databases (#5025)
Fixes issue of passing password and management secret key with special
characters.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2021-05-18 22:09:14 +05:30
Spaceman1984 7a7fd27350
setup: Fixed error when passing shell reserved characters to setup databases (#4995)
* Fixed error when passing shell reserved charaters to setup databases script for dbsecret

* Moved quote to encrypt method
2021-05-04 23:09:19 +05:30
Rohit Yadav 6bde1384ff Merge remote-tracking branch 'origin/4.14' into 4.15
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2021-02-05 16:01:01 +05:30
Andrija Panic b8e6c08132
setup: Update cloud-setup-databases.in (#4653) 2021-02-05 15:57:21 +05:30
davidjumani d949302d0f
packaging: Adding Centos8, Ubuntu 20.04, XCPNG8.1 Support (#4068)
* DB : Add support for MySQL 8

- Splits commands to create user and grant access on database, the old
statement is no longer supported by MySQL 8.x
- `NO_AUTO_CREATE_USER` is no longer supported by MySQL 8.x so remove
that from db.properties conn parameters

For mysql-server 8.x setup the following changes were added/tested to
make it work with CloudStack in /etc/mysql/mysql.conf.d/mysqld.cnf and
then restart the mysql-server process:

    server_id = 1
    sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_ENGINE_SUBSTITUTION"
    innodb_rollback_on_timeout=1
    innodb_lock_wait_timeout=600
    max_connections=1000
    log-bin=mysql-bin
    binlog-format = 'ROW'

    default-authentication-plugin=mysql_native_password

Notice the last line above, this is to reset the old password based
authentication used by MySQL 5.x.

Developers can set empty password as follows:

    > sudo mysql -u root
    ALTER USER 'root'@'localhost' IDENTIFIED BY '';

In libvirt repository, there are two related commits

2019-08-23 13:13 Daniel P. Berrangé            ● rpm: don't enable socket activation in upgrade if --listen present
2019-08-22 14:52 Daniel P. Berrangé            ● remote: forbid the --listen arg when systemd socket activation

In libvirt.spec.in

        /bin/systemctl mask libvirtd.socket >/dev/null 2>&1 || :
        /bin/systemctl mask libvirtd-ro.socket >/dev/null 2>&1 || :
        /bin/systemctl mask libvirtd-admin.socket >/dev/null 2>&1 || :
        /bin/systemctl mask libvirtd-tls.socket >/dev/null 2>&1 || :
        /bin/systemctl mask libvirtd-tcp.socket >/dev/null 2>&1 || :

Co-authored-by: Wei Zhou <w.zhou@global.leaseweb.com>
Co-authored-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
Co-authored-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2020-08-17 16:28:30 +05:30
Rohit Yadav d90341ebf1
cloudstack: add JDK11 support (#3601)
This adds support for JDK11 in CloudStack 4.14+:

- Fixes code to build against JDK11
- Bump to Debian 9 systemvmtemplate with openjdk-11
- Fix Travis to run smoketests against openjdk-11
- Use maven provided jdk11 compatible mysql-connector-java
- Remove old agent init.d scripts

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2020-02-12 12:58:25 +05:30
Rohit Yadav eda3b35bfa CLOUDSTACK-10012: Migrate to Embedded Jetty
- Migrate to embedded Jetty server.
- Improve ServerDaemon implementation.
- Introduce a new server.properties file for easier configuration.
- Have a single /etc/default/cloudstack-management to configure env.
- Reduce shaded jar file, removing unnecessary dependencies.
- Upgrade to Spring 5.x, upgrade several jar dependencies.
- Does not shade and include mysql-connector, used from classpath instead.
- Upgrade and use bountcastle as a separate un-shaded jar dependency.
- Remove tomcat related configuration and files.
- Have both embedded UI assets in uber jar and separate webapp directory.
- Refactor systemd and init scripts, cleanup packaging.
- Made cloudstack-setup-databases faster, using `urandom`.
- Remove unmaintained distro packagings.
- Moves creation and usage of server keystore in CA manager, this
  deprecates the need to create/store cloud.jks in conf folder and
  the db.cloud.keyStorePassphrase in db.properties file. This also
  remove the need of the --keystore-passphrase in the
  cloudstack-setup-encryption script.
- GZip contents dynamically in embedded Jetty

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2017-11-03 23:57:25 +05:30
Rohit Yadav 069aa4e5f3 CLOUDSTACK-8433: remove awsapi db usage and add upgrade cleanup path
- Removes awsapi db properties usage across codebase
- Removes references from spring xmls, test cases and TransactionLegacy
- Adds sql command to drop database cloudbridge in schema-451to460-cleanup.sql

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-05-06 15:22:04 +02:00
Rohit Yadav 518853ab43 packaging: updated hardcoded jasypt version to 1.9.2
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
(cherry picked from commit 43f39a1ec3)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-12-04 04:04:30 +05:30
Jayapal 79fcbd4a59 CLOUDSTACK-7213: fixed continuing cloud-setup-database if there is no selinux 2014-08-01 15:54:17 +05:30
Damodar Reddy 23280a47b8 CLOUDSTACK-6702 : [Windows]Due to Progress bar changes mysql path was not getting read. Fixing the same.
Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
2014-06-11 11:25:02 +05:30
Damodar Reddy 29b4fe6d9f CLOUDSTACK-6271: The cloud-setup-databases was failing when your jasypt jar path has spaces in it's path 2014-04-29 14:44:03 +05:30
Damodar Reddy c7f3250151 CLOUDSTACK-6435: Add new Command line options to setup/bindir/cloud-setup-databases.in and remove OS specific commands 2014-04-23 10:36:50 -07:00
Rajani Karuturi 50a428c3aa CLOUDSTACK-4886: printing ****** to stdout instead of db users password 2013-12-20 17:38:39 +05:30
Hugo Trippaers 89d3808a18 packaging: move jasypt jar to cloudstack-common
Continuation of the work done in a35f7c7bd1
2013-04-05 16:12:27 +02:00
Pradeep Soundararajan 7bb8ed4d05 BUG-ID: CLOUDSTACK-1557
Summary: EC2 REST API : cloudbridge database is missing on the CloudStack Installation

After this change, cloudstack-setup-databases is launching cloud-bridge related databases properly.
2013-03-13 14:20:41 -07:00
Rohit Yadav e2bd88b2a1 db: Give option to specify region id while setting up database
Signed-off-by: Rohit Yadav <bhaisaab@apache.org>
2013-02-27 15:03:14 +05:30
Rohit Yadav 16e81130cc db: Fix developer's deploydb and cloud-setup-databases for rolling update
- Fix developer prefill to use 4.0's schema
- Fix developer/pom.xml and cloud-setup-databases to not run create-schema-view,
  the upgrade path is configured to do a rolling update and set it up

Signed-off-by: Rohit Yadav <bhaisaab@apache.org>
2013-02-16 17:18:42 +05:30
Rohit Yadav f2ae6dcda9 db: Remove and merge 4.1-new-db-schema.sql to schema-40to410.sql
Signed-off-by: Rohit Yadav <bhaisaab@apache.org>
2013-02-16 12:44:45 +05:30
Rohit Yadav 34cd2d630d CLOUDSTACK-1019: Fix filename from 4201752e
Signed-off-by: Rohit Yadav <bhaisaab@apache.org>
2013-02-11 15:22:46 +05:30
Hugo Trippaers 4201752eda 4.1-new-db-schema.sql should be loaded when cloud-setup-databases
configures a fresh database.
2013-02-11 09:36:25 +01:00
Hugo Trippaers 798c7c2c18 This database file does not exist anymore 2013-02-04 22:36:59 +01:00
Min Chen 32f035c9fa Separate db view creation into create-schema-view.sql. 2013-01-03 18:23:09 -08:00
Rohit Yadav 3663af1434 cloud-setup-databases: modify try-except-finally for < python 2.4
Make cloud-setup-databases compatible to python 2.4 and before.

Add code Prasanna Santhanam <tsp@apache.org>
Partially revert a6dcd7af49 which removed
the fix for CLOUDSTACK-199: Fix how cloud-setup-databases parses
  Patch splits by right most @ in supplied argument to get
  user:password and host substrings.

Less than python <2.4 the following is unsupported and produces a
SyntaxError.
    try:
        ...code ...
    except ValueError:
        ...code ...
    finally:
        ...code ...

Workaround is the following
    try:
        try:
            ...code ...
        except ValueError:
            ...code ...
    finally:

Credits to Prasanna Santhanam <tsp@apache.org>

Signed-off-by: Rohit Yadav <bhaisaab@apache.org>
2012-10-26 14:20:37 +05:30
Rohit Yadav 947d8cc6de CLOUDSTACK-374: Allow users to choose mgmt server host
Users can now explicitly specify cluster management server node IP.
Example:

cloud-setup-database user:passwd@dbhost -i 192.168.1.10, or
cloud-setup-database user:passwd@dbhost --mshost 192.168.1.10

Also, strips off trailing whitespaces.

Signed-off-by: Rohit Yadav <bhaisaab@apache.org>
2012-10-22 16:56:50 +05:30
Alex Huang 13d771e57e it's 1.9.0 not 1.9....duh 2012-10-08 01:52:02 -07:00
Alex Huang 0ec3422122 Changed the jar file to 1.9 2012-10-08 00:07:19 -07:00
Alex Huang 0827fb7029 Checked in the license 2012-10-08 00:07:10 -07:00
frank a6dcd7af49 CloudStack CLOUDSTACK-257
AWS Api is not correctly deployed

fix cloud-setup-databases for awsapi
2012-10-08 00:06:04 -07:00
Rohit Yadav f2e0fa230d CLOUDSTACK-199: Fix how cloud-setup-databases parses user:password@host
Patch splits by right most @ in supplied argument to get user:password
and host substrings.

Signed-off-by: Rohit Yadav <rohit.yadav@citrix.com>
2012-09-26 15:40:21 +05:30
Edison Su caebc0ce74 fix rpm installation 2012-09-04 22:30:24 -07:00
David Nalley fc3ac862dc applying the commits from Chip Childers licensing cleanup 2012-06-26 10:44:04 -04:00
frank 2f634c0913 Switch to Apache license 2012-04-03 04:50:05 -07:00
frank 2b9fe25fcd Bug 13529 - Multiple Management Servers: cloud-setup-databases script fails to execute
status 13529: resolved fixed
2012-02-08 16:58:17 -08:00
frank 20f0e1f86a Bug 13034 - Error when executing cloud-setup-databases
fix typo
2012-01-11 21:02:05 -08:00
frank 676ac955cb Bug 13034 - Error when executing cloud-setup-databases
status 13034: resolved fixed
2012-01-11 20:41:48 -08:00
frank 436af31a01 Bug 12565 - no check for correctness of the options given during cloud-setup-database steps
fix a typo
2011-12-15 10:59:54 -08:00
frank 5dbe84e2ee Bug 12565 - no check for correctness of the options given during cloud-setup-database steps
status 12565: resolved fixed
2011-12-15 10:34:06 -08:00
frank f4010f2215 better error message when checking hostname failed in cloud-setup-database 2011-12-01 10:40:38 -08:00
frank 5800a88757 Bug 12220 - Unable to start management server due to "org.jasypt.exceptions.EncryptionOperationNotPossibleException"
don't encrypt empty password

status 12220: resolved fixed
2011-11-29 10:33:53 -08:00
frank c50250ca43 make encryption default while running cloud-setup-database 2011-11-28 13:26:35 -08:00
frank 7402ff0b8c Bug 11990 - Add encryption properties to db.properties during install
better help message
2011-11-23 17:32:55 -08:00
frank a23e8af810 Bug 11990 - Add encryption properties to db.properties during install
status 11990: resolved fixed
2011-11-23 16:54:45 -08:00
frank 0f0729d2a0 Refine cloud-setup-database script 2011-11-22 18:23:03 -08:00
Edison Su 163af9a3b6 do not detect ip when you just deploy database 2011-03-09 15:28:55 -05:00
Frank c38aff60f4 Bug 8275 - SELinux error message provides incorrect directions
status 8275: resloved fixed
2011-02-07 13:39:35 -08:00
Frank Zhang 032f321363 catch exception if mysqld has not been started when
perform 'cloud-setup-database'
2010-12-16 15:29:06 -08:00
edison d3404cfec1 cloud-setup-databases don't need to specify hypervisor type, just remove the confusing help 2010-11-01 15:40:43 -07:00