2

У меня есть файловый сервер (использующий Samba 4, если это важно), к которому я обычно подключаюсь как гость с доступом только для чтения. Редко, я хочу изменить его содержимое, поэтому я должен войти в систему как другой пользователь. Есть две проблемы с этим.

1) Я хотел бы сделать это без необходимости отключения от общего ресурса. То есть я хотел бы сделать что-то аналогичное команде Unix su . Есть ли такая возможность в протоколе SMB?

2) net use не знает, когда я подключился к общему ресурсу (запустив программу, которая обращается к нему). Он сообщает "В списке нет записей", также я не могу использовать net use \\server\share /delete ("Не удалось найти сетевое соединение"). Попытка использовать net use \\server\share /u:user , однако, потерпит неудачу, сказав, что несколько соединений, использующих более одного имени пользователя, не допускаются Есть ли способ принудительно отключить неявное гостевое соединение, кроме закрытия каждой программы, использующей это соединение?

2 ответа2

0

Что странного в net use это то, что она не работает с гостевым пользователем. Возможно, вам придется покопаться в Win32 API, чтобы получить то, что вам действительно нужно, вместо того чтобы полагаться на инструменты командной строки.

Чтобы изменить учетные данные для сетевого ресурса в Windows, попытайтесь войти в систему под другим пользователем (например, ввести неверное имя пользователя и пароль). Windows сама удалит старые учетные данные для входа.

Однако я нашел более эффективный метод. Просто вызывая WNetAddConnection2 , Windows выполняет очистку самостоятельно, без попытки входа в систему.

Я написал небольшую программу на C, которая позволяет мне выходить из системы и входить в систему под другим пользователем общего сетевого ресурса в Windows. При запуске программы открывается стандартный диалог входа в сеть Windows.

В моем коде я назвал WNetCancelConnection2 до WNetAddConnection2 . Если я вспоминаю, я не думаю, что для отмены общего ресурса необходимо отменить соединение. Однако я все равно отменил соединение для моего сопоставленного ресурса, потому что имеет смысл сначала удалить подключенный диск, чтобы он не появлялся, когда нет активных учетных данных для входа.

Смотрите мой ответ здесь для кода C:

0

Чтобы ответить на ваш первый вопрос:

Думаю, нет. Причина, по которой он не поддерживается, заключается в том, что тот, кто сделал SMB, не удосужился добавить такую поддержку. Однако, в качестве обходного пути, просто используйте несколько учетных данных, как вы и думали.

Чтобы ответить на ваш второй вопрос:

Нет. Вы процитировали компьютер, говоря, что вы не можете этого сделать.

«Попытка использовать net use \server \share /u: пользователь потерпит неудачу, сказав, что несколько подключений, использующих более одного имени пользователя, не допускаются».

Тем не менее, я подозреваю, что вы можете использовать другую акцию. Просто создайте новую общую папку, указывая на то же место. (Используйте fsmgmt.msc, так как этот интерфейс позволит вам создать общий ресурс. В командной строке введите: «start fsmgmt.msc».) Или, с клиента, попробуйте просто зайти в \server \c $ или \server \d $ или где-нибудь еще. (Если вы запустите fsmgmt.msc на сервере, вы можете увидеть, где находится подходящее место.)

Используемая акция, но "нет пользы", не видя ее, звучит для меня странно. Хотя теоретически я предполагаю, что программа может содержать встроенный SMB-клиент вместо Windows, что приведет к тому, что "net use" не увидит его (на клиенте). Тем не менее, сервер должен сообщить об этом, используя "net session".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .