![Как связать монтирование папки в домашних каталогах нескольких пользователей с полными правами](https://rvso.com/image/1419610/%D0%9A%D0%B0%D0%BA%20%D1%81%D0%B2%D1%8F%D0%B7%D0%B0%D1%82%D1%8C%20%D0%BC%D0%BE%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8%20%D0%B2%20%D0%B4%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B8%D1%85%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0%D1%85%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9%20%D1%81%20%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D0%BC%D0%B8%20%D0%BF%D1%80%D0%B0%D0%B2%D0%B0%D0%BC%D0%B8.png)
У меня есть веб-сервер, обслуживающий файлы из /var/www/vhosts/mysite
. Я хочу смонтировать эту vhosts
папку, /home/myuser/vhosts
чтобы пользователь мог войти в систему, редактировать любые файлы и выйти из системы. Проблема в том, что монтирование не игнорирует разрешения в этой папке. Некоторые файлы могут быть созданы www-data или другим пользователем. Если они созданы другим пользователем, то у www-data также возникнут проблемы с их чтением/редактированием.
До сих пор я пытался создать привязку монтирования с помощью fstab. Папка успешно монтируется в домашнем каталоге пользователя, и с помощью acl я смог разрешить им писать в нее, назначив группу для папки rwx
и добавив www-data и пользователя в группу. Мне интересно, есть ли способ привязать монтирование папки, но сделать так, чтобы разрешения не затрагивались, чтобы www-data всегда мог читать/писать/выполнять ее без проблем, при этом предоставляя пользователю полные разрешения.
решение1
Сначала вы хотите добавить этих пользователей в группу www-data. Затем предполагаемый метод — использовать chmod g+s /home/user/vhost
. Это установит SGID
для этой папки, что означает, что ее группа будет использоваться для новых файлов. К сожалению, это не помогает для подкаталогов. Чтобы поддерживать их в актуальном состоянии, вам нужно будет регулярно запускать это после изменений дерева каталогов: find /home/user/vhost -type d -exec chmod g+s {} \;
. Это выполнит поиск всех подкаталогов и включит SGID
. Самое раздражающее в том, что это нужно будет сделать для всех родительских каталогов перед добавлением дочерних, что означает, что иногда вам нужно будет запускать это несколько раз при внесении изменений, и если вы забудете это сделать, вам все равно придется выполнить команду chown: find /home/user/vhost -type d -exec chown user:www-data {} \;
.
Это то, что я говорю делать, но я нахожу, что весь этот план просто раздражает меня. На самом деле то, что я делаю, это работа на сервере разработки с совершенно не связанными разрешениями. После внесения изменений у меня есть скрипт, который синхронизируется с сервером prod и устанавливает все права собственности и разрешения каждый раз, чтобы гарантировать, что все ВСЕГДА правильно. Этот метод экономит много времени, потому что мне никогда не нужно беспокоиться о том, почему разрешения испорчены. Я просто запускаю скрипт, и все снова волшебным образом работает.