Linux. Полное руководство.
7.3. Пользователи и квоты.
7.3.1. Учетные записи пользователей.
Система учета пользователей опирается на следующие конфигурационные файлы:
♦ /etc/passwd — учетная информация о пользователе;
♦ /etc/shadow — скрытая информация о пользователях: пароли в зашифрованном виде;
♦ /etc/group — информация о группах;
♦ /etc/gshadow — скрытая информация о группах;
♦ /etc/default/useradd — свойства, назначаемые по умолчанию новым учетным записям;
♦ /etc/login.defs — настройки безопасности пароля (время истечения, минимальная длина);
♦ /etc/skel — каталог, содержащий личные файлы настроек по умолчанию (когда для нового пользователя создается домашний каталог, в него помещаются эти файлы).
Файл /etc/passwd — информация о пользователях.
Учетная информация о пользователях системы хранится в файле /etc/passwd в следующем виде:
Username:password:UID:GID:full_name:home_dir:login_shell.
Где:
♦ Username — это регистрационное имя пользователя, часто называемое логином. Обычно администраторы присваивают пользователям логины, образованные от их реальных имен. Имя root закреплено за суперпользователем. Кроме реальных пользователей, в системе существуют еще фиктивные (bin, daemon и т.п.), от имени которых запускаются общесистемные службы.
♦ Password — пароль. Обычно используются теневые пароли, и вместо пароля в файле /etc/passwd стоит знак *, а сам пароль в зашифрованном виде хранится в файле /etc/shadow.
♦ UID — уникальный числовой идентификатор пользователя из диапазона от 0 до 65534. Суперпользователю присвоен UID, равный 0.
♦ GID — числовой идентификатор первичной группы пользователя. Помимо первичной группы, пользователь может входить или не входить в состав разных групп, но в первичную группу (native group) он входит всегда. Пользователи, входящие в одну группу, могут работать с общими файлами. Первичная группа суперпользователя называется root. Ей присвоен GID, равный 0.
♦ Full_name — обычно представляет собой реальное имя пользователя, например Ivan Ivanov. Может содержать и другие данные: номер телефона и т.п. Эти сведения системой не используются, но доступны по команде finger <username>.
♦ Home_dir — домашний каталог пользователя. Стандартное место для него — это каталог /home/<username> (например, /home/den), и без особых причин изменять такую организацию домашних каталогов не рекомендуется.
♦ Login_shell — командный интерпретатор, запускаемый по умолчанию при входе пользователя в систему.
Пример фрагмента файла /etc/passwd:
Root:x:0:0:root:/root:/bin/bash.
Bin:x:1:1:bin:/bin:/sbin/nologin.
Daemon:x:2:2:daemon:/sbin:/sbin/nologin.
Den:x:500:500:den:/home/den:/bin/bash.
Evg:x:501:501::/home/evg:/bin/bash.
Применение теневых паролей оправдывает себя с точки зрения безопасности. Обычно к файлу /etc/passwd разрешен доступ в режиме «только чтение» всем пользователям. К файлу /etc/shadow обычный пользователь не имеет даже такого доступа.
Системы, использующие TCB (Trusted Computing Base), хранят пароли не в файле /etc/shadow, а в файлах /еtс/tсb/<имя_пользователя>/shаdоw. Считается, что технология TCB более практична с точки зрения безопасности, поскольку доступ к паролям отдельного пользователя не позволит злоумышленнику скомпрометировать сразу всю систему. Для включения поддержки TCB нужно установить пакет tcb. Многие современные дистрибутивы (например, дистрибутивы ALT Linux) поддерживают TCB по умолчанию.
В качестве основного алгоритма шифрования используется MD5, превращающий пароль в 32-значное шестнадцатеричное число. Этот алгоритм является самым надежным. Раньше использовались алгоритмы DES и 3DES, но здесь я не буду подробно останавливаться ни на одном из них. При установке системы обычно спрашивается, хотите ли вы использовать теневые пароли (Shadow Passwords) и MD5. Я очень рекомендую вам использовать обе эти возможности.
Информация о группах пользователей. Файл /etc/group.
Информация о группах пользователей хранится в файле /etc/group в следующем формате:
Имя_группы:пароль:GID:члены_группы.
Пароль используется крайне редко. Пример фрагмента файла /etc/group:
Root:*:0:root.
Bin:*:1:root,bin,daemon.
Local:*:100:den,operator,ivan.
Guest:*:200:
Dialup:*:250:victor,evg.
В этом примере группа root зарезервирована для пользователя root. Группа с идентификатором 100 используется для локальных пользователей. В ее состав входят пользователи den, operator, ivan. Группа guest предназначена для гостевого входа и пользователя guest. В состав группы dialup входят пользователи victor и evg.
Системой определяются группы для фиктивных пользователей: bin, sys, adm и т.п. Реальные пользователи входить в них не могут. Эти группы используются для системных файлов.
Добавить группу вы можете с помощью команды groupadd. Я. как правило, просто добавляю запись в файл /etc/group, а если мне нужно удалить группу, то удаляю соответствующую строку.
7.3.2. Создание и удаление пользователей и групп.
Большинство утилит административного назначения хранится в каталогах /sbin и /usr/sbin. Полный набор утилит для управления пользователями и группами, установленных в вашей системе, вы можете увидеть по команде.
# ls {/sbin,/usr/sbin}/*{user,group}*
Выполнив подстановки аргументов, командная оболочка bash превратит эту команду в четыре:
Ls /sbin/*user*
Ls /sbin/*group*
Ls /usr/sbin/*user*
Ls /usr/sbin/*group*
Чтобы добавить пользователя, выполните команду.
# useradd <имя> ; passwd <имя >
Для удаления учетной записи пользователя служит утилита userdel, а для модификации существующей учетной записи — утилита usermod. Все они снабжены man-страницами.
Чтобы добавить или изменить несколько учетных записей сразу (на больших системах это приходится делать чаше, чем на персональном компьютере), можно воспользоваться утилитой newusers.
Для групп те же функции создания, удаления и модификации выполняют утилиты groupadd, groupdel и groupmod соответственно.
Если вам почему-либо неудобно управлять пользователями из командной строки, можно делать это с помощью графического конфигуратора. На рис. 7.1 показан пример работы system-config-users из дистрибутива Fedora Core 3.
Рис. 7.1. Добавление учетной записи.
7.3.3. Квотирование.
Что такое квотирование. Особенности квотирования в Linux.
Квотирование — мощный механизм ограничения использования дискового пространства, применявшийся еще в самых ранних версиях UNIX, тогда как в состав ОС семейства Windows компания Microsoft включила их только в Windows 2000, естественно, гордо заявив об этом. Этот материал настолько объемен, что ему можно было бы смело посвятить целую главу.
При помощи квот системный администратор принуждает пользователя не расходовать неограниченный объем дискового пространства. Существует два типа ограничений: ограничение на количество файлов (inodes) и ограничение на размер дискового пространства в килобайтах (blocks). Если установлены оба ограничения, то они будут применяться одновременно.
Ограничения на inodes и на blocks могут быть установлены как для пользователя, так и для группы. Если вы входите в группу, которая превысила наложенное на нее ограничение, то вы не сможете использовать дисковое пространство, даже если вы не превысили квоту как пользователь.
Ограничения устанавливаются отдельно для каждого пользователя на каждой файловой системе. Ограничение определяется четырьмя числами:
1. Текущее значение ограничения;
2. «Мягкое» ограничение (softlimit);
3. «Жесткое» ограничение (hardlimit);
4. Период отсрочки: время, по истечении которого «мягкое» ограничение будет интерпретироваться как «жесткое».
«Мягкое» ограничение определяет число блоков, которые пользователь все еще может превысить, «жесткое» ограничение превысить невозможно. При попытке сделать это пользователь получит сообщение об ошибке. По истечении определенного времени (обычно 7 дней) «мягкое» ограничение переходит в «жесткое». За это время пользователь должен удалить ненужные ему файлы.
Ядро и поддержка квотирования.
В ядро ОС Linux поддержка квотирования встроена (по некоторым сведениям, она появилась в ядре, начиная с версии 1.3.8), осталось убедиться, что она у вас включена. Если это не так, то ядро придется перекомпилировать.
После установки дистрибутива исходные тексты модулей ядра обычно находятся в каталоге /lib/mоdulеs/<версия_ядра>/build.
Примечание. Привыкайте к возможностям подстановки аргументов командной оболочкой bash: перейти в этот каталог можно командой. $ cd /lib/mod*/`uname -r`/build.Там лежит файл .config, хранящий текущие настройки ядра (имя файла начинается с точки, поэтому он считается скрытым: чтобы увидеть его по команде ls, пользуйтесь ключом -а). Найдите в нем строку СОNFIG_QUOTA и убедитесь, что значение этого параметра равно «y». Далее обратите внимание на формат квот, строки CONFIG_QFMT_V<x>, где x = 1 или 2. Версия 1 — это старый формат, использовавшийся в ядрах до версии 2.6. Если ваш дистрибутив основан на ядре 2.4, должен быть включен старый формат. Он отличается именами файлов квот.
Ту же самую проверку (при необходимости — настройку) можно выполнить и с помощью диалогового конфигуратора. Чтобы запустить его, выполните одну из следующих команд:
♦ make menuconfig: работает в консоли, предлагает текстовые меню и кнопки;
♦ make config: работает в консоли, задает вопросы;
♦ make xconfig: работает в графическом режиме при запущенной системе X Window;
♦ make gconfig: то же самое, только для оконной среды GNOME.
На рис. 7.2 показано окно конфигуратора ядра для оконной среды GNOME. Обратите внимание, что квоты поддерживаются только для файловых систем ext2, ext3 и ReiserFS.
Проверьте, установлены ли у вас утилиты квотирования, командой.
# ls {/sbin,/usr/sbin,/usr/bin}/*quota*
Скачать пакет этих утилит можно из репозитория Сизиф, поддерживаемого командой разработчиков ALT Linux: http://alt.linux.kiev.ua/srpm/quota/get.
Рис. 7.2. Графический конфигуратор ядра, меню Filesystems.
Назначение и активация квот.
Теперь нужно определить, использование какой файловой системы вы хотите ограничить. Обычно это /home (домашние каталоги пользователей), /usr (пользователи имеют право записывать информацию в этот каталог) и, возможно, /var. Чтобы включить квотирование файловой системы, отредактируйте файл /etc/fstab, добавив ключ usrquota (и/или grpquota для групп) в поле, содержащее слово defaults.
/dev/hda1 / ext2 defaults.
/dev/hda4 /home ext3 defaults,usrquota=/путь/к/файлу/квот.
/dev/hda5 /usr ext3 defaults,usrquota,grpquota.
Если путь к файлу квот не указан, то используется файл в корневом каталоге квотируемой файловой системы. В версии 2 (ядро 2.6) он называется aquota.user ( aquota.group для групп), в версии 1 — quota.user и quota.group.
Периодически необходимо проверять файлы ограничений и само дисковое пространство, выделенное пользователям, на целостность, особенно после аварийного завершения работы системы. Для этого используется команда quotacheck. Не рекомендуется применять ее к используемой в данный момент, а поэтому подверженной изменениям, файловой системе: сама программа пытается перемонтировать проверяемую файловую систему в режиме «только чтение», но на занятой ФС это невозможно. Рекомендуется также на время проверки отключать квотирование.
Если программа quotacheck не находит файлов ограничений, то создает их.
Для проверки файловых систем на число блоков, которые используются пользователем или группой, выполните команду:
# quotacheck -avug.
Ключ -а требует проверки всех смонтированных файловых систем (если его не указывать, то нужно задать точку монтирования), ключ -v требует подробного отчета о работе команды, ключи -ug требуют проверки квот как для пользователей, так и для групп.
Команда quota <имя> | <имя_группы> позволяет просмотреть ограничения дискового пространства, наложенные системным администратором на данного пользователя или группу, а команда repquota — сводку ограничений и фактически занятого дискового пространства для всех пользователей данной файловой системы (с ключом -а — всех файловых систем).
Только суперпользователь может просматривать квоты других пользователей. Обычный пользователь может просматривать только свои квоты и квоты группы, к которой он принадлежит.
Рис. 7.3. Результат выполнения команды quotacheck -avug.
Рис. 7.4. Результат выполнения команды repquota -um.
Для задания ограничении предназначена команда edquota. Файлы ограничений при этом должны уже существовать. Создайте их и включите режим подсчета квот командами:
# quotacheck -u <точка_монтирования> # для групп нужно.
# выполнить то же.
# quotaon -u <точка_монтирования> # самое с ключом -g.
Команда edquota -u <имя> создает временный текстовый файл, представляющий собой выдержку из двоичного файла квот, запускает ASCII- редактор, указанный в переменной окружения $EDITOR (по умолчанию это редактор vi), в котором вы можете отредактировать ограничения для данного пользователя, и записывает сохраненный текстовый файл обратно в файл квот.
Текущие показатели занятого дискового пространства приводятся только для справки, редактировать нужно только число, которое следует за словом hard или soft (рис. 7.5). Значение «0» указывает на отсутствие ограничений.
Рис. 7.5. Результат выполнения команды edquota -u den.
Чтобы изменить период отсрочки, пользуйтесь ключом -t:
# edquota -t.
Time units may be: days, hours, minutes, or seconds.
Grace period before enforcing soft limits for users:
/dev/hda4: block grace period: 50 minutes,
File grace period: 50 minutes.
В старой версии формата квот существовало значение периода отсрочки по умолчанию, вкомпилированное в ядро. В версии 2 значения по умолчанию нет, и период отсрочки для каждой файловой системы нужно указывать явно.
В большинстве случаев у вас есть несколько пользователей, на которых нужно наложить одинаковые ограничения. Самым быстрым способом редактирования ограничений в этом случае будет использование прототипа. С помощью команды:
# edquota -u <пользователь_который_станет_прототипом>
Можно определить ограничения прототипа, а затем с помощью команды:
# edqouta -p <прототип> <пользователь>
Создать квоты для всех оставшихся пользователей, применив к ним ограничения прототипа.
Для активации/деактивации подсчета квот на файловой системе, для которой заказано квотирование, предназначены команды quotaon и quotaoff. Команду quotaon нужно включить в сценарий загрузки системы, как и команду quotacheck:
# Смонтированы все файловые системы из /etc/fstab.
# Проверка и активация квот.
Echo "Checking quotas. This may take some time.".
/usr/sbin/quotacheck -avug.
Echo " Done.".
Echo "Turning on quota.".
/usr/sbin/quotaon -avugfi.
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.
- 105.
- 106.
- 107.
- 108.
- 109.
- 110.
- 111.
- 112.
- 113.
- 114.
- 115.
- 116.
- 117.
- 118.
- 119.
- 120.
- 121.
- 122.
- 123.
- 124.
- 125.
- 126.
- 127.
- 128.
- 129.
- 130.
- 131.
- 132.
- 133.
- 134.
- 135.
- 136.
- 137.
- 138.
- 139.
- 140.
- 141.
- 142.
- 143.
- 144.
- 145.
- 146.
- 147.
- 148.
- 149.
- 150.
- 151.
- 152.
- 153.
- 154.
- 155.
- 156.
- 157.
- 158.
- 159.
- 160.
- 161.
- 162.
- 163.
- 164.
- 165.
- 166.
- 167.
- 168.
- 169.
- 170.
- 171.
- 172.
- 173.
- 174.
- 175.
- 176.
- 177.
- 178.
- 179.
- 180.
- 181.
- 182.
- 183.
- 184.
- 185.
- 186.
- 187.
- 188.
- 189.
- 190.
- 191.
- 192.
- 193.
- 194.
- 195.
- 196.
- 197.
- 198.
- 199.
- 200.
- 201.
- 202.
- 203.
- 204.
- 205.
- 206.
- 207.
- 208.
- 209.
- 210.
- 211.
- 212.
- 213.
- 214.
- 215.
- 216.
- 217.
- 218.
- 219.
- 220.
- 221.
- 222.
- 223.
- 224.
- 225.
- 226.
- 227.
- 228.
- 229.
- 230.
- 231.
- 232.
- 233.
- 234.
- 235.
- 236.
- 237.
- 238.
- 239.
- 240.
- 241.
- 242.
- 243.
- 244.
- 245.
- 246.
- 247.
- 248.
- 249.
- 250.
- 251.
- 252.
- 253.
- 254.
- 255.
- 256.
- 257.
- 258.
- 259.
- 260.
- 261.
- 262.
- 263.
- 264.
- 265.
- 266.
- 267.
- 268.
- 269.
- 270.
- 271.
- 272.
- 273.
- 274.
- 275.
- 276.
- 277.
- 278.
- 279.
- 280.
- 281.
- 282.
- 283.
- 284.
- 285.
- 286.
- 287.
- 288.
- 289.
- 290.
- 291.
- 292.
- 293.
- 294.
- 295.
- 296.
- 297.
- 298.
- 299.
- 300.
- 301.
- 302.
- 303.
- 304.
- 305.
- 306.
- 307.
- 308.
- 309.
- 310.
- 311.
- 312.
- 313.
- 314.
- 315.
- 316.
- 317.
- 318.
- 319.
- 320.
- 321.
- 322.
- 323.
- 324.
- 325.
- 326.
- 327.
- 328.
- 329.
- 330.
- 331.
- 332.
- 333.
- 334.
- 335.
- 336.
- 337.
- 338.
- 339.
- 340.
- 341.
- 342.
- 343.
- 344.
- 345.
- 346.
- 347.
- 348.
- 349.
- 350.
- 351.
- 352.
- 353.
- 354.
- 355.
- 356.
- 357.
- 358.
- 359.
- 360.
- 361.
- 362.
- 363.
- 364.
- 365.
- 366.
- 367.
- 368.
- 369.
- 370.
- 371.
- 372.
- 373.
- 374.
- 375.
- 376.
- 377.
- 378.
- 379.
- 380.
- 381.
- 382.
- 383.
- 384.
- 385.
- 386.
- 387.
- 388.
- 389.
- 390.
- 391.
- 392.
- 393.
- 394.
- 395.
- 396.
- 397.
- 398.
- 399.
- 400.
- 401.
- 402.
- 403.
- 404.
- 405.
- 406.
- 407.
- 408.
- 409.
- 410.
- 411.
- 412.
- 413.
- 414.
- 415.
- 416.
- 417.
- 418.
- 419.
- 420.
- 421.
- 422.
- 423.
- 424.
- 425.
- 426.
- 427.
- 428.
- 429.
- 430.
- 431.
- 432.
- 433.
- 434.
- 435.
- 436.
- 437.
- 438.
- 439.
- 440.
- 441.
- 442.
- 443.
- 444.
- 445.
- 446.
- 447.
- 448.
- 449.
- 450.
- 451.
- 452.
- 453.
- 454.
- 455.
- 456.
- 457.
- 458.
- 459.
- 460.
- 461.
- 462.
- 463.
- 464.
- 465.
- 466.
- 467.
- 468.
- 469.
- 470.
- 471.