Как я могу зарегистрировать пароль, введенный командой 'sftp'?

Один из способов сделать это - создать программу 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 . Вам не нужна сама эта программа, чтобы выдавать действительно хорошие сообщения об ошибках.

0
28.01.2016, 00:28
2 ответа

Как я могу зарегистрировать пароль, введенный для команды 'sftp'?

В основном вы не можете этого сделать, пока не измените исходный код openssh . И ты не хочешь этого делать.

sftp использует безопасную оболочку (SSH), которая считывает пароль, отправляет его на сервер и безопасно обнуляет память, в которой он был сохранен. Это означает, что вы не сможете получить пароль, что является хорошей практикой безопасности.

Есть ли у вас для этого причина? Вы хотите за кем-то шпионить?

2
29.04.2021, 00:18

Как сказал @Michael Kohne, это совсем небезопасно.

Для тестирования вы можете попробовать sshpass package

$ sudo apt-get install sshpass

Затем попробуйте

$ sshpass -p 'PASSWROD' sftp jonestom@sftp.sharebox.com:/ftp/jonestom

Строка будет сохранена в вашей истории.

Помните, позаботьтесь о том, что вы тестируете.

0
29.04.2021, 00:18

Теги

Похожие вопросы