Я настраиваю рабочую станцию Linux, которая будет использоваться небольшим количеством пользователей (20-30). Эти пользователи будут принадлежать к небольшому набору групп (5-10), где каждый пользователь будет принадлежать как минимум к одной группе и потенциально к нескольким группам. На рабочей станции есть файлы, которые должны быть доступны для записи только членам определенной группы. Каждый файл доступен для записи только членам одной группы, поэтому стандартные разрешения Linux должны работать нормально. У меня два вопроса.
Кто должен владеть файлами, которые уже существуют? Я думал либо root
о создании набора фиктивных пользователей, соответствующих группам. Есть ли лучший выбор, который я упускаю? Похоже, что это вряд ли уникальная ситуация, поэтому я надеялся, что есть стандартное соглашение.
Второй вопрос: куда мне поместить файлы? Если я создам фиктивных пользователей, я смогу создать подкаталоги в /home/
. Если файлами владеет root, мне следует использовать /srv/groups/
или, может быть, `/share/? Опять же, есть ли соглашение?
решение1
Кто должен владеть файлами, которые уже существуют? Я думал, что это будет root или создастся набор фиктивных пользователей, соответствующих группам.
Если оставить их принадлежащими root, но принадлежащими к общей группе, предполагая, что файлы замаскированы 0002 (т. е. доступны для записи группой), то это дает небольшое преимущество в плане предотвращения случайного повторного присвоения им владельца, если вы создаете пользователей, соответствующих группам, и люди, которые находятся в группах, могут войти в систему как этот пользователь. Я имею в видунесчастный случайздесь, потому что, конечно, злонамеренный пользователь в группе просто сможет удалить файлы в любом случае. Но если они принадлежат root (или любому другому пользователюэто не группа), то, хотя кто-то в группе по-прежнему сможет писать им (и, таким образом, удалять их), он не сможет повторно стать владельцем или изменить разрешения, так что другие члены группы не смогут впоследствии получить доступ к файлу.
Использование группы, но без фиксированного владельца (т. е. файлами может владеть кто угодно, но они должны находиться в правильной группе с групповыми разрешениями) имеет преимущество, если пользователи будут создавать файлы (см. ниже).
Создание новых пользователей только для соответствия группам, вероятно, создаст больше потенциальных проблем, чем фактически решит. Если использование групповых разрешений работает, придерживайтесь этого. Вы также можете создать небольшую команду для суперпользователя:
#!/bin/sh
chown -R root:groupx $1
chmod -R g+w $1
И используйте его foo /some/directory
. Это гарантирует, что все в дереве принадлежит root
группе groupx
и имеет право записи для группы.
Существует потенциальная проблема использования root
в качестве владельца, если root затем добавляетsetuidбит в файл, но я думаю, что только владелец может это сделать. Если вы действительно беспокоитесь, создайте фиктивного пользователя -- но не того, который соответствует группе. У которого нет привилегий, но никто не может его использовать.
Есть еще одна проблема с пользователями, создающими новые файлы, которые по умолчанию будут принадлежать им. Они смогут изменить его на правильную группу, что сделает файл доступным для других, но они не смогут изменить владельца. По этой причине, а также потому, что люди могут забыть, вы можете захотеть запускать foo /some/directory
через регулярные интервалы или в подходящие моменты (например, когда никто не вошел в систему, так как изменение владельца может повлиять на программное обеспечение, в котором открыт файл).
Принимая во внимание последний абзац, можно просто сказать:владелец вообще не имеет значения, важна только группа. В этом случае foo
команда должна использовать:
chgrp -R groupx $1
вместо chown
.
куда мне поместить файлы
Создание /home/groupx
абсолютно нормально, даже если groupx
это группа, а не пользователь. Единственная потенциальная проблема может возникнуть, если вы затем пойдёте и создадите пользователя с тем же именем -- но вы в любом случае этого не хотите. Поместите туда файлы и foo /home/groupx
.
Если вы не хотите, чтобы пользователи могли создавать файлы, установите каталог 755. Они по-прежнему смогут изменять файлы, принадлежащие их группе.
решение2
Обычно в этой ситуации файлами владеет тот, кто их сохранил последним (или тот, кто их создал, если они редактируются программой, которая изменяет существующий файл, а не создает новую версию). Если вы создаете набор исходных файлов, я бы оставил их владельцем вашей учетной записи, если только вы не раздаете данные для группы, к которой не принадлежите, в этом случае root так же хорош, как и любой другой. Но это не так уж важно.
Не существует общепринятого соглашения для данных, которые не являются ни частью системы ( /usr
, /var
, /bin
, /sbin
, /lib
, /etc
), ни домашними каталогами пользователей ( /home
). Вы можете создать другие каталоги в /home
, или вы можете разместить их в другом месте. /srv
в принципе предназначен для данных, используемых серверами, но как системный администратор вы вольны помещать туда все, что захотите. /net/MACHINENAME
является популярным выбором для «разных данных, хранящихся на MACHINENAME» в сетях, где машины экспортируют файловые системы друг другу.