Копия от Linux до окон каждую минуту

Можно легко извлечь зашифрованный пароль с awk. Затем необходимо извлечь префикс $algorithm$salt$ (предполагающий, что эта система не использует традиционный DES, который сильно удерживается от использования, потому что это может быть вынуждено скотами в эти дни).

correct=$(

Для проверки пароля базовая функция C crypt, но нет никакой стандартной команды оболочки для доступа к нему.

На командной строке можно использовать остроту Perl для вызова crypt на пароле.

supplied=$(echo "$password" |
           perl -e '$_ = ; chomp; print crypt($_, $ARGV[0])' "$prefix")
if [ "$supplied" = "$correct" ]; then …

Так как это не может быть сделано в чистых инструментах оболочки, если Вы имеете Perl в наличии, Вы могли бы также сделать все это в Perl. (Или Python, Ruby, … независимо от того, что Вы имеете доступный, который может звонить crypt функция.) Предупреждение, непротестированный код.

#!/usr/bin/env perl
use warnings;
use strict;
my @pwent = getpwnam($ARGV[0]);
if (!@pwent) {die "Invalid username: $ARGV[0]\n";}
my $supplied = ;
chomp($supplied);
if (crypt($supplied, $pwent[1]) eq $pwent[1]) {
    exit(0);
} else {
    print STDERR "Invalid password for $ARGV[0]\n";
    exit(1);
}

Во встроенной системе без Perl я использовал бы маленькую, выделенную программу C. Предупреждение, введенный непосредственно в браузер, я даже не попытался скомпилировать. Это предназначено для иллюстрирования необходимых шагов, не как устойчивая реализация!

/* Usage: echo password | check_password username */
#include 
#include 
#include 
#include 
#include 
#include 
int main(int argc, char *argv[]) {
    char password[100];
    struct spwd shadow_entry;
    char *p, *correct, *supplied, *salt;
    if (argc < 2) return 2;
    /* Read the password from stdin */
    p = fgets(password, sizeof(password), stdin);
    if (p == NULL) return 2;
    *p = 0;
    /* Read the correct hash from the shadow entry */
    shadow_entry = getspnam(username);
    if (shadow_entry == NULL) return 1;
    correct = shadow_entry->sp_pwdp;
    /* Extract the salt. Remember to free the memory. */
    salt = strdup(correct);
    if (salt == NULL) return 2;
    p = strchr(salt + 1, '$');
    if (p == NULL) return 2;
    p = strchr(p + 1, '$');
    if (p == NULL) return 2;
    p[1] = 0;
    /*Encrypt the supplied password with the salt and compare the results*/
    supplied = crypt(password, salt);
    if (supplied == NULL) return 2;
    return !!strcmp(supplied, correct);
}

Другой подход должен использовать существующую программу такой как su или login. На самом деле, если бы Вы можете, это быть идеальными, чтобы принять меры, чтобы веб-приложение работало независимо от того, что этому нужно через su -c somecommand username. Трудность здесь состоит в том, чтобы подать пароль к su; это требует терминала. Обычный инструмент для эмуляции терминала, ожидают, но это - большая зависимость для встроенной системы. Кроме того, в то время как su находится в BusyBox, он часто опускается, потому что многое из его использования требует, чтобы двоичный файл BusyBox был корнем setuid. Однако, если можно сделать это, это - самый устойчивый подход с точки зрения безопасности.

5
01.04.2011, 09:40
2 ответа

Необходимо попробовать rsync вместо CP: rsync -avz linux_path /mnt/windows_share/ и crontab вместо цикла жемчуга: crontab -e и добавьте следующую строку к нему:

* * * * * rsync -avz linux_path /mnt/windows_share/

Это будет выполняемым каждую минуту, и если это - опция в Вашем случае, это более устойчиво, чем цикл с условием продолжения.

10
27.01.2020, 20:34
  • 1
    И это имеет добавленное преимущество того, чтобы быть намного более устойчивым в его обновлении, чем CP-u, таким образом, у Вас будет значительно меньше сети наверху... Говорить, которого, я утверждал бы, что, если бы та доля является нетривиальным размером, Вы добились бы большего успеха для обновления немного менее часто начальной загрузки –  Shadur 01.04.2011, 10:25
  • 2
    Вы, вероятно, не хотите-v с rsync, выполненным как задание крона, если Вам не нравится много электронной почты. Даже без изменений это продолжит несколько линий вывода, который будет отправлен по почте прочь. –  penguin359 01.04.2011, 12:05

Можно избежать необходимости повторно монтировать долю (и также позвольте ей быть смонтированной непривилегированными учетными записями пользователей) путем добавления его к fstab (/etc/fstab).

2
27.01.2020, 20:34

Теги

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