Операционная система должна обеспечивать пользователю возможность предоставлять доступ к файлам и каталогам своего компьютера, публиковать папки в локальной сети.
Стенд: SMB NFS FTP iSCSI Server (192.168.0.1) & SHARE Client (192.168.0.2)
Документ [[ЛКНВ.11100-01 90 03 Руководства администратора.pdf]], стр 1103-1115
Протокол smb
Используя консоль
Создаем папку, которая будет общей; назначаем ей права
mkdir /home/docstore; chmod 777 /home/docstore
Делаем бэкап конфигурационного файла самбы
mv /etc/samba/smb.conf /etc/samba/smb.conf.old
Папка без пароля
Прописываем в /etc/samba/smb.conf
следующие параметры
[global]
dos charset = CP866
unix charset = utf8
#имя рабочей группы
workgroup = WORKGROUP
#имя сервера
server string = Filestore
#группа пользователей
security = USER
map to guest = Bad User
#имя ресурса
[Public]
#путь к папке
path = /home/docstore
guest ok = Yes
browseable = yes
writable = yes
create mask = 0777
directory mask = 0777
Создаем служебный каталог:
mkdir -p /var/lib/samba/private
Перезапускаем сервис SMB:
systemctl restart smb.service nmb.service
Включаем автозапуск:
systemctl enable smb.service nmb.service
Добавление второй папки без пароля
Делаем так же как и в первом шаге, только добавляем раздел с описанием второго ресурса ниже первого.
В первом примере у нас Public и папка docstore. Во втором будет Share и files.
Создаем папку
mkdir /home/files;chmod 777 /home/files
Прописываем в /etc/samba/smb.conf
следующие параметры
[Share]
path = /home/files
read only = Yes
guest ok = Yes
browseable = yes
writable = yes
create mask = 0777
directory mask = 0777
Перезапускаем сервис SMB:
systemctl restart smb.service nmb.service
Папка с паролем
Создадим пользователя в системе, имя пользователя share, его пароль 1q@W3e, при создании сделаем каталог пользователя (ключ -m
) и зададим пароль (ключ -p
).
useradd -m share -p 1q@W3e
Назначим нового владельца, пользователя share, и несколько изменим разрешения:
mkdir /home/kadry;chmod 777 /home/kadry
chown -R share:users /home/kadry
chmod -R ugo+rwx /home/kadry
Примечание: Утилита smbpasswd находится в пакете samba-client
Добавляем пользователя в Samba (вводим пароль 1q@W3e):
smbpasswd -a share
Добавим в smb.conf
следующее:
[Kadry]
comment = Кадры
path = /home/kadry
read only = no
guest ok = no
browseable = yes
writable = yes
create mask = 0777
directory mask = 0777
force user = share
force group = users
Папка будет доступна пользователю share с паролем 1q@W3e.
Перезапускаем сервис SMB:
systemctl restart smb.service nmb.service
Используя графический интерфейс
systemctl enable --now smb
systemctl enable --now nmb
Создаем папку в удобной директории. Нажимаем по ней ПКМ - Опции публикации
Настраиваем по своему желанию и нажимаем Создать публикацию.
Протокол nfs
Сервер NFS
Настройка сервера NFS
Синтаксис /etc/exports
Все настройки NFS-сервера хранятся в файле /etc/exports
.
Файл /etc/exports
определяет, какие файловые системы экспортируются на удаленные узлы, и определяет параметры. Для этого файла действуют следующие синтаксические правила:
- пустые строки игнорируются;
- комментарии начинаются с символа решётки (#);
- для продолжения записи на новой строке можно использовать символ обратной косой черты ();
- каждая экспортируемая ФС должна находиться на отдельной строке;
- списки авторизованных узлов, размещаемые после экспортированной файловой системы, должны быть разделены пробелами;
- параметры для каждого из узлов должны быть помещены в скобки непосредственно после идентификатора узла, без пробелов, разделяющих узел и первую скобку;
- если название экспортируемого каталога содержит пробелы, его следует заключить в двойные кавычки.
Каждая запись экспортированной файловой системы имеет следующую структуру:
export host(options)
Где:
- export — путь к экспортируемому каталогу;
- host — узел или сеть, в которую передается экспорт;
- options — параметры, которые будут использоваться для узла.
Можно указать несколько узлов, а также конкретные параметры для каждого узла. Для этого следует перечислить их в одной строке в виде списка, разделённого пробелами, где за каждым именем узла следуют соответствующие параметры (в скобках), например:
/mysharedir 192.168.0.100/24(no_subtree_check,rw) 192.168.10.0/24(no_subtree_check,ro)
Некоторые опции:
rw/ro
— установка разрешения доступа к ресурсу (чтение запись/только чтение);no_subtree_check/subtree_check
— если экспортируется подкаталог файловой системы, но не вся файловая система, то с опциейsubtree_check
сервер, проверяет, находится ли запрошенный файл в экспортированном подкаталоге. Если экспортируется вся файловая система, запрет проверки подкаталогов (no_subtree_check
) может увеличить скорость передачи;sync/async
— синхронный/асинхронный режим доступа. Опцияsync
указывает, что сервер должен отвечать на запросы только после записи на диск изменений, выполненных этими запросами. Опцияasync
указывает серверу не ждать записи информации на диск, что повышает производительность, но понижает надежность;wdelay/no_wdelay
— установка задержки записи на диск (установка задержки/отключение задержки, этот параметр не действует при включенной опции async);hide/nohide
— не отображать/отображать нелокальные ресурсы (например, примонтированые с помощьюmount --bind
);all_squash/no_all_squash
— подмена запросов от ВСЕХ пользователей на анонимного uid/gid (либо на пользователя, заданного в параметреanonuid/anongid
) запрет подмены uid/gid;anonuid=UID
иanongid=GID
— (явная) установка UID/GID для анонимного пользователя (может быть полезно, если какой либо каталог экспортируется для конкретного пользователя, заведенного в системе).
Примечание: Единственный параметр, который следует обязательно указать — это
no_subtree_check
или ``subtree_check`.
Имя узла (узлов) может задаваться в следующей форме:
- один узел — FQDN-имя (которое сможет разрешить сервер), имя узла (которое сможет разрешить сервер) или IP-адрес;
- IP-сеть — используется запись вида a.b.c.d/z, где a.b.c.d — адрес сети, а z — префикс. Также допускается формат a.b.c.d/netmask, где a.b.c.d — сеть, а netmask — маска сети (например, 192.168.100.8/255.255.255.0);
- набор узлов — узлы определяются знаками подстановки (символ * или ?) или могут содержать списки классов символов в [квадратных скобках]. Знаки подстановки не должны использоваться в IP-адресах;
- сетевые группы — задаются в виде @group-name, где group-name — имя сетевой группы NIS;
- анонимный узел — задается одним символом * и будет соответствовать всем клиентам.
Для применения изменений, внесённых в файл /etc/exports
необходимо выполнить команду:
exportfs -ra
или перезапустить NFS-сервер:
systemctl restart nfs
Запуск NFS под systemd
Запустить NFS-сервер и включить его по умолчанию:
systemctl enable --now nfs.service
systemctl status nfs.service
Если все команды прошли успешно и не выдавали ошибок, то сервер можно считать работающим. Дополнительно можно запустить команду exportfs
, которая выведет текущие настройки на данный момент. В случае нормальной работы она должна вывести на экран записи из файла /etc/exports
:
exportfs
/home 192.168.0.0/24
/exports 192.168.0.0/24
Использование NFS
Подключение к NFS-серверу можно производить вручную, а можно настроить автоматическое подключение при загрузке.
Монтирование NFS-ресурса
Команда монтирования:
mount -t nfs -o <опции> <сервер>:/remote/export /local/directory
Где:
- <опции> — разделённый запятыми список опций;
- <сервер> — IP-адрес или имя NFS-сервера;
/remote/export
— каталог, экспортируемый с сервера (каталог, который будет примонтирован); /local/directory — локальный каталог (каталог, в который будет примонтирован каталог, экспортируемый с сервера).
Список доступных ресурсов можно проверить, выполнив команду:
showmount -e 192.168.0.199
Примечание: При запуске данной команды можно получить ошибку:
showmount -e 192.168.0.199
clnt_create: RPC: Unable to receive
Это может происходить потому что по умолчанию rpcbind
слушает только локальные запросы:
ss -tnlup | grep rpcbind
# udp UNCONN 0 0 127.0.0.1:111 0.0.0.0:* users:(("rpcbind",pid=4248,fd=6))
# udp UNCONN 0 0 [::1]:111 [::]:* users:(("rpcbind",pid=4248,fd=8))
# tcp LISTEN 0 4096 127.0.0.1:111 0.0.0.0:* users:(("rpcbind",pid=4248,fd=7))
# tcp LISTEN 0 4096 [::1]:111 [::]:* users:(("rpcbind",pid=4248,fd=9))
Разрешить rpcbind
прослушивать входящие соединения из сети:
control rpcbind server
systemctl restart rpcbind.service
ss -tnlup | grep rpcbind
# udp UNCONN 0 0 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=4130,fd=6))
# udp UNCONN 0 0 [::]:111 [::]:* users:(("rpcbind",pid=4130,fd=8))
# tcp LISTEN 0 4096 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=4130,fd=7))
# tcp LISTEN 0 4096 [::]:111 [::]:* users:(("rpcbind",pid=4130,fd=9))
Пример команды монтирования (каталог /mnt/nf должен существовать:
mount -t nfs -o nfsvers=4 192.168.0.199:/home /mnt/nfs
Для проверки успешности монтирования можно использовать команду:
mount | grep nfs
# ...
# 192.168.0.199:/home on /mnt/nfs type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.177,local_lock=none,addr=192.168.0.199)
Команда выдаст строку (строки) с информацией о примонтированном ресурсе (ресурсах).
Монтирование с записью в fstab
Для автоматического монтирования к NFS-серверу при загрузке необходимо добавить следующую строку в файл /etc/fstab
:
192.168.0.199:/home /mnt/nfs nfs intr,soft,nolock,_netdev,x-systemd.automount 0 0
где:
- intr — позволяет прервать процесс при необходимости;
- soft — предотвращает от зависания в случае недоступности удалённой машины.
Кроме того, стоит убедиться, что сервис netfs
запускается при старте системы.
Прежде чем изменять /etc/fstab
, попробуйте смонтировать вручную и убедитесь, что всё работает.
Автомонтирование
Осуществляется при помощи automount
, autofs
или subfs
.
autofs
Данный способ монтирования позволяет автоматически монтировать папку после обращения к ней в ФМ (к примеру, через закладки) или в терминале и автоматически отмонтировать при отсутствии активности. Для реализации данного способа необходимо:
- Установить пакет autofs (если он ещё не установлен):bash
apt-get install autofs ```
- Для настройки autofs в файл
/etc/auto.master
необходимо добавить строку:bash
/mnt/nfs /etc/auto.nfs -t 60 -browse ```
Здесь /mnt/nfs
— каталог, в котором будут подключаться сетевые файловые системы; /etc/auto.nfs
— файл конфигурации или скрипт (определяется правами на исполнение указанного файла); 60
— таймаут (в секундах) подключения при отсутствии обращения; browse
— создать пустой каталог для точки монтирования, чтобы предотвратить тайм-ауты, если к сетевому ресурсу невозможно подключиться.
- Создать каталог
/mnt/nfs
:bash
mkdir /mnt/nfs
4. Создать файл `/etc/auto.nfs`, в который добавить строку:
```bash
public1 -fstype=nfs,rw 192.168.0.199:/home/
```
где:
- `-rw,soft,intr,rsize=8192,wsize=8192` – параметры монтирования;
- `public1` – каталог, который будет создаваться в каталоге /mnt/nfs при монтировании;
- `192.168.0.199:/home/`– IP-адрес и общая папка сервера.
>**Примечание:** Подключаемый ресурс должен присутствовать в выводе команды:
```bash
showmount -e 192.168.0.199
autofs + avahi
Использование avahi. Установите пакет avahi-service-nfs
или вручную создайте на сервере файл /etc/avahi/services/nfs.service
, используется nfs4
:
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_nfs._tcp</type>
<port>2049</port>
</service>
</service-group>
и запустите на сервере nfs сервис avahi-daemon
. Проверьте с машин-клиентов, что сервер nfs виден с этих машин с помощью команды:
avahi-browse -tkrp _nfs._tcp
Установите на машины-клиенты autofs
. С настройками по умолчанию, ресурсы nfs будут монтироваться как /mnt/net/servername/netshare
.
Для домашней локальной сети, когда nfs раздается не с сервера, а с другой рабочей станции, которую могут выключить в любой момент, рекомендуется прописывать у клиентов в /etc/sysconfig/autofs timeout
поменьше (например, 5 сек):
OPTIONS="-t5"
systemd
Есть возможность использовать systemd, чтобы выполнять авто-монтирование конкретного ресурса при загрузке. Этот вариант имеет одно преимущество по сравнению с монтированием через fstab
: если NFS-сервер по какой-либо причине будет недоступен, то клиент всё равно загрузится без ошибок.
Создаём на клиенте файл /lib/systemd/system/nfs-shared.service
следующего содержания:
[Unit]
Description=Mount NFS share
Requires=network-online.target
After=network-online.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/mount 192.168.1.1:/home/data /mnt/shared -o fsc,hard
ExecStop=/bin/umount /mnt/shared
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
Не забываем создать каталог, в которую будет смонтирован NFS-ресурс:
mkdir -p /mnt/shared
После этого включаем сервис в автозагрузку и запускаем его:
systemctl enable --now nfs-shared
Протокол ftp
Настройка FTP
- Установить пакеты:
- vsftpd
- anonftp
- Сделать изменения в файле
/etc/xinetd.d/vsftpd
disable = no #включает сервис
- Проверить глобальные настройки
xinetd
в файле/etc/xinetd.conf
, обратить внимание - необходимо написать либо сеть, либо адреса, у которых будет доступ к серверу:
only_from = 192.168.0.0
- Перезапустить сервис
systemctl enable --now xinetd
- Проверить, что нужное приложение (в данном случае xinetd) слушает порт:
ss -tlpn | grep "LISTEN.*:21"
Настройка межсетевого экрана для FTP, правила iptables
:
$IPTABLES -A INPUT -p tcp --dport 21 -j ACCEPT
$IPTABLES -A INPUT --match state --state RELATED,ESTABLISHED -j ACCEPT
Облегчающий жизнь модуль ядра (разрешает RELATED): Прописывается в /etc/net/ifaces/default/fw/iptables/modules
modprobe ip_conntrack_ftp
Протокол iSCSI
https://www.opennet.ru/base/sys/iscsi_fedora.txt.html
Для тестов используем две машины: vm01, которая будет экспортировать раздел /dev/xvda5
, и vm02, на которой настроим инициатор.
Настройка iSCSI Target
Для начала устанавливаем пакет scsi-target-utils
и запускаем демон tgtd
:
apt-get install scsi-target-utils
systemctl enable --now service tgt
Теперь создаем наше целевое устройство. В качестве имени я выбрал share.server:disk1
tgtadm --lld iscsi --op new --mode target --tid 1 -T share.server:disk1
В моем случае я добавляю к целевому устройству новый раздел /dev/xvda5
:
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/xvda5
Теперь разрешим доступ хосту vm02 с IP-адресом 192.168.0.109:
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.0.109
Проверяем:
tgtadm --lld iscsi --op show --mode target
Под конец не забудьте прорубить "дырку" в брандмауэре для порта 3260/tcp, который используется по умолчанию.
Настройка iSCSI Initiator
Устанавливаем пакет iscsi-initiator-utils
и запускаем демон iscsi
:
apt-get install iscsi-initiator-utils
systemctl enable --now iscsi
systemctl status iscsi
При запуске мы получаем совершенно справедливое сообщение, что не сконфигурирована ни одна из целей. Запускаем процесс обзора для поиска целей на хосте vm01 c IP-адресом 192.168.0.100:
iscsiadm -m discovery -t sendtargets -p 192.168.0.100:3260
В итоге будут созданы две поддиректории с информацией о цели и хосте:
ls /var/lib/iscsi/nodes/
# share.server:disk1
ls /var/lib/iscsi/send_targets/
# 192.168.0.100,3260
Просмотреть информацию можно командой:
iscsiadm -m node -T share.server:disk1 -p 192.168.0.100:3260
# node.name = share.server:disk1
# node.tpgt = 1
# ...
Теперь, используя содержимое /var/lib/iscsi/nodes/
и /var/lib/iscsi/send_targets/
, демон iscsi
при каждом перезапуске будет подключать наши ранее обнаруженные цели.
Также процессом подключения/отключения можно управлять при помощи утилиты iscsiadm
:
iscsiadm -m node -T share.server:disk1 -p 192.168.0.100:3260 -l
# Login session [iface: default, target: share.server:disk1, portal: 192.168.0.100,3260]
Теперь команда fdisk
покажет наш раздел /dev/sda
, экспортированный с vm01:
fdisk -l
# Disk /dev/xvda: 17.1 GB, 17179869184 bytes
# 255 heads, 63 sectors/track, 2088 cylinders
# Units = cylinders of 16065 * 512 = 8225280 bytes
# ...
# Disk /dev/sda: 1011 MB, 1011677184 bytes
# 32 heads, 61 sectors/track, 1012 cylinders
# Units = cylinders of 1952 * 512 = 999424 bytes
# Disk /dev/sda doesn't contain a valid partition table
После команды
iscsiadm -m node -T share.server:disk1 -p 192.168.0.100:3260 -u
# Logout session [sid: 2, target: share.server:disk1, portal: 192.168.0.100,3260]
в выводе fdisk
мы увидим только /dev/xvda
. Однако, после рестарта демона iscsi
, цель снова появиться в списке устройств. Для удаления всей информации о цели воспользуйтесь командой:
iscsiadm -m node -T share.server:disk1 -p 192.168.0.100:3260 -o delete
ls /var/lib/iscsi/nodes/
Если у вас несколько целей, то вы не можете заранее знать, под каким именем после следующей перезагрузки/рестарта сервиса будет доступна конкретная цель. Для того, чтобы каждая цель всегда была доступна под одним и тем же именем устройства, вы можете написать соответствующее правило udev или воспользоваться монтированием по метке и UUID файловой системы. При монтировании файловых систем не забывайте использовать опцию netdev
.