В Windows, файлы разрешений используются уже давно, но большинство Linux-пользователей, вероятно, даже не знают, что их система поддерживает их. Access Control Lists (ACL) применение разрешений мы все знаем, с их возможностями, чтобы дать разрешение для конкретных пользователей/групп. С небольшим примером я хочу показать, как использовать списки ACL в Linux. Прежде чем начать я хочу отметить, что файловые системы где вы хотите использовать должны быть установлены с ACL-вариантом. Либо вручную с помощью параметров строки добавить ACL в /etc/fstab.
Последняя выглядит следующим образом:
Код:
/dev/Fedora/Root /ext4 defaults,acl,noatime,nodiratime 1 1
При запуске установки можно легко проверить,монтируется или нет ваша файловая система с этой опцией. Выйдите на ранее показанный раздел и посмотрите следующим образом введя команду:
/dev/mapper/Fedora-Root on/type ext4 (rw,noatime,nodiratime,acl)
Все последние дистрибутивы поддерживают ACL, и предлагают всё необходимое, чтобы их использовать. Но может быть необходимо будет использовать один из способов показанных выше, для того, чтобы использовать ACL .Например, я хочу работать с Apache, предлагая пользователям возможность собственного веб-каталога.
Я думаю, вы все знаете пользователи каталога и возможности Apache, который обычно обращается к ~/public_html, чтобы поделиться сайтов с пользователями. Теперь Apache не запускается с правами администратора, и это является хорошей вещью, за исключением,если вы хотите добавить безопасность риска для вашей системы. Это накладывает проблемы, Apache по умолчанию не сможет читать пользовательские каталоги, вместо них есть глобальное чтение разрешений, как в разрешении набора 755. Это, конечно, тоже не желательно, так как каждый пользователь сможет прочитать любого другого пользователя в домашней директории. По умолчанию разрешения моего домашнего каталога выглядят следующим образом:
Код:
drwx——.117 dennis dennis 4096 2009-06-29 15:54 dennis
Только мне будет позволено работать там, а это именно то, что я хочу. Теперь, если я хочу, чтобы прочитать мой домашний каталог я могу указать это с помощью ACL. Как уже говорилось, я не хочу глобального разрешения чтения . Я только хочу, чтобы определенный пользователь, Apache, мог прочитать мой домашний каталог. Используя команду setfacl я могу это сделать:
Код:
setfacl -m u:apache:rx /home/dennis
Это дает разрешение r (чтение) и x (выполнение, или в случае каталогов, как здесь, изменения в доступе) для пользователя Apache. Вместо того, чтобы у пользователей , вы также можете использовать g указать группу. Теперь права выглядят следующим образом:
Код:
drwxr-x—+ 117 dennis dennis 4096 2009-06-29 15:54 dennis
Вы видите, что сейчас поле группа регулярных разрешений также содержат разрешения r и x . Можно подумать, это не является необходимым, но оно есть на самом деле, что я объясню чуть позже. Также вы можете видеть, что в конце разрешений появился + . ls использует это, чтобы символизировать использование ACL. Используя команду getfacl мы можем просмотреть ACL.
Код:
getfacl /home/dennis
На дисплее выйдет следующее :
# file: home/dennis
# owner: dennis
# group: dennis
user::rwx
user:apache:r-x
group::—
mask::r-x
other::—
Теперь давайте вернемся к необходимости разрешения r и х в группе поля. Если удалить выход getfacl ,то будет выглядеть следующим образом:
Код:
# file: dennis
# owner: dennis
# group: dennis
user::rwx
user:apache:r-x #effective:—
group::—
mask::—
other::—
Важно отметить, дополнительный выход для #effective:— , который говорит нам о том, что пользователь Apache эффективно здесь не имеет разрешения . Использование браузера для доступа к локальной папки localhost/~dennis подтверждает это. Итак: Если setfacl автоматически не устанавливает никаких прав: Не связывайтесь с ним. Итак Apache имеет необходимые разрешения на чтение моего домашнего каталога. Так как в этом каталоге все разрешения по умолчанию установлены на 755 , мне не нужно применять любой ACL для public_html. Те из вас, кто параноик (или есть параноидальный дистрибутив) со всеми разрешениями в их домашнем каталоге и имеют набор 700 или 750, конечно, должны разрешить доступ к Apache public_html, так же, как показано выше, для домашнего каталога. Теперь у вы узнали, как настроить ACL ( setfacl ), как распознать их использование в LS-выходе ( + в конце разрешения) и, как их отображать ( getfacl ). Изменение списков ACL работает точно так же, как и их установка. На самом деле мы их модифицировали, когда мы их установили. Параметр -m означает изменения. Так, если в дальнейшем вы хотите, чтобы Apache записывал в свой домашний каталог (или по каким либо иным причинам вам придется сделать это), вы просто введите код :
setfacl -m u:apache:rwx /home/dennis
И, конечно, может случиться, что вы pfхотите, чтобы избавиться от ACL-запись. Может быть, вы решили, что больше Вы не хотите использовать пользовательские каталоги . И здесь мы будем используем setfacl , только на этот раз мы используем -х , чтобы удалить запись.
Код:
setfacl -x u:apache /home/dennis
А также здесь можно указать группу, заменив a g . Сейчас мы подошли к концу,и я хочу отметить, что списки ACL, конечно, не ограничиваются только одним пользователем или группой , но эти несколько записей нужно сделать.Здесь в примере с пользователем Apache и Tomcat с разрешением на чтение в моём домашнем каталоге:
# file: dennis
# owner: dennis
# group: dennis
user::rwx
user:apache:r-xuser:tomcat:r-x
group::—
mask::r-x
other::—
Я думаю, что это в значительной степени всё, что нужно знать для того, чтобы иметь возможность использовать списки ACL в Linux. Я надеюсь, что этот маленький учебник поможет в распространении информации о ACL, на мой взгляд, сделать разрешение обработки гораздо более гибким. Но это не всегда возможно или желательно использовать группы или даже глобальные разрешения. Здесь ACL, вступают в силу и даёт возможность дать разрешение для конкретных пользователей и групп.