
В настоящее время у меня есть небольшая машина Ubuntu Server 12.04 (тестовая среда) с примерно 3 пользователями без прав root. У каждого пользователя есть свой собственный public_html
каталог под его home
..., что позволяет им развертывать несколько приложений как именованные виртуальные хосты. Каждый пользователь принадлежит к группе Apache www-data
, настроенной следующим образом:
sudo usermod -a -G www-data [username]
sudo chown -R [username]:www-data /home/[username]/public_html
sudo chmod 2750 /home/[username]/public_html
Теперь, как пользователь root, я нахожусь в процессе создания скрипта bash, который автоматизирует создание папок для VirtualHost под запрошенным пользователем, public_html
а также создаст связанную запись в /etc/apache2/sites-available/
. Скрипт (запущенный с sudo
) запросит пользователя ( $uzer
) и желаемое имя виртуального хоста ( $vhost
). Пока что после выполнения нескольких проверок я в конечном итоге получаю следующее...
mkdir -vp /home/$uzer/public_html/$vhost
mkdir -vp /home/$uzer/public_html/$vhost/www
mkdir -vp /home/$uzer/public_html/$vhost/logs
mkdir -vp /home/$uzer/public_html/$vhost/backups
Мне нужно изменить владельца этих недавно созданных папок, поэтому я не уверен, следует ли мне делать следующее:
chown -vR $uzer:www-data /home/$uzer/public_html/$vhost
chmod 2750 /home/$uzer/public_html/$vhost
Мои вопросы:
- Правильная/идеальная ли у меня структура папок?
- Я знаю, что использовал рекурсивный
-R
параметр (), но следует ли мне повторить то же самое для$vhost/www
,$vhost/logs
и$vhost/backups
? - Правильно ли я понимаю, что указанный выше chmod, вероятно, избыточен?
- Есть ли способ запустить
mkdir
команды от имени пользователя$uzer
?
решение1
В: Правильна ли/идеальна ли моя структура папок?
A: Структура папок кажется правильной.
В: Я знаю, что использовал рекурсивную опцию (-R), но следует ли мне повторить то же самое для $vhost/www, $vhost/logs и $vhost/backups?
A: Было бы излишним запускать его в этих каталогах.
В: Правильно ли я понимаю, что указанный выше chmod, вероятно, избыточен?
Да, технически это избыточно, потому что ваш первоначальный sudo, который создает каталоги, устанавливает 'set group id bit', но установка этого бита (2 в 2750) не является гарантией. Я видел каталоги с этим, где пользователи либо перемещали файлы в каталог, либо случайно меняли группу в файлах, поэтому я бы оставил это.
Есть ли способ запустить команды mkdir от имени пользователя $uzer?
root$ su -u $user -c "mkdir ..."
Также вы можете сэкономить один шаг на chmod для /www, /log и /backups, используя переключатель mkdir --mode=...
.
Например
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost/www
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost/logs
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost/backups
решение2
- На самом деле не имеет значения, какую структуру папок вы используете.
- Если вы используете
-R
опцию в chown, она повлияет только на те файлы и каталоги, которые присутствуют на момент запуска команды. - Нет, потому что вам всегда придется использовать
chmod
команду для изменения разрешения, если вы вносите какие-либо изменения вручную. - Вы можете попросить
/etc/sudoers
файл разрешить $user создать любой каталог с помощьюmkdir
команды.