From 04c208adc937f9c05088b567515e4d6df8de980e Mon Sep 17 00:00:00 2001 From: Mohammedz93 <65073859+Mohammedz93@users.noreply.github.com> Date: Thu, 13 Apr 2023 14:13:24 +0300 Subject: [PATCH] Reset factory hld (#1231) --- doc/reset_factory/ResetFactoryHLD.md | 236 +++++++++++++++++++++++++++ doc/reset_factory/diagram.png | Bin 0 -> 50068 bytes 2 files changed, 236 insertions(+) create mode 100644 doc/reset_factory/ResetFactoryHLD.md create mode 100644 doc/reset_factory/diagram.png diff --git a/doc/reset_factory/ResetFactoryHLD.md b/doc/reset_factory/ResetFactoryHLD.md new file mode 100644 index 0000000000..edeb3ec4f9 --- /dev/null +++ b/doc/reset_factory/ResetFactoryHLD.md @@ -0,0 +1,236 @@ +# Reset Factory design # + +## 1. Table of Content + + +* 1. [Table of Content](#TableofContent) + * 1.1. [Revision](#Revision) + * 1.2. [Scope](#Scope) + * 1.3. [Definitions/Abbreviations](#DefinitionsAbbreviations) + * 1.4. [Overview](#Overview) + * 1.5. [Requirements](#Requirements) + * 1.5.1. [Functional requirements](#FunctionalRequirements) + * 1.5.2. [Configuration and Management Requirements](#ConfigurationManagementRequirements) +* 2. [Design](#Design) + * 2.1. [High-Level Design](#High-LevelDesign) + * 2.2. [Users Defaults](#UsersDefaults) +* 3. [Functionality](#Functionality) + * 3.1. [Reset-Factory](#Reset-Factory) + * 3.2. [Config-setup Factory](#Config-setup-Factory) +* 4. [CLI](#CLI) +* 5. [Error flow](#ErrorFlow) +* 6. [Test Plan](#TestPlan) + * 6.1. [Cases](#Cases) + + + +### 1.1. Revision +| Rev | Date | Author | Change Description | +| :---: | :-----: | :--------------: | ------------------ | +| 0.1 | 01/2023 | Mohammed Zayadna | Phase 1 Design | + +### 1.2. Scope + +This HLD document described the requirements, architecture details of Reset factory feature in switches Sonic OS based. + +### 1.3. Definitions/Abbreviations +N/A + + +### 1.4. Overview + +A factory reset is a process that restores the switch to its original manufacturer settings. This can be useful if the device's configuration has become corrupt or if the user wishes to erase all personalized configurations. + + +### 1.5. Requirements +#### 1.5.1. Functional requirements +1. It should support resetting configuration to factory default settings. + +2. It should clear logs, tech-support, reboot-cause files, warmboot files, +users history files and home directories. + +3. It should delete all non-default users and restore default passwords of default users. + +4. It should restore "/etc/sonic" directory to factory folder (Clear the directory in overlayfs upperdir). +except SONiC immutable variables file "sonic-environment" + +5. It should reboot the system to load and apply the new configuration. + +6. It should stop sonic.target to ensure that files are not deleted while other daemons are utilizing them. + +7. it should allow users/application to create their own factory default configurations or +extend the reset factory functionality. + + +#### 1.5.2. Configuration and Management Requirements +We will create a command line tool /usr/bin/reset-factory which should provide following functionality: + +1. default: reset configurations to factory default, clear all system logs and files. + +2. keep-basic: preserves basic configurations only after boot. Logs and files will be deleted except users history files and home directories. + +3. keep-all-config: preserves all configurations after boot. Logs and files will be deleted. + +4. only-config: reset configurations to factory default. Logs and files will be preserved. + + +## 2 Design + +### 2.1 High-Level Design +![diagram](diagram.png) + +(flow description in the chapter below) + +"reset-factory" script will create new config_db.json if needed using "config-setup factory" command.
+In addition, it will clear logs, tech-support and reboot-cause files, users history files and home directories.
+ +Steps: + +1. Stops sonic.target: +* monit unmonitor container_checker +* systemctl stop sonic.target + +2. If not "keep-all-config": + +config-setup factory + +3. If not ("only-config" or “keep-basic”): + +* Delete all non-default users and restore default passwords of default users. +* Delete bash, vim and python history files under "/home". +* Delete any non-dotfiles in the home directories. + +4. If not "only-config": +* Remove all docker containers +* Restore "/etc/sonic" directory to factory folder (Clear the directory in overlayfs upperdir) +* Delete all files under "/host/warmboot" +* Delete tech-support files under "/var/dump/" +* Delete all files under "/var/log" +* Delete all files and symlinks under "/host/reboot-cause/" + +5. Print to /var/log/systemlog: +New log file that won't be cleared in reset-factory. +It will allow user to track operations such as "reset-factory". + +6. Reboot + +### 2.2 Users Defaults + +During build, we will create a new file "/etc/sonic/default_users.json" that will store +default user accounts names and default hashed passwords. +The file will have same permissions as /etc/shadow "-rw-------" (600). +``` +{ + "admin": { + "password": "$y$j9T$qGjjyhXSHtuHwowV3DE44.$wrDK6/vecdYIE8ujXyVPkGHvlDHP.ySCsBTLvOdg.31" + } +} +``` +We will remove all non-default user accounts (e.g. 1000 < UID <= 6000), +and we will set the default password for default users. + +## 3 Functionality +### 3.1 Reset-Factory + +##### Default +It will generate the default config_db.json file by running command:
+config-setup factory
+It will clear system logs and files. + +##### Keep-basic + +It will generate the default config_db.json and merge it with basic configurations from the current “config_db.json”.
+Command: config-setup factory keep-basic
+It will clear system logs and files.
+ +##### Keep-all-config +It will keep the same configuration but will clear system logs and files. + +##### Only-config +It will generate the default config_db.json file by running command:
+config-setup factory only-config
+It won't clear system logs and files. + +### 3.2 Config-setup Factory + +config-setup script provides the functionality of creating factory default configuration on demand.
+Currently it generates new config_db.json file using:
+``` +sonic-cfggen -H -k ${HW_KEY} --preset ${DEFAULT_PRESET} +``` + +Also, it allows the user to extend/replace the functionality by adding hooks to the config-setup directory. + +We will extend config-setup factory to support new factory type parameter (keep-basic). +This parameter will be passed to the hook scripts so user can extend/replace those flows also. + +We will add a new conf file for config-setup: /etc/config-setup/config-setup.conf. +The file will be imported in the script and it will store variables and configurations of the script. + +##### Keep-basic + +It will generate the default config_db.json merged with basic configurations from the current “config_db.json”
+The list of tables we will be stored in config-setup.conf:
+``` +KEEP_BASIC_TABLES=MGMT_PORT,MGMT_INTERFACE,PASSW_HARDENING +``` + +We will extend this list with the following tables after the merge of features: +``` +SSH_SERVER,USER_TABLE,ROLE_TABLE +``` + + +## 4 CLI + +#### reset-factory +``` +============================================================================== +root@host:~$ sudo reset-factory --help + Usage: reset-factory < keep-all-config | only-config | keep-basic > + + Create factory default configuration and save it to + to /etc/sonic/config_db.json. + Clears logs, system files and reboot the system. + + Default - Reset configurations to factory default. Logs and files will be deleted. + keep-all-config - Preserves all configurations after boot. Logs and files will be deleted. + only-config - Reset configurations to factory default. Logs and files will be preserved. + keep-basic - Preserves basic configurations only after boot. Logs and files will be deleted. +============================================================================== +``` + +#### config-setup factory +``` +============================================================================== +root@host:~$ sudo config-setup factory --help + Usage: config-setup factory < keep-basic > + + Create factory default configuration and save it to + to ${CONFIG_DB_JSON}. + + keep-basic - Preserves basic configurations only. +============================================================================== +``` + +### 5 Error flow + The script will keep a temporary copy of "config_db.json".
+ In the event that the script has been interrupted or terminated:
+ - it will restore "config_db.json".
+ - it will reboot the system if "sonic.target" already stopped. + +### 6 Test Plan +#### 6.1 Cases +###### Good flow + - Run reset-factory without parameters + - Run reset-factory with keep-all-config/only-config/keep-basic + - Run config-setup factory without parameters + - Run config-setup factory with keep-basic + +###### Negative flow + - reset-factory failure + - config-setup factory failure + + + + diff --git a/doc/reset_factory/diagram.png b/doc/reset_factory/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..3815f6274db82b78363223c4897c742492d30df4 GIT binary patch literal 50068 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 literal 0 HcmV?d00001