v-run-cli-cmd 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/bin/bash
  2. # info: run cli command
  3. # options: USER FILE
  4. #
  5. # The function runs a limited list of cli commands with dropped privileges as the specific hestia user
  6. user=$1
  7. clicmd=$2
  8. # Includes
  9. source $HESTIA/func/main.sh
  10. #----------------------------------------------------------#
  11. # Verifications #
  12. #----------------------------------------------------------#
  13. check_args '2' "$#" 'USER CMD [ARGS]'
  14. is_format_valid 'user'
  15. is_object_valid 'user' 'USER' "$user"
  16. # Checking user homedir
  17. homedir=$(grep "^$user:" /etc/passwd | cut -f 6 -d :)
  18. if [ -z $homedir ]; then
  19. check_result $E_NOTEXIST "Error: user home directory doesn't exist"
  20. fi
  21. if [ "$clicmd" = "composer" ]; then
  22. realcmd="$homedir/.composer/composer"
  23. else
  24. realcmd="$(which "$clicmd")"
  25. check_result $? "Unknown cli command" $E_NOTEXIST
  26. fi
  27. if [ ! -x "$realcmd" ]; then
  28. check_result $E_NOTEXIST "Error: Cli command does not exist"
  29. fi
  30. if [ "$realcmd" != '/bin/ps' -a \
  31. "$realcmd" != '/bin/ls' -a \
  32. "$realcmd" != '/bin/tar' -a \
  33. "$realcmd" != '/bin/zip' -a \
  34. "$realcmd" != '/usr/bin/unzip' -a \
  35. "$realcmd" != '/bin/gzip' -a \
  36. "$realcmd" != '/bin/gunzip' -a \
  37. "$realcmd" != '/bin/mkdir' -a \
  38. "$realcmd" != '/usr/bin/find' -a \
  39. "$realcmd" != '/usr/bin/id' -a \
  40. "$realcmd" != '/bin/grep' -a \
  41. "$realcmd" != '/bin/egrep' -a \
  42. "$realcmd" != '/bin/sed' -a \
  43. "$realcmd" != '/bin/cat' -a \
  44. "$realcmd" != '/usr/bin/php5.6' -a \
  45. "$realcmd" != '/usr/bin/php7.0' -a \
  46. "$realcmd" != '/usr/bin/php7.1' -a \
  47. "$realcmd" != '/usr/bin/php7.2' -a \
  48. "$realcmd" != '/usr/bin/php7.3' -a \
  49. "$realcmd" != '/usr/bin/php7.4' -a \
  50. "$realcmd" != '/usr/bin/php' -a \
  51. "$clicmd" != 'composer' ]; then
  52. check_result $E_FORBIDEN "Error: Cli command not enabled"
  53. fi
  54. all_scriptargs=("$@")
  55. for ((I=3; I <= $# ; I++)); do
  56. cmdArgs="$cmdArgs ${all_scriptargs[${I}-1]}"
  57. done
  58. runuser -u "$user" -- $realcmd $cmdArgs
  59. if [ $? -ne 0 ]; then
  60. echo "Error: cmd exited with errors"
  61. exit 3
  62. fi
  63. # Logging
  64. log_event "$OK" "$ARGUMENTS"
  65. exit