Иногда очень удобно определить функцию оболочки и выполнить ее удаленно.
Это действительно весело.
Я буду использовать Bash и предположим, что он используется по умолчанию на удаленном сервере, но не беспокойтесь, поскольку я покажу вам, как обеспечить правильную оболочку.
Определите функцию find_setuid, которая будет использоваться для поиска файлов с разрешениями setuid.
Это довольно просто, но в то же время он служит отличным примером для этого варианта использования.
$ function find_setuid() { find $(echo $PATH | tr ":" " ") -user root -perm -4000 -exec ls -lh {} \;; }
Я буду использовать команду declare, чтобы получить определение функции.
$ declare -f find_suid find_setuid () { find $(echo $PATH | tr ":" " ") -user root -perm -4000 -exec ls -lh {} \; }
Выполните функцию find_setuid на удаленном сервере, предполагая, что будет использоваться Bash.
$ ssh cloud.sleeplessbeastie.eu "$(declare -f find_setuid); find_setuid" -rwsr-xr-x 1 root root 31K May 17 2017 /usr/bin/newgrp -rwsr-xr-x 1 root root 57K May 17 2017 /usr/bin/gpasswd -rwsr-xr-x 1 root root 133K Jun 5 2017 /usr/bin/sudo -rwsr-xr-x 1 root root 18K May 24 2017 /usr/bin/pkexec -rwsr-xr-x 1 root root 45K May 17 2017 /usr/bin/passwd -rwsr-xr-x 1 root root 40K May 17 2017 /usr/bin/chfn -rwsr-xr-x 1 root root 31K May 17 2017 /usr/bin/chsh -rwsr-xr-x 1 root root 35K Mar 7 2018 /bin/mount -rwsr-xr-x 1 root root 55K Nov 10 2016 /bin/ping -rwsr-xr-x 1 root root 22K Mar 7 2018 /bin/umount -rwsr-xr-x 1 root root 31K May 17 2017 /bin/su
Выполните функцию find_setuid на удаленном сервере, гарантируя, что Bash будет использоваться.
$ ssh cloud.sleeplessbeastie.eu /bin/bash -c "\"$(declare -f find_setuid);find_setuid\"" -rwsr-xr-x 1 root root 31K May 17 2017 /usr/bin/newgrp -rwsr-xr-x 1 root root 57K May 17 2017 /usr/bin/gpasswd -rwsr-xr-x 1 root root 133K Jun 5 2017 /usr/bin/sudo -rwsr-xr-x 1 root root 18K May 24 2017 /usr/bin/pkexec -rwsr-xr-x 1 root root 45K May 17 2017 /usr/bin/passwd -rwsr-xr-x 1 root root 40K May 17 2017 /usr/bin/chfn -rwsr-xr-x 1 root root 31K May 17 2017 /usr/bin/chsh -rwsr-xr-x 1 root root 35K Mar 7 2018 /bin/mount -rwsr-xr-x 1 root root 55K Nov 10 2016 /bin/ping -rwsr-xr-x 1 root root 22K Mar 7 2018 /bin/umount -rwsr-xr-x 1 root root 31K May 17 2017 /bin/su
Проверьте функцию find_setuid на удаленном сервере, чтобы убедиться, что Bash будет использоваться.
$ ssh cloud.sleeplessbeastie.eu /bin/bash -vc "\"$(declare -f find_setuid)\"" find_setuid () { find /usr/local/bin /usr/bin /bin /usr/games -user root -perm -4000 -exec ls -lh {} \; }
Обратите внимание, что PATH развернут на удаленном сервере, как и ожидалось.
Именно поэтому эта функция оболочки служит отличным примером для этого варианта использования.