diff --git a/dockers/docker-fpm-frr/base_image_files/rvtysh b/dockers/docker-fpm-frr/base_image_files/rvtysh new file mode 100755 index 0000000000..fb61b949e0 --- /dev/null +++ b/dockers/docker-fpm-frr/base_image_files/rvtysh @@ -0,0 +1,22 @@ +#!/bin/bash + +# The command rvtysh can be run as root priviledge by any user without password, only allow to execute readonly commands. + +# The options in the show command cannot contains any charactors to run multiple sub-commands potentially, such as "\n", "\r", "|", "&", "$" and ";". +if printf -- "$*" | grep -qPz '[\n\r|&$;]'; then + echo "Not allow to run the command, please use the comand 'sudo vtysh' instead." 1>&2 + exit 1 +fi + +# The sub commands must start with "show" +LAST_PARA= +for para in "$@" +do + if [ "$LAST_PARA" == "-c" ] && [[ "$para" != show* ]]; then + echo "Not allow to run the command '$para', please use the comand 'sudo vtysh' instead." 1>&2 + exit 1 + fi + LAST_PARA=$para +done + +vtysh "$@" diff --git a/dockers/docker-fpm-quagga/base_image_files/rvtysh b/dockers/docker-fpm-quagga/base_image_files/rvtysh new file mode 120000 index 0000000000..3956b5bfb3 --- /dev/null +++ b/dockers/docker-fpm-quagga/base_image_files/rvtysh @@ -0,0 +1 @@ +../../docker-fpm-frr/base_image_files/rvtysh \ No newline at end of file diff --git a/files/image_config/sudoers/sudoers b/files/image_config/sudoers/sudoers index fbe4cf1f7f..041290151a 100644 --- a/files/image_config/sudoers/sudoers +++ b/files/image_config/sudoers/sudoers @@ -30,6 +30,7 @@ Cmnd_Alias READ_ONLY_CMDS = /bin/cat /var/log/syslog*, \ /usr/bin/lldpctl, \ /usr/bin/sensors, \ /usr/bin/tail -F /var/log/syslog, \ + /usr/bin/rvtysh *, \ /usr/bin/vtysh -c show *, \ /usr/bin/vtysh -n [0-9] -c show *, \ /usr/local/bin/decode-syseeprom, \ diff --git a/rules/docker-fpm-frr.mk b/rules/docker-fpm-frr.mk index 1ea79bc80a..e584bf5510 100644 --- a/rules/docker-fpm-frr.mk +++ b/rules/docker-fpm-frr.mk @@ -27,6 +27,7 @@ $(DOCKER_FPM_FRR)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro $(DOCKER_FPM_FRR)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) $(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += vtysh:/usr/bin/vtysh +$(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += rvtysh:/usr/bin/rvtysh $(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TSA:/usr/bin/TSA $(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TSB:/usr/bin/TSB $(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TSC:/usr/bin/TSC diff --git a/rules/docker-fpm-quagga.mk b/rules/docker-fpm-quagga.mk index 5a384eedab..ba3d8a428b 100644 --- a/rules/docker-fpm-quagga.mk +++ b/rules/docker-fpm-quagga.mk @@ -13,3 +13,4 @@ $(DOCKER_FPM_QUAGGA)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro $(DOCKER_FPM_QUAGGA)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) $(DOCKER_FPM_QUAGGA)_BASE_IMAGE_FILES += vtysh:/usr/bin/vtysh +$(DOCKER_FPM_QUAGGA)_BASE_IMAGE_FILES += rvtysh:/usr/bin/rvtysh