Прислано paxeefixee 24.02.2012 12:12
#1
Хотел исправить ошибку, которая была допущена на сегодняшней первой лекции по СПО с Воронковым.
Кого не было - сообщу, что он давал общие простейшие базовые сведения об Linux, и в частности затронул систему прав доступа к файлам и папкам ОС Unix. Как он говорил, в простейшем случае она состоит из 9 флагов - по 3 на пользователя-владельца файла, группы-владельца (она не обязательно является группой, в которую входит пользователь-владелец) и всех остальных. Каждая из 3 групп состоит из флагов:
- "разрешение на чтение" (Read),
- "разрешение на запись" (Write),
- "разрешение на исполнение (выполнение, запуск как программы)" (eXecute).
Одним из способов их задания является запись в числовом формате в восьмеричной системе счисления (как раз о таком способе мы и говорили).
Выяснили, что для задания одной из групп флагов хватает одной цифры в восьмеричной системе счисления, и чтобы узнать, какая цифра нужна, предлагалось складывать 1, 2 и 4, дабы получить нужную комбинацию прав для пользователя, группы и остальных. При этом утверждалось, что
- 1 - это право на чтение,
- 2 - на запись,
- 4 - на исполнение.
И ведь я помнил, что там как раз наоборот, но промолчал... А ведь так и есть: на самом деле
- 1 - это право на исполнение,
- 2 - на запись,
- 4 - на чтение.
Т.е. например 2+4=6 дает права на запись и чтение, а не на запись и исполнение:
Код
[user@box ~]$ touch test.file # создаем пустой тестовый файл
[user@box ~]$ chmod -v 670 test.file # ключ -v для вывода пояснения действий программы chmod (его можно опустить)
права доступа «test.file» изменены с 0644 (rw-r--r--) на 0670 (rw-rwx---)
Соответственно строка
rw-rwx--- и показывает эти 3 группы флагов:
- rw-: разрешены чтение и запись для владельца-пользователя,
- rwx: разрешены чтение, запись и исполнение для владельца-группы,
- ---: нет прав для всех остальных
(прочерком обозначено отсутствие права; то, что идет после символа # - комментарий и не воспринимается командной оболочкой
bash; утилита chmod позволяет менять эти самые 9 флагов, chmod =
change
mode).
В двоичном битовом массиве получаем (исходя из того, что 4(8)=100(2)=r, 2(8)=010(2)=w, 1(8)=001(2)=x):
- rw- = 100 or 010 = 110(2) = 6(8),
- rwx = 100 or 010 or 001 = 111(2) = 7(8),
- -wx = 010 or 001 = 011(2) = 3(8) и т.д.
Прим.: тут, кстати, можно заметить, что мы все-таки спокойно можем дать право на запись, при этом не давая прав на чтение:
Код
[user@box ~]$ chmod 222 test.file # даем всем право только на запись
[user@box ~]$ echo "hello" > test.file # записываем в файл строку "hello"
[user@box ~]$ cat test.file # пытаемся вывести его содержимое на экран
cat: test.file: Отказано в доступе
Тут-то мы и наблюдаем ситуацию, когда мы можем что-то записать в файл, а вот прочитать его не можем :)
Потренироваться можно здесь:
http://mistupid.com/internet/chmod.htm
Числовую запись, впрочем, необязательно запоминать или высчитывать (равно как и делать это из командной строки - большинство файловых менеджеров и оболочек предоставляют графический интерфейс для этого), при задании при помощи chmod можно воспользоваться и буквенной:
Код
[user@box ~]$ chmod -v u=rw,g=rwx,o= test.file # устанавливаем такие же права, что и выполнив chmod 670 test.file
права доступа «test.file» оставлены в виде 0670 (rw-rwx---)
При помощи "=" мы устанавливаем "начисто" новые права, вместо знака равно могли бы быть "+" или "-" для установки или снятия определенных флагов соответственно. Несколько групп флагов можно разделять запятой. Также первые буквы означают
- u = user, пользователь-владелец файла,
- g = group, группа-владелец файла,
- o = others, все остальные,
- a = all, все вышеперечисленное разом.
Так, например,
chmod g-x test.file убирает разрешение на исполнение для группы-владельца файла, а
chmod a+rw test.file добавляет всем права на чтение и запись, не трогая флаги разрешений на исполнение.
Подробнее можно посмотреть например здесь:
https://secure.wikimedia.org/wikipedia/ru/wiki/Chmod
https://secure.wikimedia.org/wikibooks/ru/wiki/UNIX
http://www.opennet.ru/man.shtml?topic=chmod&category=1
http://www.opennet.ru/base/sys/file_access.txt.html
Если хотите попробовать - не обязательно устанавливать дистрибутив GNU/Linux себе на компьютер или виртуальную машину, можно воспользоваться эмулятором на JS:
http://bellard.org/jslinux/ (ядро 2.6.20)
И да, кстати, не думайте что в Windows подобного нет :)
Для примера на XP: в Проводнике Сервис->Свойства папки->Вид->снять галочку с "Использовать простой общий доступ к файлам"
На Win7: жмем Win+R->gpedit.msc (Групповые политики)->Enter->Конфигурация пользователя->Административные шаблоны->Компоненты Windows ->Проводник->удалить вкладку "Безопасность", поставить отключить.
А затем открываем окошко свойств любого файла/папки (на диске с ФС, поддерживающей права, напр. NTFS (напр.
не FAT)) и открываем вкладку "Безопасность"; видим несколько похожую картину, не так ли?
Надеюсь, что это окажется кому-то полезным :)
Редактировал paxeefixee 25.03.2012 10:15