Взаимодействие с Windows-системами
Запуск Win32-приложений
Несмотря на то, что:
-
хранилища содержат очень много различного программного обеспечения;
-
пакеты ставить в любом случае проще и комфортнее для пользователя, чем какие-либо приложения с собственным инсталлятором;
иногда всё-таки возникает необходимость воспользоваться каким-то приложением, которое распространяется исключительно под Windows.
Для того, чтобы осуществить подобное, в Linux используется программа WINE (WINE = Wine Is Not an Emulator).
Таким образом, название сообщает нам, что эта программа не является эмулятором. И верно, на деле принцип работы Wine проще: так как windows-приложение состоит из тех же процессорных инструкций, что и любое другое приложение под данный процессор, то для его исполнения достаточно сделать вид, что оно исполняется в привычной для себя Windows-среде --- т.е. вызывает из нужных библиотек нужные функции, распознает правильную абстракцию файловой системы и т.д.
Параметры данной "искуственной" среды задаются в конфигурационных файлах wine (их удобно редактировать с помощью утилиты winecfg): к примеру, там задаётся соответствие "дисков" Windows, которые сможет "увидеть" запускаемая Windows-программа, некоторым каталогам вашей файловой системы в Linux. Стоит быть осторожным при задании этих каталогов: если исполняемое при помощи wine приложение находится вне них, работать оно не будет.
Могут возникнуть и другие неожиданности --- например, при запуске консольных Windows-приложений:
[user@demo ~]$ wine Far.exe
err:winedevice:ServiceMain driver L"eusk3usb" failed to load
err:winedevice:ServiceMain driver L"SNTNLUSB" failed to load
err:seh:setup_exception_record stack overflow 188 bytes in thread 0009 eip cdcdcdcd esp 00231274
stack 0x230000-0x231000-0x330000
Far Commander не запустится просто так, потому что здесь он должен работать в консоли Linux. Wine сам этого отличить не может, и надо это явно указать: wine-console --backend=user Far.exe
Также при работе с консольными приложениями, скорее всего, стоит указать в конфигураторе winecfg режим эмуляции Windows 98 из-за некоторых проблем с вызовом программ в консоли Windows.
Но, увы, все эти и многие другие ухищрения могут ни к чему не привести - большое количество Windows-приложений ни при каких условиях не сможет заработать в среде wine по тем или иным причинам. Сообщество поддерживает различные базы приложений, работающих в wine, одна из них находится на самом сайте wine --- Wine HQ App DB.
Чтобы завершить наш разговор на тему пакета wine, определим его общее предназначение: wine --- свободная программа, предназначенная для запуска Windows-программ. Помимо этого, на базе wine в данный момент разрабатываются как минимум три известных несвободных версии, которые предназначены для более специфичных прикладных задач:
-
Cedega --- расширенный wine с встроенной поддержкой DirectX для запуска Windows-игр. Разработкой и поддержкой программы занимается компания Transgaming software;
-
Crossover office --- расширение wine, созданное для запуска и комфортной работы с офисными Windows-приложениями;
-
В Санкт-Петербурге функционирует команда wine@etersoft, которая занимается приспособлением wine для запуска программных продуктов, специфичных для российского рынка --- 1С, генераторы отчётов и документов и т.д. В отличие от предыдущих программных продуктов, wine@etersoft local --- свободный программный продукт, и в такой версии он входит в дистрибутив ПСПО. Помимо версии local существуют также версии network и sql: первая позволяет запускать продукты 1С для многопользовательской работы с клиентами, а вторая умеет транслировать sql-запросы по образу и подобию Microsoft SQL. Кстати, документация для wine, созданная wine@etersoft, рекомендуется к прочтению как лучшая из существующих.
Стоит отметить, что приложения на Java, скорее всего, будут работать.
SMB: теория
Семейство протоколов SMB (Server Message Block), оно же CIFS (англ. Common Internet File System --- единая файловая система для Internet) используется, несмотря на название, для доступа к ресурсам в пределах локальной сети.
Разработка протоколов SMB началась фирмой IBM во времена сотрудничества IBM и Microsoft. Последняя внесла в протокол наибольшее число изменений, интенсивно использует его модифицированную версию до сих пор, и даже предлагала его на роль интернет-стандарта под именем CIFS. Кроме реализации Microsoft, существует в основном совместимая с нею свободная реализация SMB, созданная проектом Samba.
В семейство протоколов CIFS, помимо собственно сетевой файловой системы, входит система авторизации пользователей, система доступа к принтерам, собственная реализация службы имён компьютеров под названием WINS. Что касается сетевой файловой системы, основное достоинство реализации CIFS по сравнению с NFS (по крайней мере, NFS версии 3) --- это авторизация по логину и паролю, а не по адресу компьютера и локальным реквизитам пользователя. Иными словами, для использования такой системы необходимо, чтобы на клиенте и на пользователе был одинаковый набор пользователей, которые получают доступ к NFS, и мы предполагаем, что если пользователь авторизовался на своей машине, и она обращается за файлами на сервер от имени пользователя, то это правильный пользователь и ему можно отдать файлы. Подход к авторизации в NFS3 предполагает, что вся система администрируется единым образом, что было отчасти верно четверть века тому назад, но и тогда этот подход порождал проблемы с безопасностью и ограничениями доступа.
В случае же неанонимного доступа к файловой системе по протоколу CIFS пользователь авторизует себя логином и паролем непосредственно при соединении с сервером. Однако при этом изменяется вся классическая система прав доступа к файлам, так как при авторизации пользователю выдаётся некий временный UID. В принципе, при помощи CIFS можно даже сделать так, что Linux-машины будут авторизовывать пользователей на NT-домене, сервер которого работает под ОС Windows. Кроме того, компьютер с Samba может сам выступать роли контроллера домена NT4.
Как было упомянуто выше, в POSIX-совместимых системах, в частности, GNU/Linux, пакет программных продуктов, реализующий семейство протоколов CIFS, называется samba. Этот пакет очень прост в настройке, во многом благодаря потому, что из-за его больших размеров документация к нему содержит не только общие случаи использования, но и множество конкретных примеров. Также основные конфигурационные файлы содержат большое количество комментариев, что минимизирует необходимость в чтении документации.
Основной конфигурационный файл пакета samba называется smb.conf, и хранится обычно в /etc/samba/smb.conf. Для настройки того, что в Windows называется "Общий доступ к папке", достаточно извлечь из комментариев в этом файле несколько строк и перезапустить samba, выполнив команду service samba restart. Одна из опций --- имя домена (то есть, рабочей группы), в которую входит данная машина. Весьма важным является параметр security, который определяет, каким образом пользователи авторизуются для доступа к ресурсам.
При уровне доступа на уровне пользователя (на англ. этот тип доступа называется user), который включен по умолчанию, авторизация происходит по внутренней базе пользователей samba. Иными словами, следует иметь в виду, что в общем случае пользователи системы не имеют ничего общего с пользователями samba, хотя часто их делают совпадающими, а также существуют единые механизмы ведения списка пользователей системы и samba . Одно из ключевых различий между двумя группами пользователей состоит в том, что для пользователей samba в базе должна хранится информация, по которой Samba можно восстановить его пароль в момент идентификации пользователя.
Это необходимо из-за особенностей механизма аутентификации, которая происходит следующим образом: сначала клиент стучится к серверу, который посылает клиенту некоторую "соль", то есть небольшое количество случайных данных. Клиент хэширует свой пароль вместе с солью и отправляет серверу, который, зная соль и пароль, восстанавливает хэш и проверяет, совпадает ли пароль.
Наиболее простым способом хранения логинов и паролей в Samba является файл smbpasswd, который в ПСПО имеет полный путь /etc/samba/smbpasswd. Samba в smbpasswd хранит восстановимые хэши от паролей пользователей, для добавления пользователей в базу пользователей samba существует утилита smbpasswd, у которой, в частности, есть возможность синхронизировать добавление с добавлением пользователя в систему. Это необходимо, например, для того, чтобы отдавать через CIFS домашние каталоги пользователей системы: для этого нужно, чтобы соответствующий пользователь существовал в системе.
SMB: практика
Для установки службы Samba, поддерживающей протокол, следует выполнить следующую команду:
# apt-get install samba
Ручная настройка
Откроем конфигурационный файл службы Samba --- /etc/samba/smb.conf. Обычно большая часть строк в этом файле --- комментарии, облегчающие процесс настройки и избавляющие от необходимости слишком часто обращаться к соответствующей странице руководства (smb.conf(5)). Обратим внимание на некоторые из незакомментированных строк. В разделе [global] мы обнаружим следующий параметр:
workgroup = WORKGROUP
Это имя, по которому компьютеры объединяются в рабочую группу. Значение данного параметра влияет на то, как наша сеть будет отображаться в различных сетевых навигаторах, поддерживающих протокол SMB.
Обратим также внимание на установленный режим безопасности:
security = user
В этом режиме доступ к ресурсам осуществляется с ограничениями и правами пользователей. Немного ниже в файле можно задать более тонкие настройки. В настоящее время включено, к примеру, шифрование паролей:
encrypt passwords = true
Можно сделать так, чтобы пароли POSIX и SMB синхронизовались, то есть при установке пароля SMB менялся и пароль POSIX. Для этого нужно раскомментировать следующую строку:
# unix password sync = yes
Далее указаны опции, связанные с сосуществованием в одной сети нескольких машин с SMB-серверами (им нужно выбирать "лидера" и пр.). Можно установить ограничения на IP-адреса машин в сети. Данная строка, если её раскомментировать, ограничивает список узлов, имеющих доступ к Samba, сетями 192.168.1.0/24, 192.168.2.0/24, а так же разрешает локальный доступ (локальная сеть 127.0.0.0/8).
; hosts allow = 192.168.1. 192.168.2. 127.
Есть и возможность поддержки NT-домена (грубо говоря, рабочей группы с единым механизмов аутентификации пользователей). При использовании домена можно задать имена сценариев, которые следует выполнять при входе в систему:
# Enable this if you want Samba to be a domain logon server for
# Windows95 workstations or Primary Domain Controller for WinNT and Win2k
; domain logons = yes
# run a specific logon batch file per workstation (machine)
; logon script = %m.bat
# run a specific logon batch file per username
; logon script = %U.bat
Обратим также внимание на раздел, связанный с именами файлов. При изменении настроек этого раздела следует помнить, что в ОС Linux в имени файла может присутствовать любой символ, кроме символа косой черты / и символа с кодом 0; для ОС Windows же ограничения иные. Если попробовать создать файл с "неудобным" для Windows именем, то он появится, но в его имени обнаружатся различные шестнадцатеричные цифры. Обратиться к такому файлу по имени будет возможно, однако подобных проблем, тем не менее, лучше не создавать. Если же при конфигурации сети известно, что все компьютеры в ней используют ОС Linux, то можно вписать в [global]-раздел файла smb.conf опцию unix extensions = yes (или раскомментировать соответствующую строку, если она уже имеется), что позволит работать с такими именами без дополнительных сложностей.
Перейдем к разделу, содержащему настройки ресурсов. Как видим, домашние каталоги пользователей помещены в специальный раздел с именем homes. При помощи него все домашние папки пользователей могут быть автоматически доступны как отдельные ресурсы Samba (в данном случае --- и с правами на запись).
[homes]
comment = Home Directory for '%u'
browseable = no
writable = yes
Чтобы получить доступ к ним по протоколу SMB, требуется использовать не только регистрационные имена, но и SMB-пароли этих пользователей (их мы еще не создавали). Флаг browseable в списке опций отвечает за просмотр всего списка ресурсов. В данном случае, как мы видим, он установлен в no, чтобы домашние каталоги пользователей в этот список не попадали --- иначе любой злоумышленник легко получит регистрационные имена всех пользователей нашей системы.
Отметим, что кроме пользователей из обычного списка есть также понятие неавторизовавшегося пользователя ("гостевой доступ"). Доступность SMB-ресурсов для такого пользователя определяется значениями флага public. Раскомментируем ниже в конфигурационном файле настройки ресурса с именем tmp:
[tmp]
comment = Temporary file space
path = /var/local/share
read only = no
public = yes
Сохраним изменения, внесенные нами в smb.conf, после чего перезапустим службу smb:
[root@class305 ~]# chkconfig smb on
[root@class305 ~]# service smb restart
Используем теперь (с соседнего компьютера) программу smbclient для просмотра списка ресурсов на нашем сервере (здесь host1 --- это имя сервера):
[user@host193 ~]$ smbclient -L host1
Password:
Anonymous login successful
Domain=[ALTDOMAIN] OS=[Unix] Server=[Samba 3.0.30-ALT]
Sharename Type Comment
--------- ---- -------
tmp Disk Temporary file space
IPC$ IPC IPC Service (Samba server on class305 (v. 3.0.30-ALT))
Anonymous login successful
Domain=[ALTDOMAIN] OS=[Unix] Server=[Samba 3.0.30-ALT]
Server Comment
--------- -------
CLASS305 Samba server on class305 (v. 3.0.30-ALT)
Workgroup Master
--------- -------
ALTDOMAIN
Просмотрим содержимое ресурса tmp:
[user@host193 ~]$ smbclient //host1/tmp
Password:
Anonymous login successful
Domain=[ALTDOMAIN] OS=[Unix] Server=[Samba 3.0.30-ALT]
smb: \> ls
. D 0 Wed Aug 6 16:53:38 2008
.. D 0 Wed Aug 6 14:14:34 2008
ksocket-saj D 0 Wed Aug 6 16:35:47 2008
kde-saj D 0 Wed Aug 6 16:34:21 2008
gconfd-saj D 0 Wed Aug 6 14:29:34 2008
orbit-saj D 0 Wed Aug 6 16:09:05 2008
.xfsm-ICE-45SOFU H 231 Wed Aug 6 14:29:11 2008
.X0-lock HR 11 Wed Aug 6 14:17:35 2008
.font-unix DH 0 Wed Aug 6 14:17:18 2008
.esd DH 0 Wed Aug 6 14:17:18 2008
.X11-unix DH 0 Wed Aug 6 14:17:35 2008
.ICE-unix DH 0 Wed Aug 6 16:35:47 2008
62086 blocks of size 2048. 62080 blocks available
smb: \>
Завершим работу smbclient. Создадим теперь на сервере нового пользователя:
[root@class305 ~]# adduser smbuser
Обратим внимание, что пароль для него еще не создан, поэтому войти в систему он не сможет. Занесем этого пользователя в соответствующий список в Samba:
[root@class305 ~]# smbpasswd -a smbuser
New SMB password:
Retype new SMB password:
Added user smbuser.
Здесь нам пришлось задать этому пользователю SMB-пароль. Это достаточно типичная операция при работе Samba и связана с различным механизмом использования паролей в Samba и в unix-системах.
Информация о новом пользователе появилась в файле /etc/samba/smbpasswd:
[root@class305 ~]# cat /etc/samba/smbpasswd
smbuser:502:CCF9155E3E7DB453AAD3B435B51404EE:3DBDE697D71690A769204BEB12283678:[U ]:LCT-4899A43C:
Теперь, если просмотреть список ресурсов на сервере от имени этого пользователя, то мы увидим его домашний каталог --- ресурс smbuser:
[user@host193 ~]$ smbclient -U smbuser -L host1
Password:
Domain=[CLASS305] OS=[Unix] Server=[Samba 3.0.30-ALT]
Sharename Type Comment
--------- ---- -------
tmp Disk Temporary file space
IPC$ IPC IPC Service (Samba server on class305 (v. 3.0.30-ALT))
smbuser Disk Home Directory for 'smbuser'
Domain=[CLASS305] OS=[Unix] Server=[Samba 3.0.30-ALT]
Server Comment
--------- -------
Workgroup Master
--------- -------
ALTDOMAIN
Доступные по протоколу SMB ресурсы можно примонтировать к дереву каталогов на локальной машине. Эта функциональность реализуется двумя утилитами: smbmount, работающей в стиле mount, и mount.cifs, работающей в стиле CIFS.
Протокол SMB можно использовать и для организации доступа к принтерам. По умолчанию все принтеры, зарегистрированные в системе CUPS, "раздаются" с помощью Samba по сети (если, разумеется, включена служба smb). Отметим, что как в CUPS, так и в Samba драйвер принтера должен находиться на клиентской, а не на серверной машине. Это позволяет без дополнительных настроек организовать доступ к принтеру, подключенному к машине с ОС Linux, --- в том числе и для Windows-клиентов. Исключение составляют так называемые win-принтеры, которые в ряде случаев непросто заставить работать с CUPS.
Отметим напоследок, что настраивать систему Samba возможно и без ручной правки конфигурационного файла smb.conf (хотя обычно это довольно удобный способ, особенно если обращать внимание на подробные комментарии в самом файле и не брезговать чтением страницы руководства smb.conf(5)). Можно воспользоваться графическим настройщиком SWAT --- при своей работе он полностью переписывает весь smb.conf, удаляя все комментарии (фактически, это специального вида редактор для данного файла).
Настройка с помощью KDE
Аналогичные операции по настройке службы Samba можно выполнить и с помощью Центра управления KDE, хотят этот способ и не является рекомендуемым. Покажем, как это сделать в случае свежеустановленной службы Samba.
Откроем Центр управления KDE и выберем в списке слева "Сеть и Интернет" --- "Samba". Для настройки необходимо ввести пароль суперпользователя:
Организуем доступ по протоколу SMB для пользователя user. Перейдем на вкладку "Пользователи":
Как мы видим, список пользователей Samba пока пустует. Перенесем из списка пользователей UNIX (POSIX) учетную запись user. Выберем соответствующую строку и щелкнем по кнопке "Добавить". Появится диалоговое окно, в котором нужно задать SMB-пароль:
Обратим внимание на "Датчик надежности пароля" --- он наглядно показывает, насколько стойкий пароль мы ввели. После задания пароля следует щелкнуть по кнопке "OK" в диалоговом окне, а затем по кнопке "Применить" в правом нижнем углу окна Центра управления KDE.
Вернемся на вкладку "Общие параметры":
Обратим внимание на выбранный режим безопасности --- "Владелец" (этот вариант соответствует строке security = user в файле smb.conf). На этой же вкладке можно включить анонимный ("гостевой") доступ --- это бывает полезно при создании публичных ресурсов.
Перейдем к вкладке "Общие ресурсы":
Здесь можно добавить тот или иной каталог в список разделяемых ресурсов, а также изменить настройки уже имеющихся ресурсов. Щелкнем по кнопке "Добавить общий ресурс...":
Скажем несколько слов об опциях в списке "Основных свойств". Флажок "Открытый" (соответствует опции public в smb.conf) определяет доступность ресурса неавторизовавшимся пользователям. Флажок "Разрешить просмотр" --- опции browseable (видимость ресурса при "просмотре сети"). Снимем флажок "Только чтение", чтобы разрешить пользователям использовать наш ресурс в режиме не только чтения, но и записи; заполним и остальные поля:
После этого щелкнем по кнопке "OK" --- наш ресурс сразу же появится в списке:
После сохранения настроек следует перезапустить службу Samba:
# service smb restart
Используем теперь для навигации по ресурсам сети веб-браузер Konqueror. Имеющийся в KDE модуль KIO для поддержки Samba позволяет использовать в качестве адреса строки вида smb://host1/:
Без авторизации (то есть как public) виден лишь ресурс tmp, у которого уставновлен признак browseable. Можно щелкнуть по соответствующей папке, чтобы попасть "внутрь" ресурса:
Чтобы получить доступ к домашнему каталогу пользователя smbuser, мы должны действовать от его имени. Зададим имя пользователя в адресной строке, запросив одновременно доступ к каталогу: smb://smbuser@10.30.5.1/smbuser. Появится диалог авторизации с предложением ввести пароль:
Теперь, если ввести правильный пароль, мы получим доступ к запрошенному каталогу:
Следует отметить, что при использования экспорта домашних директорий пользователей в дополнительной настройке Samba часто просто нет нужды: домашняя папка каждого пользователя доступна как ресурс с адресом вида smb://host/user_name при аутентификации с именем и паролем соответствующего пользователя.
Дополнительные возможности
Реквизиты пользователя Samba по умолчанию
Скажем несколько слов и о дополнительных возможностях при работе с Samba, предоставляемых средой KDE. Откроем в Центре управления KDE раздел "Сеть и Интернет" --- "Обзор локальной сети":
Здесь можно вписать свои параметры авторизации (регистрационное имя Samba и пароль Samba) в соответствующие поля:
Если теперь применить внесенные изменения, то при работе с ресурсами Samba посредством Konqueror не потребуется вводить эти данные каждый раз заново:
Обратим внимание, что форму записи адреса без указания имени пользователя (smb://10.30.5.1/) мы уже использовали, однако на этот раз, как и ожидалось, мы получили права пользователя smbuser "автоматически". Следует отметить, что такой стиль работы с Samba может понизить уровень безопасности системы, поэтому использовать описанную возможность следует с осторожностью.
Создание общих папкок пользователями
Еще один пункт в Центре управления KDE, которого мы коснемся в связи с настройками Samba, носит название "Совместное использование файлов" и находится в том же самом разделе "Сеть и Интернет". Он позволяет пользователям делать каталоги в своих домашних каталогах общими при помощи контекстного меню konqueror. Отметим, что для корректного функционирования эта возможность требует предварительной установки пакета kdenetwork-filesharing:
# apt-get install kdenetwork-filesharing
Перейдя в режим администратора с помощью соответствующей кнопки, выберем "Упрощенный режим" --- после этого пользователи нашего компьютера получат возможность раздавать папки из своих домашних каталогов, не обращаясь за помощью к системному администратору.
Осталось решить вопрос, кому же мы будем предоставлять такую возможность. Если щелкнуть по кнопке "Авторизованные пользователи", то появится следующее диалоговое окно:
Можно либо разрешить всем пользователям предоставлять общий доступ к своим файлам, либо только членам какой-то конкретной группы. Во втором случае следует выбрать группу и при необходимости добавить в неё пользователей.
После этого пользователи смогут делать папки общими при помощи контекстного меню папки в Konqueror ("Свойства" - "Сделать общим").