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..81fb23046a --- /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_PARAM= +for param in "$@" +do + if [ "$LAST_PARAM" == "-c" ] && [[ "$param" != show* ]]; then + echo "Not allow to run the command '$param', please use the comand 'sudo vtysh' instead." 1>&2 + exit 1 + fi + LAST_PARAM=$param +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 a0aab08e8e..9517450fe5 100644 --- a/files/image_config/sudoers/sudoers +++ b/files/image_config/sudoers/sudoers @@ -32,6 +32,7 @@ Cmnd_Alias READ_ONLY_CMDS = /sbin/brctl show, \ /usr/bin/sensors, \ /usr/bin/sfputil show *, \ /usr/bin/teamshow, \ + /usr/bin/rvtysh *, \ /usr/bin/vtysh -c show *, \ /bin/cat /var/log/syslog*, \ /usr/bin/tail -F /var/log/syslog diff --git a/rules/docker-fpm-frr.mk b/rules/docker-fpm-frr.mk index cb06db5e3f..f3a560afe5 100644 --- a/rules/docker-fpm-frr.mk +++ b/rules/docker-fpm-frr.mk @@ -24,4 +24,5 @@ $(DOCKER_FPM_FRR)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro $(DOCKER_FPM_FRR)_RUN_OPT += -v /etc/sonic/frr:/etc/frr:rw $(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 += monit_bgp:/etc/monit/conf.d diff --git a/rules/docker-fpm-quagga.mk b/rules/docker-fpm-quagga.mk index a2c19c75e0..ec1ce5218e 100644 --- a/rules/docker-fpm-quagga.mk +++ b/rules/docker-fpm-quagga.mk @@ -22,3 +22,4 @@ $(DOCKER_FPM_QUAGGA)_RUN_OPT += --net=host --privileged -t $(DOCKER_FPM_QUAGGA)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro $(DOCKER_FPM_QUAGGA)_BASE_IMAGE_FILES += vtysh:/usr/bin/vtysh +$(DOCKER_FPM_QUAGGA)_BASE_IMAGE_FILES += rvtysh:/usr/bin/rvtysh