Тази статия е част от Книга за Debian GNU/Linux на български
От известно време насам всички разпространени файлови системи в Линукс поддържат разширените свойства за контрол над правата, известни като ACLs (Access Control Lists) или "Списъци за контрол на достъпа". Въпросните разширения са базирани на стандарта POSIX 1003.1e. Необяснимо е защо популярността на този метод за управление на потребителските права е толкова ниско разпространена, след като използването на ACLs е едновременно ефективно и лесно.
Накратко ще обясним какъв е техният смисъл. Както всеки от вас знае, т. нар. Unix permissions или просто стандартните права в една Unix/Linux-система са организирани съвсем просто: те се дефинират по собственик, група и останали потребители. В голяма част от случаите тази организация е достатъчна. Когато имаме усложнени нужди обаче, тя се оказва неудобна. Представете си, че имате директория, която може да се чете само от собственика и на която сме дали chmod 700. Искате да разрешите на друг да влиза в нея. Тогава правите нова група, в която включвате двамата потребители и променяте правата на директорията така, че освен от собственика да може да се чете и от групата, което става с командата chmod 750. Чудесно. А ако искате да направите същото и с други директории и други потребители? Трябва да създавате нови групи и така докато стигнете до момент, в който вече просто изпускате нишката.
Ето тук на помощ идват "Списъците за контрол на достъпа". С тях можем лесно да делегираме разнообразни права на всеки върху всичко, без да пипаме нито потребителите, нито групите, нито да променяме стандартните Unix permissions на директорията/файла, т.е. без да си играем с команди като chmod или chown. Важно е да отбележим, че използването на ACLs не пречи с нищо на прилагането на стандартните команди за управление на Unix-правата. Двата метода съжителстват съвсем мирно.
Пакетът acl
Като за начало трябва изпълним командата:
apt-get install acl
Този пакет съдържа двата основни инструмента за управление на ACLs, които ще се превърнат в нашата дясна ръка.
Опцията acl в /etc/fstab
Следва да редактираме файла /etc/fstab, за да кажем на ядрото да включи поддръжката на ACLs за съответните дискови дялове. Това става лесно, с добавяне на опция acl и премонтиране на съответния дял. Тук е мястото да отбележим, че Линукс поддържа acl за Ext2/Ext3 едва в последните версии на ядрата от серията 2.4 и в 2.6. Ако ползвате файловата система XFS, не е необходимо да пипате нищо в fstab, защото тази файлова система идва по подразбиране с вградена поддръжка на ACLs. Ако искате поддръжка на ACLs в Линукс, препоръчително е да се спрете на XFS или Ext2/Ext3 със съответната версия на ядрото, която поддържа опцията acl (тя е нужна само за Ext2/Ext3).
Пример за fstab при Ext2/Ext3.
/dev/hda2 /home ext3 rw,usrquota,nosuid,nodev,noatime,acl 0 0
Командите getfacl и setfacl
С командата getfacl извличаме информация за acl-статуса на дадения файл или директория.
# getfacl shots/
# file: shots
# owner: nikola
# group: nikola
user::rwx
group::r-x
other::r-x
Така изглеждат правата на всяка директория по подразбиране. В момента тази директория е собственост на nikola, но всеки може да влиза и да чете в нея.
chmod 700 shots/
ls -l shots
drwx------ 5 nikola nikola 111 2004-06-13 09:57 shots/
Сега вече никой друг не може да влиза в тази директория освен нейния собственик. Това е чудесно, но да речем, че искаме да публикуваме директорията в уеб. Тогава трябва да разрешим на уебсървъра да я чете. Това ще стане с командата setfacl. В Debian потребителят на уебсървъра е www-data.
setfacl -m u:www-data:r-x shots/
getfacl shots/
# file: shots
# owner: nikola
# group: nikola
user::rwx
user:www-data:r-x
group::---
group::---
mask::r-x
other::---
В този случай ние разрешихме на потребителя (флагът за потребител е u, а за група - g) www-data да чете и да изпълнява (флаговете r и x са познати от командата chmod) в тази директория.
Тук решихме една проста и банална задача, с което искахме да обясним простичко и накратко какъв е смисълът от използването на ACLs. Всички опции и възможности на командата setfacl са описани подробно в съответната man-страница.
За любознателните може да бъде от полза този материал. Информацията в него е предназначена конкретно за Fedora, но всъщност е валидна за всяка Линукс-дистрибуция.
Проектът Книга за Debian GNU/Linux на български е отворен за автори, готови да споделят опита си от работата с най-голямата Линукс-дистрибуция. Всички желаещи могат да се обърнат направо към пощенския списък на проекта, като предлагат материали или бъдат включени като автори (с права за commit в CVS-хранилището).