Когда вы введете команду su user
, вы переключитесь на пользователя без загрузки всего его профиля. Загружаются только переменные $HOME
, $SHELL
, $USER
и $LOGNAME
. Чтобы загрузить весь профиль пользователя при переключении на него, вы должны указать, что вы входите в систему пользователя, используя флаг --login
, который имеет ярлык в виде одиночного тире(-
)после su, поэтому ваша команда будет выглядеть как su - user
.
После еще одной отладки я нашел ответ на этот вопрос. Это специфично для ядра Linux dd -wrt, см. здесь код в arp.c
Итак, в ядре есть код «защиты от спуфинга ARP», который отбрасывает мои ответные пакеты. Я могу отключить его на странице конфигурации брандмауэра точки доступа или сделать echo 0 > /proc/net/arp_spoofing_enable
в нем. Если мы его отключим, проблема исчезнет.
Проблема, с которой он столкнулся, заключается в том, что ответ ARP ретранслируется из ddwrt2
в виде кадра Wi-Fi, поэтому он содержит MAC-адрес Wi-Fi вместо MAC-адреса настольного компьютера B. Это активировало упомянутый выше код защиты от спуфинга.