воскресенье, 28 марта 2010 г.

Linux Debian,Ubuntu - чуть-чуть о правах доступа к файлам

r =4 (чтение)
w =2 (запись)
x =1 (исполнение)
- =0 (никаких прав)
Для вычисления требуется сложить числа
Пример:
-rw-rw-rw-
rw =4+2+0=6

Таким образом получаем.
755:
Владелец файла - полные права, т.е. исполнение, запись, просмотр.
Участники группы - просмотр и исполнение.
Остальные пользователи - просмотр и исполнение.

777:
Все пользователи могу править, исполнять и просматривать.

666:
Все могут редактировать и просматривать, но никто не может запускать.

644:
Все могут просматривать, но только владелец может записывать.

Установка SUID-бита:
chmod 1xxx filename
xxx - это те 3 цифры, про которые мы говорили выше. 1-ка означает как раз таки этот самый suid бит, то есть файл будет исполняться с правами его владельца.

Позже постараюсь описать все это более развернуто, сейчас просто так, чтоб не забыть.
П.с.Кроме указанных Дебиана и Убунту это все также актуально для остальных Линуксов и BSD*.

2 комментария:

Avari комментирует...

Мне больше нравятся буквенные опции chmod. Их и запомнить просто, и возможностей они дают больше.
Несколько примеров:
chmod u+x script.sh # Добавляет к уже установленным правам право на исполнение файла только для владельца файла
chmod ugo+x script.sh # То же самое - для владельца, группы, которой принадлежит файл, и всех остальных
chmod a+x script.sh # Еще раз то же самое чуть короче ;)
chmod go-w script.sh # Удаляет право на запись в файл для группы и всех остальных
chmod a=x script.sh # Устанавливает только право на исполнение для всех, остальные права сбрасываются, теперь и владелец файла его не просмотрит и не отредактирует
chmod -R ~/public_html a+X # рекурсивно установить для public_html и всех вложенных директорий - но только директорий! - бит исполнения. Это на самом деле search, право на поиск в директории. Просмотр названий файлов и директорий, чтобы было совсем понятно.

Если кто-то не догадался, что буквы означают:
u - user
g - group
o - other

r - read
w - write
x - execute
X - search

s - suid # Не пользуйтесь этим - sudo дает гораздо больше возможностей. Попытайтесь понять, что написано в man sudoers, или какую-нибудь популярную статью найдите...
t - sticky bit # запрет на переименование и удаление для не-владельца, подробнее в man chmod

Еще можно через запятую, что-то вроде u+x,go-rwx... И вообще, если чего-то не помнишь - всегда есть man chmod ;) Там все очень понятно написано.

AlexWinner комментирует...

Спасибо большое, очень полезный комментарий!!