Один из способов сделать это - создать программу setuid-root, написанную на C, которая будет делать только то, что нужно, и ничего более. В вашем случае ему вообще не нужно смотреть на какой-либо пользовательский ввод.
#include <unistd.h>
#include <string.h>
#include <stdio.h> // for perror(3)
// #include ... more stuff for open(2)
static void write_str_to_file(const char*fn, const char*str) {
int fd = open(fn, O_WRONLY)
if (-1 == fd) {
perror("opening device file"); // make this a CPP macro instead of function so you can use string concat to get the filename into the error msg
exit(1);
}
int err = write(fd, str, strlen(str));
// ... error check
err = close(fd);
// ... error check
}
int main(int argc, char**argv) {
write_string_to_file("/sys/class/gpio/export", "17");
write_string_to_file("/sys/class/gpio/gpio17/direction", "out");
return 0;
}
Невозможно изменить это с помощью переменных окружения или чего-то еще, потому что все, что он делает, это делает пару системных вызовов.
Оборотная сторона: вы должны проверять возвращаемое значение каждого системного вызова.
Плюс: проверка ошибок действительно проста: если есть вообще какая-то ошибка, просто perror
и спасите: выйти с ненулевым статусом. Если возникла ошибка, рассмотрите ее с помощью strace
. Вам не нужна сама эта программа, чтобы выдавать действительно хорошие сообщения об ошибках.
Как я могу зарегистрировать пароль, введенный для команды 'sftp'?
В основном вы не можете этого сделать, пока не измените исходный код openssh
. И ты не хочешь этого делать.
sftp
использует безопасную оболочку (SSH), которая считывает пароль, отправляет его на сервер и безопасно обнуляет память, в которой он был сохранен. Это означает, что вы не сможете получить пароль, что является хорошей практикой безопасности.
Есть ли у вас для этого причина? Вы хотите за кем-то шпионить?
Как сказал @Michael Kohne, это совсем небезопасно.
Для тестирования вы можете попробовать sshpass
package
$ sudo apt-get install sshpass
Затем попробуйте
$ sshpass -p 'PASSWROD' sftp jonestom@sftp.sharebox.com:/ftp/jonestom
Строка будет сохранена в вашей истории.
Помните, позаботьтесь о том, что вы тестируете.