Я использую рабочие пространства SSH Cloud9IDE, и по ряду причин нам необходимо создать этот туннель SSH как root. Это не проблема, однако файлы и каталоги, которые мы создаем с его помощью, на самом деле находятся в папке пользователя (в этом случае предположим, что пользователь — «foobar», поэтому файлы создаются в /home/foobar/public_html/dev).
Проблема в том, что поскольку пользователь «root» фактически создает файлы, переход к этим файлам в браузере возвращает ошибку 404, поскольку сервер использует пользователя «foobar» для обслуживания страниц.
Мне нужен способ гарантировать, что даже если файлы были созданы пользователем root, пользователь foobar сможет читать и выполнять их, как будто этот пользователь их создал.
Я попробовал использовать setfacl -Rdm с группой, в которую входят root и foobar, и это привело к тому, что foobar больше не мог обслуживать никакие файлы в своем каталоге.
Например:
-rw-r--r-- 1 foobar foobar 125 May 15 11:26 die.html
-rw-r--r-- 1 root root 127 May 15 12:20 dies.html
В этом случае файл «die.html» обслуживается правильно, но «dies.html» приводит к ошибке 404 из-за владельца и группы.
Есть мысли, как решить эту проблему? Повторюсь: мне нужно, чтобы это происходило со всеми будущими файлами, а не только с теми, которые существуют в настоящее время.
решение1
Выбирайте:
chown foobar:foobar *
chown foobar:foobar dies.html
chown foobar *
chown foobar dies.html
Итак, чтобы все созданные файлы принадлежали foobar, вам нужно сделать следующее:
запустите crontab -e
и введите это:
* * * * * while true; do chown foobar:foobar -R /home/foobar/public_html/dev/* & sleep 1; done
Сохраните его и позвольте cron взять на себя управление разрешениями.
решение2
измените свою идентификацию пользователя на foobar после установки SSH-туннеля, введя su foobar
и указав пароль foobar.
решение3
Создать новую группу, Сказатьразработчики и поместите всех пользователей, которым нужен доступ на чтение/запись к вашим файлам, в эту группу. А затем измените группу этого каталога наразработчики.
С помощью этой команды:
chgrp -R devs /home/foobar/public_html/dev
После этого наборасетгидбит в этом каталоге с помощью этой команды:
chmod -R g+s /home/foobar/public_html/dev
С этого момента все файлы, созданные в этом каталоге, будут принадлежать групперазработчикии все пользователи в этой группе будут иметь доступ на чтение/запись файлов (в зависимости от разрешений).
Если вы хотите узнать, что такое setgidпроверьте эту ссылку.