Эта строка:
root 4056 2388 0 13:00 pts/4 00:00:00 sudo -EH -u someuser nohup sh /tmp/check.sh
сообщает, что sudo...
был запущен от имени пользователя root. Это происходит потому, что двоичный файл sudo
имеет setuid и ожидается (независимо от того, какой пользователь запросил sudo
для запуска ). Вы пытаетесь выяснить, под каким пользователем выполняется команда, которую затем запустил sudo .
Использование ps -ef|grep -i nohup
дало вам только эту единственную строку вывода, потому что когда nohup
запускается, он немедленно отключается после выполнения команды, которую ему было предложено запустить, и тогда в ps
не осталось nohup
вывод в grep для последующего использования.
Если вы вместо этого ищете check.sh
, вы получите (по крайней мере )две строки вывода :ту, которую вы уже видите, и еще одну, предназначенную только дляsh /tmp/check.sh
:
root 14260 14090 0 13:20 pts/4 00:00:00 sudo -HE -u someuser nohup sh /tmp/check.sh
someuser 14261 14260 0 13:20 pts/4 00:00:00 sh /tmp/check.sh
Это показывает, что sh
команда выполняется как пользователь, в то время как sudo
просто сидит и ждет завершения внутренней команды, продолжая выполняться как root.
Вместо того, чтобы иметь программы SUID на узле SSH, лучше подключиться как пользователь с необходимыми привилегиями, но связать определенную команду с этим ключом.
Мы делаем это в файле .ssh/authorized_keys
целевого пользователя. Например,
command="poweroff" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJQwKcn2AJxNpuzRM/SfJLn0UEXCMmAmI2Xdqeng4nB9 saft@home
Если мы хотим использовать одну из нескольких команд, мы можем использовать сценарий, который интерпретирует $SSH_ORIGINAL_COMMAND
соответствующим образом:
#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
poweroff)
exec poweroff
;;
firefox)
killall firefox; systemctl enable apache; exec firefox
;;
*)
printf '%s\n' >&2 \
"Unrecognised command `$SSH_ORIGINAL_COMMAND'" \
'Valid commands are:' \
' * poweroff' \
' * firefox'
exit 1
;;
esac