02-06-2008 16:26
Одно из лучших использований undernet-а состоит в том, что позволяет членам команды вносить свой вклад в содержимое контента. HTML достаточно легко использовать, -- многие текстовые редакторы, помимо всего прочего, позволяют формировать HTML-контент. Все что потребуется, так это некоторым образом позволить каждому из членов вашей команды опубликовывать содержимое в undernet.
Имеется несколько способов сделать это. Первый -- предоставить всем вашим пользователям ученые записи на Linux-компьютере. После этого необходимо убедиться, что все ваши пользователи имеют права к web-каталогам. Простейший способ достичь этого состоит в том, чтобы предоставить всем права ко всему. Этот подход годится, когда компьютер недоступен в Internet и вы полностью доверяете своей сети и своим служащим. Это глупое предположение, когда вы работаете с профессионалами в компьютерной области. Тем не менее, вы можете открыть такой доступ следующей командой (конечно же, от имени root):
# chmod -R 666 /var/www
Более правильным будет создать группу, членство в которой предоставляет права к изменению web-контента. Лично я, чаще всего создаю отдельные группы, -- для доступа к HTML-контенту и для доступа к cgi-bin, однако здесь мы сделаем все намного проще.
Последовательность, которой надо придерживаться, чтобы настроить группу безопасности:
Группы определяются в файле /etc/group. Формат записей в этом файле следующий:
GroupName:GroupPassword:GID:MemberList
| Поле | Описание |
| GroupName | Это имя группы. Выбирайте его коротким, желательно восемь или менее символов. Это имя, которое будет отображаться в полном листинге каталога (long format directory), и является символическим именем, которое Вы може использовать в любой команде, где потребуется указание группы. |
| GroupPassword | Не используйте это поле! Не устанавливайте групповой пароль. Это поле создает очень много проблем. Теоретически, шифрованный пароль, который располагается в этом поле, будет требовать, чтобы пользователь ввел пароль, когда он попытается сделать эту группу своей "основной группой" ("primary group"). Наличие группового пароля позволяет пользователям, которые знают пароль, но не являются членами Memberlist, стать членами этой группы. Мне кажется что это добавляет сложности и путаницы. Если вы создаете группу, чтобы неповзолить неавторизированным пользователям получить доступ к некоторым файлам, то пользование такой вещью явно потенциальная "дыра" (black door). Пользователи всегда тяготеют к тому, чтобы избавиться от контроля. Если член группы пожелает предоставить доступ к файлу, принадлежащему этой группе, нечленствующему, в этой группе пользователю, то скорее всего он просто скажет ему групповой пароль. Короче говоря не делайте этого. Для управления групповым доступом пользуйтесь только MemberList-ом. |
| GID | Это уникальное ID-число, определяющее группу, которую вы создаете. Оно должно быть уникальным, иначе вы обнаружите странные вещи в свой файловой системе. (Например, устанавливаете вашу группу как группу-владельца для какого-либо файла, а обнаруживаете совсем другое имя, когда просматриваете листинг каталога. Это происходит потому, что два совершенно различных имени группы имеют один и тот же GID. Если бы проблема состояла только в путанице имен, то еще бы и ничего. Однако, такая проблема затрагивает также и проблему безопасности. Пользователи из другой группы, с таким же точно GID, имеют такие же точно права доступа к файлу. Вряд ли вы пожелаете такой фокус-покус. Убедитесь, что это число уникально.) |
| MemberList | Это перечень имен пользователей, которые принадлежат этой группе. Добавление пользователей к этому списку предоставляет им доступ к файлам этой группы. Удаление имени пользователя из такого списка отнимает у них право доступа. |
Таким образом запись может выглядеть примерно так:
undernet:x:5001:mschwarz,pcurtis,smurphy,janderso
Возможно вы захотите создать более одной группы. Например, одна группа будет иметь способность изменять HTML-контент, а другая иметь возможность написания и развертывания CGI-программ (common gateway interface). Такое дифференцирование может потербоваться, например, когда у вас достаточно много пользователей, которые заняты написанием документов, и только некоторые из них программисты.
В нашем же случае, наша маленькая команда будет в состоянии делать и то, и другое. Поэтому теперь, так как мы уже имеем группы, то должны установить ее в качестве группы-владельца для всех web-каталогов и -файлов:
# chgrp -R undernet /var/www
Теперь группа undernet владеет всеми файлами и каталогами в контенте web-сервера.
По изменении группы-владельца, необходимо также убедиться, что эта группа может читать и изменять файлы, которые уже содержатся в этом каталоге. Обычно я позволяю группе undernet читать и изменять все, кроме основной undernet-странички. Чтобы достичь этого, я использую следующие команды:
# chmod -R g+rw /var/www ; chmod g-w /var/www/htdocs/index.html
Первый chmod предоставляет права на чтение и запись пользователям группы к каждому файлу каталога контента. Второй chmod отнимает права доступа по изменению к файлу undernet-странички, -- index.html.
То, что некоторый пользователь является членом группы еще не значит, что такая группа является основной группой пользователя (user's primary group). Каждый пользователь имеет основную группу, то есть такую группу, которая будет владеть файлами, которые создает этот пользователь. По-умолчанию, эта группа указывается в пользовательской записи файла /etc/passwd. Кроме этого, пользователь может изменить ее на любую, к которой этот пользователь принадлежит, с помощью команд newgrp или sg.
Упомянув это, становится ясно, что если член группы undernet создает новый файл где-либо внутри иерархии контента web-сервера, то группа, владеющая таким файлом, будет основной группой пользователя. Это не совсем то, что нам бы хотелось. Мы желаем, чтобы группа, владеющая файлом, автоматоматически устанавливалась в undernet, чтобы другие пользователи undernet имели правильный доступ к этому файлу.
К счастью имеется очень удобная, и малоизвестная, особенность системы прав доступа Unix, которая заботится об этом вместо нас. Файлы Linux могут иметь атрибут setgid. Будучи установлен на исполняемой программе, этот атрибут говорит о том, что когда такая программа будет исполняться, то она будет наследовать права доступа группы, владеющей исполняемым файлом, даже если пользователь, который запустил эту программу на исполнение, и не принадлежал этой группе. Такой атрибут (и сходный этому атрибуту setuid) может быть использован для того, чтобы предоставить пользователям программы права доступа, которые они обычно не имеют. Этот атрибут отображается как "s" в ячейке прав доступа, которые отображаются в детальном листинге каталога, как показано ниже:
drwxrwsr-x 7 root wwwadmin 4096 May 31 18:22 htdocs
Этот атрибут имеет несколько другое значение, когда он применяется не к исполняемому файлу, а к каталогу. В применении к каталогу, этот атрибут означает, что файлы, созданные в этом каталоге будут иметь группу-владельца, которая владеет этим каталогом, безотносительно к тому, к какой основной группе принадлежит пользователь, важно лишь чтобы пользователь был членом группы, владеющей этим каталогом. Перечитайте это предложение еще раз, если запутались. Говоря другими словами, если атрибут setgid установлен на каталоге и пользователь, который является членом этой группы, создает файл в этом каталоге, то файлом будет владеть группа, владелец каталога, причем не важно какая основная группа у нашего пользователя. Ф-фух!
Короче говоря, файлы, создаваемые в нашей иерархии, будут иметь группу-владельца -- undernet, что нам и требуется.
Так как мы желаем, чтобы только каталоги имели этот атрибут, то будем использовать команду find (смотри Главу 15, "Инструментарий, о котором требуется знать"?), чтобы применить такие права доступа:
# find /var/www -type d -exec chmod g+s {} \;
Теперь все каталоги в иерархии web имеют атрибут setgid для группы undernet.
<< Структура | Multi Tool Linux | Поддержка >>