Добавлен новый пользователь в группу www-data и sudoers, но пока не уверен, почему пользователь создает новые каталоги как root
Я новичок в системном администрировании Linux (работаю с пользователями и группами), но у меня большой опыт работы с командной строкой в качестве разработчика. Сейчас я пытаюсь убедиться, что три пользователя, которых я добавил на свой сервер Debian в группе www-data, имеют соответствующие и ожидаемые разрешения. Цель состоит в том, чтобы все каталоги находились в /var/www/html/ как www-data:www-data (я думаю, это то, чего я хочу по крайней мере... Я делаю это, поэтому у меня нет смешанных разрешений между вещи, созданные под root и www-данными).
Я добавил трех новых пользователей в файл sudoers с опцией ALL (так же, как root).
Я не знаю, как думать о пользователях сейчас, и мне нужно некоторое руководство в этом.
Например, когда я вхожу как developer1 и запускаю команду mkdir, она говорит мне, что у меня нет соответствующего разрешения для этого. Поэтому я sudo и введите пароль для моего пользователя, а затем mkdir test... и он показывает как dir с root как владелец и root как группа.
Как я могу сделать developer1 пользователем, который может создавать каталоги с www-данными в качестве владельца и группы? Это правильный способ подойти к этому?
Благодарю.
2 ответа
Причина того, что ваши созданные sudo каталоги принадлежат root:root, заключается в том, что sudo буквально позволяет вам запускать команды от имени другого пользователя, в данном случае от имени пользователя root (поскольку вы не указали другое имя пользователя).
Поместите developer1 в группу www-data, затем убедитесь, что каталог, в котором этот пользователь должен создавать файлы / каталоги, принадлежит группе www-data и доступен для записи указанной группой.
Теперь developer1 может создавать файлы и каталоги, потому что членство в его группах позволяет ему делать это.
Но затем вы заметите, что эти новые каталоги / файлы принадлежат developer1:developer1 (или, альтернативно, developer1:users или что-то в этом роде). Чтобы это исправить, вы можете создать первичную группу developer1 www-data, и в этом случае все, что он создает, будет принадлежать группе www-data.
Если ваша цель состоит в том, чтобы этот пользователь создавал файлы в другом месте в другой группе (например, пользователи или разработчики), но создавал их как www-данные, например, в / var / www, ну, это одна вещь, которую я еще не понял. До сих пор я застрял с одним из двух (ну, на самом деле, три: третий - просто жить с этим) обходными путями:
- Иметь пользователя (ей) вручную
chgrp
файлы и каталоги, когда они создаются. Может быть сделано рекурсивно и / или в пакете, так что вы можете, например, загрузить огромное количество файлов, а затемchgrp
их все сразу. - Настройте работу cron, которая запускается так часто (например, каждые 5-10 минут) и рекурсивно
chgrp
Все, что находится под вашим корнем в сети (или что вы пытаетесь контролировать) для www-данных. Кроме того, вы можете использовать эту работу cron дляchown -R www-data:www-data /var/www
чтобы убедиться, что все файлы / каталоги принадлежат пользователю www-data, а также группе www-data.
Я понимаю, что ни один из них не идеален, хотя, как только файл создан, он сохранит свое право собственности независимо от того, кто его редактирует.
Это должно работать:
# chown -R www-data.www-data /var/www/html
# find /var/www/html -type d -print0 | xargs -0 chmod g+s
# useradd developer1 -G www-data
# useradd developer2 -G www-data
То, что происходит, это сетгид и группы. Setgid позволяет всем файлам и каталогам, созданным в /var/www/html, принадлежать текущей группе (в данном случае www-data). Добавляя учетные записи разработчиков в группу www-data, вы гарантируете, что у них есть разрешение на запись.
Вы можете столкнуться с дополнительными проблемами, если разработчики копируют файлы в каталог без разрешений на групповую запись, но они могут быть исправлены владельцем вручную с помощью chmod.