Linux: совместная сетевая работа вместе с компьютерами на Windows, быстрая настройка сервера Samba Печать
Добавил(а) microsin   

Описана настройка сетевого доступа с машин Windows на общие каталоги (шары) компьютера под Red Hat Linux 4 (сервера Samba).

Определимся с терминологией. Samba - это специальный сервер под Linux, который предоставляет те же сервисы, что и служба общих сетевых папок Windows (служба эта в Windows носит имя Server, системное имя lanmanserver). Тут для новичка может быть легкая путаница - понятие Server здесь используется в несколько другом контексте по сравнению с понятием разновидностей операционок Windows (например - Widnows 2003 Server, Windows 2000 Server, Windows 2000 Professional, Windows XP Home и т. д.). Т. е. сервером в контексте Samba (SMB) может быть ЛЮБАЯ машина под Windows, которая предоставила свои ресурсы (папки и файлы) в общее пользование. Иногда под Samba вообще подразумевают протокол сетевого обмена шар Windows, и иногда для этого понятия используют аббревиатуру SMB. Клиент Samba - любая программа, работающая на Windows, и которая пытается получить доступ к общим сетевым ресурсам сервера Samba. Клиентом Samba может выступать, например, проводник, если в строке адреса набрать \\10.50.c.d\public и нажать Enter. В этом примере 10.50.c.d - IP адрес сервера Samba, а public - расшаренный каталог на сервере Samba.

Для того, чтобы клиенты Windows могли попасть через сеть на шары Linux, нужно выполнение следующих условий (то, что компьютеры должны друг друга видеть по протоколу IP, само собой разумеется):
1. На Linux должен быть настроен и запущен сервис (демон) Samba.
2. В базе данных Samba должен быть логин и пароль пользователя Samba, который хочет получить доступ.
3. У подключившегося пользователя должны быть достаточные права на файловую систему Linux, к которой подключены шары Samba (для успешного проведения операций с этими шарами на чтение и запись).

Процесс по шагам (все операции происходят на сервере Samba под управлением Red Hat Linux 4):

1. Добавляем пользователя, который сможет подключаться к серверу (логин fedor, пароль 123). Лучше всего, если логин и пароль будет совпадать с логином и паролем пользователя, который в настоящий момент работает на клиенте Samba. В этом случае при подключении клиента Samba к сетевым шарам Samba логин и пароль вводить не потребуется.
# adduser fedor

После этой команды в файле /etc/passwd появится запись пользователя fedor, и появится папка /home/fedor. Если нам не нужно, чтобы пользователь fedor получил доступ к шеллу Linux, то нужно исправить строку в файле /etc/passwd у этого пользователя - поменять там имя интерпретатора шелла на /sbin/nologin:
fedor:x:501:501::/home/fedor:/sbin/nologin

2. Добавим пользователя fedor в базу данных пользователей Samba (ввод администратора показан жирным шрифтом. Введенные символы пароля на экране отображаться не будут):
# smbpasswd -a -U fedor
New SMB password:123
Retype new SMB password:123
Added user fedor.

После этого в файле /etc/samba/smbpasswd появится строчка наподобие:
fedor:501:CCF9155E3E7DB453AAD3B435B51404EE:3DBDE697D71690A769204BEB12283678:[U          ]:LCT-482D6E68:

Измените разрешения файла паролей Samba, чтобы разрешение на чтение и запись имел только root:
# chmod 600 /etc/samba/smbpasswd

3. Редактируем файл /etc/samba/smb.conf. Предположим, что мы хотим, чтобы сервер Samba имел имя RHL (это необязательно), входил в рабочую группу MYGROUP (это тоже необязательно), имел дескрипшен "Samba Server" (необязательно), доступ к серверу разрешен с IP адресов 10.50.x.x и 192.168.1.x (если строку host allow закомментировать, то доступ будет разрешен со всех IP-адресов), настроены шары homes, printers, tmp, public (шары tmp и public настроены на полный доступ).

Добавим или изменим следующие параметры (строки, начинающиеся с # или ; являются комментариями, жирным выделено именно то, что надо изменить или раскомментировать):
[global]
   netbios name = RHL
   workgroup = MYGROUP
   server string = Samba Server
   hosts allow = 10.50. 192.168.1.
   printcap name = /etc/printcap
   load printers = yes
   cups options = raw
   log file = /var/log/samba/%m.log
   max log size = 50
   security = user
   smb passwd file = /etc/samba/smbpasswd
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
   dns proxy = no
#============================ Share Definitions ==============================
   idmap uid = 16777216-33554431
   idmap gid = 16777216-33554431
   template shell = /bin/false
   winbind use default domain = no
[homes]
   comment = Home Directories
   browseable = no
   writable = yes
[printers]
   comment = All Printers
   path = /var/spool/samba
   browseable = no
   guest ok = no
   writable = no
   printable = yes
[tmp]
   comment = Temporary file space
   path = /tmp
   read only = no
   public = yes
[public]
   comment = Public Stuff
   path = /home/public
   browseable = yes
   writable = yes
   guest ok = yes
   create mask = 0777

Все вроде понятно по содержимому файла. Здесь настроено, что будет использоваться защищенный тип авторизации по базе данных Samba (security = user, smb passwd file = /etc/samba/smbpasswd), лог будет вестись для каждого клиента Samba отдельно (log file = /var/log/samba/%m.log, где переменная %m имеет значения либо IP, либо NetBIOS-имени компьютера).

Протестируем нашу конфигурацию:
# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[tmp]"
Processing section "[public]"
Unknown parameter encountered: "force create mask"
Ignoring unknown parameter "force create mask"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

# Global parameters
[global]
        workgroup = MYGROUP
        netbios name = RHL
        server string = Samba Server
        log file = /var/log/samba/%m.log
        max log size = 50
        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
        printcap name = /etc/printcap
        dns proxy = No
        idmap uid = 16777216-33554431
        idmap gid = 16777216-33554431
        hosts allow = 10.50. 192.168.1.
        cups options = raw

[homes]
        comment = Home Directories
        read only = No
        browseable = No

[printers]
        comment = All Printers
        path = /var/spool/samba
        printable = Yes
        browseable = No

[tmp]
        comment = Temporary file space
        path = /tmp
        read only = No
        guest ok = Yes

[public]
        comment = Public Stuff
        path = /home/public
        read only = No
        create mask = 0777
        guest ok = Yes

4. Запускаем сервер Samba:
# service smb start
Запускаются сервисы SMB:                                   [  ОК  ]
Запускаются сервисы NMB:                                   [  ОК  ]

Если надо перезапустить Samba:
# service smb restart
Останавливаются службы SMB:                                [  ОК  ]
Останавливаются службы NMB:                                [  ОК  ]
Запускаются сервисы SMB:                                   [  ОК  ]
Запускаются сервисы NMB:                                   [  ОК  ]

Все! После этого можно заходить на шары сервера с клиента Samba, IP адрес которого начинается на 10.50. или 192.168.1. Если имя пользователя/пароль, который сейчас работает на клиенте Samba, равен fedor/123 (доменный это пользователь, или локальный - не имеет значения), то вводить логин ипароль не потребуется, иначе на запрос ввода пароля нужно вводить логин fedor и пароль 123.

Файлы Samba (которые могут понадобиться):
/etc/samba/smb.conf      конфигурационный файл сервера Samba smbd
/etc/samba/smbpasswd     база данных пользователей, которые могут получить сетевой доступ к шарам сервера Samba. Вручную этот файл корректировать не нужно, лучше только просматривать.
/var/log/samba/          папка, куда сыплются логи сервера Samba
  
Команды (которые понадобятся):
testparm                 проверка конфига /etc/samba/smb.conf на корректность
adduser                  добавление пользователя Linux
smbpasswd -a -U username добавление пользователя username в базу пользователей Samba (/etc/samba/smbpasswd)
service smb status       просмотр состояния сервера Samba - работает или нет
service smb start        запуск сервера Samba
service smb restart      перезапуск сервера Samba - это надо делать после внесения изменений в /etc/samba/smb.conf
service smb stop         останов сервера Samba
  
Необязательные команды:
mksmbpasswd.sh           скрипт, который может сгенерировать файл /etc/samba/smbpasswd из файла /etc/passwd (cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd)
smbstatus                просмотреть активные подключения к Samba

[Дополнительные настройки]

Для синхронизации паролей пользователей Samba с их паролями в системе можно применить PAM-модуль pam_smbpass, используя команду passwd. Когда пользователь вызывает команду passwd, одновременно изменяется и пароль, с которым он входит в систему Red Hat Enterprise Linux, и пароль, с которым он подключается к ресурсу Samba.

Чтобы включить эту возможность, добавьте в файл /etc/pam.d/system-auth ниже вызова pam_cracklib.so следующую строку:
password required /lib/security/pam_smbpass.so nullok use_authtok try_first_pass
 
Чтобы служба smb запускалась при загрузке, выполните команду:
/sbin/chkconfig --level 345 smb on

Определить службы, запускающиеся при загрузке системы, вы также можете с помощью chkconfig, ntsysv или средства Настройка служб (Services Configuration Tool). За подробностями обратитесь к главе 20 Управление доступа к службам.

[Ссылки]

1. Настройка сервера Samba site:rhd.ru.
2. Замена файл-сервера Windows NT/2000 на Linux/Samba site:opennet.ru.
3. Что нужно сделать, чтобы в XP в рабочей группе пользователи могли заходить на расшаренные ресурсы.
4. Windows 10: как настроить сетевой доступ к файлам.