Права в linux (chown, chmod, suid, guid, sticky bit, acl, umask)

Последствия копирования файлов и папок.

При операции копировании папок или файлов из папки в папку, или из раздела в раздел, права доступа к ним меняются. Права доступа к файловой системе NTFS при копировании файлов/папок изменяются так:

  • При копировании файла/папки в одном NTFS разделе, копия папки/файла наследует права доступа папки назначения.
  • При копировании файла/папки в другой NTFS раздел, её копия наследует права доступа папки назначения.
  • При копировании файла/папки не в NTFS раздел, например, в раздел FAT, их копия теряет права доступа к файловой системе NTFS потому, что не NTFS разделы не поддерживают эти права доступа.

Адаптация файловой системы после миграции

# pvresize /dev/md1
# pvs
 PV         VG   Fmt  Attr PSize PFree
 /dev/md1   vg0  lvm2 a--  1.82t 1.36t
# vgs
 VG   #PV #LV #SN Attr   VSize VFree
 vg0    1   3   0 wz--n- 1.82t 1.36t
# lvextend /dev/vg0/var /dev/md1
 Extending logical volume var to 1.76 TiB
 Logical volume var successfully resized
# lvs
 LV     VG   Attr     LSize  Pool Origin Data%  Move Log Copy%  Convert
 root   vg0  -wi-ao-- 47.68g
 swap_1 vg0  -wi-ao-- 11.44g
 var    vg0  -wi-ao--  1.76t

# xfs_growfs /var
meta-data=/dev/mapper/vg0-var    isize=256    agcount=4, agsize=26578176 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=106312704, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal               bsize=4096   blocks=51910, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 106312704 to 472291328

# df -h
Filesystem            Size        Used      Avail    Use%     Mounted on
rootfs                 47G        660M        44G      2%     /
udev                   10M           0        10M      0%     /dev
tmpfs                 1.6G        280K       1.6G      1%     /run
/dev/mapper/vg0-root   47G        660M        44G      2%     /
tmpfs                 5.0M           0       5.0M      0%     /run/lock
tmpfs                 3.2G           0       3.2G      0%     /run/shm
/dev/md0              962M         36M       877M      4%     /boot
/dev/mapper/vg0-var   1.8T        199M       1.8T      1%     /var

Запуск нового сервера

# tgtadm --lld iscsi --mode target --op delete --tid 1
# tgtadm --lld iscsi --mode target --op delete --tid 2

# pvscan
# vgreduce vg0 --removemissing --force
 Couldn't find device with uuid 1nLg01-fAuF-VW6B-xSKu-Crn3-RDJ6-cJgIax.
 Unable to determine mirror sync status of vg0/swap_1.
 Unable to determine mirror sync status of vg0/root.
 Unable to determine mirror sync status of vg0/var.
 Wrote out consistent volume group vg0
# lvs
 LV         VG    Attr         LSize   Pool Origin Data%  Move Log Copy%  Convert
 root       vg0   -wi-----      47.68g
 swap_1     vg0   -wi-----      11.44g
 var        vg0   -wi-----      405.55g

# vgchange -ay
 3 logical volume(s) in volume group "vg0" now active
# fsck /dev/mapper/vg0-root
# infiltrate-root /dev/mapper/vg0-root
Chroot:/# mount -a
Chroot:/# nano /etc/mdadm/mdadm.conf
Chroot:/# mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Chroot:/# cat /etc/mdadm/mdadm.conf
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST 

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays
ARRAY /dev/md/0 metadata=1.2 UUID=2521ca82:2a52a408:565fab6c:43ba944e name=cs940:0
ARRAY /dev/md/1 metadata=1.2 UUID=6240c2db:b4854bd7:4c4e1510:d37e5010 name=cs940:1
Chroot:/# update-initramfs -u
Chroot:/# grub-install /dev/sda --recheck
Installation finished. No error reported.
Chroot:/# grub-install /dev/sdb --recheck
Installation finished. No error reported.
Chroot:/# update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-4-amd64
Found initrd image: /boot/initrd.img-3.2.0-4-amd64
done
Chroot:/# rm /etc/udev/rules.d/70-persistent-net.rules
Chroot:/# umount -a
Chroot:/# exit
# reboot

Не загружайте старый и новый серверы в рабочую ОС одновременно: они будут загружены с одним и тем же IP, что может привести к потере доступа и другим проблемам.

Быстрый перенос и копирование файлов с сервера на сервер

Я упоминал, что обычно люди переносят сайты используя свою рабочую локальную машину  в качестве промежуточной. Пользование способами описанными выше только это и позволяет.  И с этим всё более-менее, когда у вас небольшой объем и количество файлов.   Но очевидно же, что гораздо быстрее, проще и удобнее переносить файлы сразу с одного сервера на другой, напрямую.  И чем больше объем этих файлов — тем сложнее будет перетаскивать их через свой локальный компьютер.  Представьте, бывают проекты, когда нужно перенести терабайты данных. Там одно только беспрерывное копирование файлов с сервера на сервер занимает несколько суток. Что уж говорить о том, чтобы упаковать это в архив, скачать на свой комп а потом отправить на сервер. Это физически вряд ли удастся — не будет хватать ни диска, а даже если вдруг он есть — можно месяцами сидеть копировать, бороться с постоянными разрывами связи и перезапуском копирования. А они наверняка будут.

Поэтому, я практически никогда не использую свою машину в качестве промежуточной при переносе файлов между серверами. Только напрямую с одного сервака на другой.  Даже если файлов немного — до 1 гб — это занимает секунды времени.  У меня на рабочем компе свободного диска гигов 5, зачем мне это всё тащить к себе.

Так вот — рекомендую и вам пользоваться такими же способами от истинных ниндзя А их тоже не один.

Упаковка (архивация) файлов сайта на сервере и копирование с помощью SCP

Если сайт небольшой, то его можно упаковать в архив и отправить на другой сервер с помощью утилиты scp, такими командами:

tar zcf  ./site.tar.gz  #архивация. 

Её, разумеется, часто можно выполнить и через панель управления. Затем копируем (отправляем) с исходного сервера на целевой:

scp site.tar.gz  root@1.1.1.1:/root/

Здесь после указания имени пользователя и IP через двоеточие указываем путь, куда мы хотим положить на целевом сервере этот файл.

Будет  запрошен пароль от целевого сервера и файл улетит туда.

Затем его можно там распаковать:

tar zxf ./site.tar.gz

и дальше уже положить файлы куда вам надо на новом сервере.

Копировать можно вводя команды и на новом сервере, следующим образом:

scp root@2.2.2.2:/root/site.tar.gz  /var/www/

В таком случае вы не отправляете файл, а как бы забираете со старого сервера, «вытягиваете» его оттуда.  Это нужно чётко понимать, ибо дальше будут способы основанные на этом же принципе, синтаксис примерно одинаковый, отличия только в том откуда и куда вы льете файл. То есть сначала указываем удаленный сервер, откуда копировать, затем куда — путь к папке на текущем сервере.  И этот порядок справедлив для любых команд подобного типа.

Копирование большого количества файлов и папок  с одного сервера на другой без архивации

Когда файлов немного и объем небольшой, нет смысла заморачиваться с упаковкой файлов. Можно скопировать всё и так, всю папку целиком со вложенной структурой. Для этого нужно использовать опцию -r ( от recursive). Можно использовать её вмести с опцией -v ( от verbose) которая позволит наблюдать подробно ход процесса копирования — какие файлы передаются по сети, видеть прогресс.

scp -rv /var/www/site.ru root@1.1.1.1:/var/www/

В итоге у вас на новом сервере будет создана папка /var/www/site.ru и туда перенесутся все файлы с текущего.

Можно исполнить это и с нового сервера, опять же «забрать» файлы со старого, нетрудно догадаться:

scp -rv root@2.2.2.2:/var/www/site.ru  /var/www

Результат будет точно таким же.

Однако, такой способ имеет некоторые недостатки.  Во-первых, при таком копировании могут не сохраниться или сбиться права доступа к файлам и папкам. Вернее даже не права доступа, а владельцы. И их потом нужно будет выставлять, менять на нужные командой chown.

Во-вторых, куда большим недостатком является то, что утилита scp будет перезаписывать все файлы, которые у вас уже есть на сервере. А часто бывает так, что какие-то файлы у нас на сервере уже лежат, и нам нужно обновить сайт. Такая задача часто возникает к примеру у разработчиков — они пишут сайт на одной машине, а потом «деплоят» — заливают новую версию поверх старой. Так вот утилита scp в таком случае работает неэффективно, ибо она пересылает и перезаписывает все файлы подряд.  А если файлов много и передача занимает часы? Обрывается связь, и нужно перезапускать этот процесс, ну и так далее.

А еще  даже при переносе с одного сервера на другой случается,  что связь рвется, и нужно опять же процесс перезапускать.

Так вот, есть ещё более удобная штука, которая решает и эти заморочки.  Это синхронизация.

Подготовка старого сервера и копирование данных

# apt-get install open-iscsi
# nano /etc/iscsi/iscsid.conf
node.startup = automatic
node.session.auth.username = MY-ISCSI-USER
node.session.auth.password = MY-ISCSI-PASSWORD
discovery.sendtargets.auth.username = MY-ISCSI-USER
discovery.sendtargets.auth.password = MY-ISCSI-PASSWORD
# apt-get install screen
# screen
# iscsiadm --mode discovery --type sendtargets --portal 10.0.0.2
10.0.0.2:3260,1 iqn.2001-04.com.cs940-tgt0
10.0.0.2:3260,1 iqn.2001-04.com.cs940-tgt1
# iscsiadm --mode node --login
Logging in to  (multiple)
Logging in to  (multiple)
Login to  successful.
Login to  successful.
# cat /sys/block/sdc/device/vendor
IET
 
# umount /boot
# cat /sys/block/sdc/size
1999744
# cat /sys/block/md0/size
1999744
# dd if=/dev/md0 of=/dev/sdc bs=1M
976+1 records in
976+1 records out
1023868928 bytes (1.0 GB) copied, 19.6404 s, 52.1 MB/s

Внимание!

# vgextend vg0 /dev/sdd
# pvs
 PV             VG   Fmt      Attr     PSize       PFree
 /dev/md1       vg0  lvm2     a--      464.68g    0
 /dev/sdd       vg0  lvm2     a--      1.82t      1.82t
# lvs
 LV         VG     Attr          LSize       Pool Origin Data%  Move Log Copy%  Convert
 root       vg0   -wi-ao--       47.68g
 swap_1     vg0   -wi-ao--       11.44g
 var        vg0   -wi-ao--       405.55g
# lvconvert -m1 vg0/root --corelog /dev/sdd
 vg0/root: Converted: 0.0%
 vg0/root: Converted: 1.4%
 …
 vg0/root: Converted: 100.0% 
# lvs
 LV         VG    Attr          LSize    Pool Origin Data%  Move Log     Copy%   Convert
 root       vg0   mwi-aom-      47.68g                                  100.00
 swap_1     vg0   mwi-aom-      11.44g                                  100.00
 var        vg0   mwi-aom-      405.55g                                 100.00
# iscsiadm --mode session -u
# vgreduce vg0 --removemissing --force
# lvs
 LV         VG   Attr         LSize   Pool Origin Data%  Move Log Copy%  Convert
 root       vg0  -wi-ao--     47.68g
 swap_1     vg0  -wi-ao--     11.44g
 var        vg0  -wi-ao--     405.55g
# poweroff

Готовим новый сервер

# hostname cs940
# fdisk /dev/sda
Command (m for help): p
...
Device     Boot     Start         End          Blocks      Id  System
/dev/sda1    *       2048         2099199      1048576     fd  Linux raid autodetect
/dev/sda2         2099200      1953525167    975712984     fd  Linux raid autodetect
Command (m for help): w
# sfdisk -d /dev/sda | sfdisk /dev/sdb -f
# mdadm --create /dev/md0 --level=1  --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
# mdadm --create /dev/md1 --level=10 --raid-devices=4 /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2
# mdadm --examine --scan
 ARRAY /dev/md/0 metadata=1.2 UUID=e9b2b8e0:205c12f0:2124cd91:35a3b4c8 name=cs940:0
 ARRAY /dev/md/1 metadata=1.2 UUID=4be6fb41:ab4ce516:0ba4ca4d:e30ad60b name=cs940:1
# aptitude update
# aptitude install tgt
# tgtd
librdmacm: couldn't read ABI version.
librdmacm: assuming: 4
CMA: unable to get RDMA device list
(null): iser_ib_init(3263) Failed to initialize RDMA; load kernel modules?
(null): fcoe_init(214) (null)
(null): fcoe_create_interface(171) no interface specified.
# tgt-setup-lun -n tgt0 -d /dev/md0 10.0.0.1
# tgt-setup-lun -n tgt1 -d /dev/md1 10.0.0.1
# tgt-admin -s

Управление ACL (setfacl, getfacl) в Linux

Изменение и просмотр настроек ACL с помощью setfacl и getfacl

setfaclgetfaclls -lgetfaclls -ldgetfacl

getfacl setfacl -m g:sales:rx /dir-mg:sales:rxrxg

setfacl -m u:linda:rwx /datasetfacl -R

Пример управления расширенными правами с использованием ACL

  1. Откройте терминал.
  2. Выполните setfacl -m g:account:rx /data/sales и setfacl -m g:sales:rx /data/account.
  3. Выполните getfacl, чтобы убедиться, что права доступа были установлены так, как вы хотели.
  4. Выполните setfacl -m d:g:account:rwx,g:sales:rx /data/sales, чтобы установить ACL по умолчанию для каталога sales.
  5. Добавьте ACL по умолчанию для каталога /data/account, используя setfacl -m d:g:sales:rwx,g:account:rx /data/account.
  6. Убедитесь, что настройки ACL действуют, добавив новый файл в /data/sales. Выполните touch /data/sales/newfile и выполните getfacl /data/sales/newfile для проверки текущих разрешений.

шаг 0. установка служба хранилища службы миграции и проверка портов брандмауэра

Перед началом работы установите службу миграции хранилища и проверьте, чтобы все необходимые порты брандмауэра были открыты.

  1. проверьте и установите последнюю версию центра администрирования Windows на компьютере или сервере управления, если вы этого еще не сделали. также необходима последняя версия расширения службы служба хранилища Migration Service, которая автоматически устанавливается Windows центре администрирования, если в расширениях Параметры включено автоматическое обновление расширений > . При миграции исходных компьютеров, присоединенных к одному домену, требуется установить и запустить службу миграции хранилища на сервере, присоединенном к тому же домену или лесу, что и исходные компьютеры.

  2. в Windows центре администрирования подключитесь к серверу orchestrator с сервером Windows server 2019. это сервер, который вы устанавливаете служба хранилища службу миграции на и используете для управления миграцией. если выполняется миграция только одного сервера, можно использовать целевой сервер, если он работает Windows server 2019. Мы рекомендуем использовать отдельный сервер оркестрации для миграции нескольких серверов.

  3. перейдите в диспетчер сервера (в центре администрирования Windows) > служба хранилища службы миграции и выберите установить , чтобы установить службу служба хранилища migration service и ее обязательные компоненты (см. рис. 1).
    рис. 1. установка службы миграции служба хранилища

  4. Установите прокси-сервер службы миграции хранилища на все целевые серверы с Windows Server 2019. Это удвоит скорость передачи данных. для этого подключитесь к целевому серверу в Windows центре администрирования, а затем перейдите в диспетчер сервера (в центре администрирования Windows) > роли и компоненты, > компоненты, выберите служба хранилища учетная запись-посредник службы миграции, а затем нажмите кнопку установить.

  5. если планируется переход на Windows кластеры фаилвер или из него, установите средства отказоустойчивой кластеризации на сервере orchestrator. это происходит автоматически в последней версии центра администрирования Windows при выборе варианта миграция из отказоустойчивых кластеров в задании Параметры параметр инвентаризации. для установки вне этапа инвентаризации службы миграции служба хранилища подключитесь к серверу orchestrator в центре администрирования Windows, а затем перейдите в диспетчер сервера (в Windows центре администрирования) > роли и компоненты, > компоненты , > средства удаленного администрирования сервера, > средства администрирования компонентов, выберите средства отказоустойчивой кластеризации и нажмите кнопку установить.

    Примечание

    если выполняется миграция из массива NetApp набора ос, необходимо вручную установить последнюю версию NetApp PowerShell набор средств на orchestrator. Этот набор средств доступен для всех лицензированных клиентов NetApp с активным соглашением о поддержке NetApp из mysupport.NetApp.com.

  6. на всех исходных серверах и на всех целевых серверах, на которых выполняется Windows Server 2016 или Windows Server 2012 R2, в Windows центре администрирования подключитесь к каждому серверу, перейдите в диспетчер сервера (в Windows центре администрирования), > правила брандмауэра для > входящих подключений, а затем убедитесь, что включены следующие правила.

    • Общий доступ к файлам и принтерам (входящий трафик SMB)
    • Служба NetLogon (NP-In)
    • Инструментарий управления Windows (DCOM-In)
    • Инструментарий управления Windows (WMI-In)

    Если вы используете брандмауэры сторонних производителей, диапазоны входящих портов для открытия — это TCP/445 (SMB), TCP/135 (сопоставитель конечной точки RPC/DCOM) и TCP 1025-65535 (временные порты RPC/DCOM). Порты службы миграции хранилища — TCP/28940 (Orchestrator) и TCP/28941 (прокси-сервер).

  7. Если вы используете сервер Orchestrator для управления миграцией и хотите скачать события или журнал передаваемых данных, убедитесь, что на этом сервере включено правило брандмауэра для общего доступа к файлам и принтерам (SMB-in).

Операции, выполняемые после миграции

После миграции сервера или кластера оцените среду для выполнения возможных операций, выполняемых после миграции.

  • Создайте план для сервера исходного кода, списанного сейчас. служба служба хранилища Migration Service использует процесс прямую миграцию, чтобы сервер назначения мог считать удостоверением исходного сервера, изменяя имена и ip-адреса источника, чтобы пользователи и приложения больше не могли получить к ним доступ. Однако он не отключает или иным образом изменяет содержимое исходного сервера. Необходимо создать план для списания исходного сервера. Рекомендуется покинуть источник в сети в течение двух недель в случае отсутствия используемых данных, чтобы файлы можно было легко получить без необходимости восстановления в автономном режиме. По истечении этого периода мы рекомендуем отключить сервер в течение еще четырех недель, чтобы он по-прежнему был доступен для получения данных, но больше не потребляет операционную или ресурсы питания. По истечении этого периода выполните одну окончательную полную архивацию сервера, а затем оцените переориентация, если это физический сервер, или удалите его, если это виртуальная машина.
  • Повторно выдавать сертификаты на новом целевом сервере. В то время, когда целевой сервер находился в режиме «в сети», но еще не вырезался, сертификаты могут быть выданы с помощью автоматической регистрации или других процессов. переименование сервера Windows не приводит к автоматическому изменению или повторному выдаче существующих сертификатов, поэтому существующие сертификаты могут содержать имя сервера до его прямую миграцию. Следует проанализировать существующие сертификаты на этом сервере и при необходимости повторно выдать новые.

Запуск переноса файлов в фоновом режиме

А, еще кое что. За перенос огромного количества файлов, тех самых терабайт. Или даже десятков гигабайт. Такие процессы лучше запускать в фоновом режиме, а не прямо в той консоли, в которой вы подключились к серверу.

Для этого можно освоить и пользовать утилиту screen. Которая позволяет вешать консоли в бэкграунде. То есть в виде фонового процесса. Это помогает тем, что связь с вашей локальной машины к серверу может быть нестабильной,  сессия держаться недолго, прерываться. Тогда даже десяток гигабайт у вас в процессе копирования может прерваться, что уж говорить о больших объемах. Если же вы запустили процесс внутри screen, тогда даже если вы отвалитесь от сервера, ваше копирование будет продолжаться на сервере и вы всегда сможете заново подключиться к серверу, вернуться в screen и продолжить за ним наблюдать, или делать вообще что угодно.

ставится точно так же, если отсутствует.

yum install screen  #для дебиан и убунты сообразите сами

Затем её запускаем

screen

И всё, у вас откроется как-бы терминал в терминале.  Можете там делать всё, о чем мы говорили ранее, и вообще что угодно любое другое.

Теперь, если ваш терминал на локальной машине отвалится от сервера, вы всегда можете подключиться заново, набрать

screen -r

И попадете туда, где вы запустили ваш процесс.

Можно и принудительно отключиться от screen, оставив процесс выполняться в фоне, а самому что-то продолжить дальше делать в основном терминале. Для этого надо нажать комбинацию клавиш ctrl+a, и затем D.   А вернуться потом обратно screen -r.

Еще есть куча вариантов и способов для этой тривиальной задачи, но в 95% случаев этого достаточно.

Кстати, даже если вы работаете с шаредами — это всё справедливо, если там есть SSH, с учётом, что вы будете указывать не root в качестве пользователя, а вашего пользователя.  На большинстве из шаредов SSH есть либо по-умолчанию, либо включается из панели хостера, или как-то по запросу.

Функция действующих прав доступа.

Функция действующих прав доступа определяет права на объект для пользователя или группы, вычисляя предоставленные им права. Вычисление зависит от прав членства в группе и любого из наследуемых полномочий от родительского объекта. Учитываются все домены и локальные группы, членом которых является пользователь или группа пользователей.

Функция действующих прав доступа устанавливает пользователю только приблизительные права. Фактические права пользователя могут отличаться, так как они могут быть предоставлены или в них может быть отказано при входе пользователя в систему. Сведения о входе в систему не могут определяться функцией действующих прав доступа, так как пользователь может не войти в систему. Таким образом, действующие права отражают только права для указанного пользователя или группы, а не права, определённые для входа в систему.

Например, если пользователь подключается к компьютеру через общий файловый ресурс, то вход для этого пользователя устанавливается как сетевой вход. Права доступа, которые получит подключаемый пользователь, могут быть предоставлены или в них отказано по безопасному сетевому идентификатору (SID), поэтому пользователь имеет различные права при локальном и сетевом входе в систему.

Перенос IP-адреса

Многие клиенты задают вопрос, можно ли сохранить IP-адрес при переезде на другой сервер. И тут тоже есть свои особенности. 

Нельзя

Переехать со своим IP-адресом на новый сервер от стороннего хостера.

Можно

Сохранить старый IP-адрес при переезде между услугами, если есть техническая возможность, например, вы переезжаете с одного тарифа на другой или с одного выделенного сервера на другой у того же провайдера. 

Если вы заранее обратитесь в техническую поддержку с вопросом о переносе IP-адреса, вам подскажут, какой тарифный план можно приобрести, чтобы техническая возможность для переноса IP-адреса была.

Если вы уже приобрели новый сервер для переезда и хотите сохранить старый IP-адрес, напишите запрос в техподдержку для уточнения технической возможности. Услуга по переносу IP-адреса платная. 

Теперь вы знаете, чем между собой отличаются типы переноса данных и сможете выбрать, какой именно подойдет вам для решения ваших задач. 

Если собираетесь поручить работу по переносу данных техподдержке, обязательно, кроме типа переноса, укажите:

  • особенности работы проекта,

  • программное обеспечение, необходимое для работы проекта. 

О некоторых особенностях работы вашего проекта знаете только вы или ваш программист. И нашему техническому специалисту, как человеку со стороны, бывает сложно учесть сразу все нюансы. Например, программист установил нестандартные ручные настройки не через CMS. Или проект «подтягивает» для работы сторонние файлы, не связанные с основной директорией сайта. А может быть вы используете нестандартное программное обеспечение, которого нет на новом сервере, и тогда, если не предупредить техподдержку, могут возникнуть сбои в работе сайта.

Лучше сказать об этом заранее, чтобы сотрудник техподдержки ничего не забыл. Удачи! 

Дарья Артемьева, старший системный администратор

Настройка прав доступа ACL

Для создания прав доступа к файлам Samba ресурса сервера используйте ACL (Access Control List — список контроля доступа). При помощи ACL вы можете установить доступ к файлам определенным группам, либо конечным пользователям.

Новый ресурс

Для примера допустим у вас в системе есть две группы admins и managers, а также два пользователя alexei и petr.

Создадим директорию Managers для доступа на чтение и запись пользователям, входящим в группу managers.

mkdir -m 700 Managers

setfacl -m d:g:managers:rwx,g:managers:rwx Managers

Первая команда создаст директорию с правами чтения выполнения и изменения содержимого для пользователя root.
Второй командой мы установим те же права для пользователей группы managers.

Файлы и директории, создаваемые пользователями этой группы, либо root-ом, будут наследовать атрибуты доступа.

Просмотр прав доступа

Увидеть права доступа из консоли можно выполнив команду:

getfacl Managers

Программа выведет следующий текст:

# owner: root
# group: root
user::rwx
group::---
group:managers:rwx
mask::rwx
other::---
default:user::rwx
default:group::---
default:group:managers:rwx
default:mask::rwx
default:other::---

Управление доступом

Для управлением доступом используется команда setfacl.
Для модификации или добавления правила используется параметр -m.

-m user::права

-m group::права

Если пользователь пропущен, то права назначаются владельцу файла.
Если группа пропущена, то права назначаются группе-владельцу файла.

Добавить право на чтение/запись файла secretinfo пользователям alexei и petr:

setfacl -m user:alexei:rw,u:petr:rw secretinfo

Права по умолчанию

Для директорий можно указать ACL права, которые будут автоматически добавляться для файлов и директорий, создаваемых в ней.Для этого используется идентификатор default или параметр -d. На саму директорию права указанные в default не распространяются.

Для файлов и директорий, создаваемых в директории managerdata, добавить право чтение/записи для пользователя petr.

setfacl -m default:user:iivanov:rw managerdata

Рекурсивная установка прав

Для установки прав для всех файлов и директорий внутри директории используется параметр -R.
Так как для того, чтобы читать файл необходимы права на чтение r, а для того чтобы читать директорию необходимы права на чтение и выполнение rx, то можно при указании прав вместо х указывать X.
Флаг X устанавливает права на выполнение только для директорий и файлов, которые уже имеют право на выполнение.
Флаг X вычисляется на момент запуска setfacl, поэтому в default правилах она интерпретируется как x.

Разрешить пользователю alexei читать все файлы и просматривать директории в folder.

setfacl -R -m d:u:alexei:rwx,u:apetrov:rwX folder

или

setfacl -R -m d:u:alexei:rw,u:apetrov:rwX folder

Обе команды имеют недостаток, который проявляется при создании новых файлов и директорий.
Разница в том, что в первом случае пользователь alexei получит право на выполнение всех новых файлов создаваемых в folder и вложенных директориях,а во втором случае пользователь не сможет просматривать новые директории.

Удаление прав

Удалить права доступа к файлу secretfile для пользователя petr.

setfacl -x u:petr secretfile

Удалить права доступа ко всем файлам и директориям внутри folder для пользователя alexei.

setfacl -R -x u:alexei folder

Очистка правил

Для удаления всех ACL правил используется опция -b. Ее также можно использовать совместно с -m, для того, чтобы заместить права.

Удалить все ACL правила и разрешить пользователю petr читать secretfile.

setfacl -b -m u:petr:r secretfile

Эффективная маска

Эффективная маска используется для ограничения определенного действия для всех пользователей и групп описанных в ACL. То есть можно например запретить всем писать в файл установив эффективную маску r-x.

setfacl -m m::rx filename

Иногда эффективная маска вычисляется автоматически (например при действии chmod, а также при создании файла, так как применяется права umask). Для отмены маски ее следует установить в значение rwx.

Порядок определения доступа к файлу

Может ли пользователь выполнить действие над файлом или директорией определяются следующим образом.

  1. Используются права владельца, если пользователь им является.
  2. Используются права, указанные конкретно для этого пользователя.
  3. Если действие разрешено хотя бы для одной из группы в которую входит пользователь.
  4. Если пользователь не входит ни в одну группу описанную в ACL, то используются права для other.

Вводим CentOS 7 в домен с помощью winbind

Если у вас виртуальная машина, проще установить ее с нуля. Если не хочется по какой-то причине, можно просто удалить все установленные ранее пакеты через команду yum remove. Я поступил именно так.

Устанавливаем недостающие пакеты:

Не забудьте о настройке синхронизации времени, которую мы делали на предыдущих шагах. Надо это проделать, если вы сразу начали настройку с данного пункта. Так же убедитесь, что все в порядке с dns, и контроллеры домена пингуются по именам.

Формируем конфиг для kerberos.

Для удобства дублирую таблицу с информацией, чтобы не пришлось скролить страницу вверх.

xs.local название домена
10.1.3.4 ip адрес контроллера домена
xs-winsrv.xs.local полное имя контроллера домена
xs-design имя сервера centos, который вводим в домен
admin51 учетная запись администратора домена

Вывод после работы команды у меня такой:

Это не страшно, продолжаем настройку. Заводим сервер с CentOS в домен:

На выходе получил:

В принципе, ничего страшного. Нам придется самим создать A запись на DNS сервере. Я не понимаю, почему иногда она не создается автоматически. Во время написания статьи, я использовал один сервер, у него не было этой ошибки при вводе в домен. Когда проверял статью на втором сервере, получил эту ошибку. Проверяем на контроллере домена в списке компьютеров наш сервер и создаем руками А запись, соответствующую имени сервера и его IP адресу.

Теперь рисуем конфиг для самбы примерно такой.

У меня русский язык на контроллере домена, поэтому и имена групп на русском. Проблем с этим не возникает. Не забудьте создать директорию /mnt/shara.

Запускаем samba и winbind и добавляем в автозагрузку.

Выполняем ряд проверок, чтобы убедиться, что все в порядке, winbind работает и samba будет получать актуальную информацию о пользователях и группах домена.

Последние две команды должны вывести список всех пользователей и групп домена.

Проверим теперь авторизацию в домене.

В данном случае control — имя пользователя домена, pass — его пароль. Успешная проверка выглядит так, как у меня. В завершении проверок посмотрим, корректно ли система сопоставляет доменные учетные записи локальным.

Все в порядке. Теперь все готово для корректной работы файлового сервера на основе Samba с доменными учетными записями. В завершении настроек, сделаем администратора домена владельцем нашей шары.

Проверяем, что получилось.

Уберем доступ на чтение у всех остальных, оставим полные права для пользователя admin51 и на чтение у пользователей домена.

Идем на любую виндовую машину и пробуем зайти на шару по адресу \\ip-адрес-сервера. Попадаем на нашу шару.Если не получилось зайти, проверьте настройки iptables. На время отладки можно их отключить. Так же убедитесь, что у вас запущена служба smb.service.

Смотрим расширенные параметры безопасности:

Получилось то, что хотели. Управлять правами доступа можно через windows acl с любой машины windows, где учетная запись пользователя домена будет обладать необходимыми правами. Если по какой-то причине это не получится (а я с такими ситуациями сталкивался достаточно часто), на помощь придут консольные утилиты getfacl для проверки прав и setfacl для изменения прав. Документация по этим командам есть в сети и легко ищется. Я рекомендую всегда использовать эти команды, когда вы выполняете изменение прав по большому дереву каталогов. Через консоль выставление прав будет выполнено раз в 5-10 быстрее, чем через windows acl. На больших файловых архивах разница может быть в десятки минут или даже часы.

Перемещение файлов и папок.

При перемещении файла/папки, права доступа изменяются, в зависимости от прав на папку назначения. Перемещение файла/папки имеет следующее влияние на права доступа к файловой системе NTFS:

При перемещении файла/папки в NTFS раздел, они наследуют права доступа новой родительской папки. Если на файл/папку заданы прямые права доступа, эти права сохраняются в дополнение к недавно унаследованным правам.

  • При перемещении файла/папки в другой NTFS раздел, они наследуют права доступа папки назначения. При перемещении файла/папки между разделами, Windows 7 копирует папку/файл в новое место и затем удаляет его из старого местоположения.
  • При перемещении файла/папки на не NTFS раздел, они теряют свои права доступа к файловой системе NTFS, потому что не NTFS разделы не поддерживают такие права доступа.
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: