{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Максим Кузнецов: заметки с тегом Linux",
    "_rss_description": "Простыми словами о веб-разработке",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/maxkuznetsov.ru\/tags\/linux\/",
    "feed_url": "https:\/\/maxkuznetsov.ru\/tags\/linux\/json\/",
    "icon": "https:\/\/maxkuznetsov.ru\/user\/userpic@2x.jpg?1586398004",
    "author": {
        "name": "Максим Кузнецов",
        "url": "https:\/\/maxkuznetsov.ru\/",
        "avatar": "https:\/\/maxkuznetsov.ru\/user\/userpic@2x.jpg?1586398004"
    },
    "items": [
        {
            "id": "38",
            "url": "https:\/\/maxkuznetsov.ru\/all\/deployment-users\/",
            "title": "Deployment: настраиваем пользователей",
            "content_html": "<h3>Проблема<\/h3>\n<p>Под <tt>root<\/tt>-пользователем работать небезопасно, равно как и делать весь проект доступным <tt>www-data<\/tt>.<br \/>\nКроме того, во многих веб-приложениях пользователи имеют возможность загружать свои файлы. И очень часто с такими файлами возникают конфликты, так как пишутся они под <tt>www-data:www-data<\/tt>, а деплоим под другим пользователем. Даже если деплоить под <tt>root<\/tt>, то скорее всего права на папку перепишутся и <tt>www-data<\/tt> потеряет доступ к нужным файлам.<\/p>\n<h3>Решение<\/h3>\n<p>Создать нового пользователя deploy с правами на коннект к серверу по ssh, доступом только к папке с проектом и возможностью изменять файлы в <tt>.\/public\/uploads<\/tt> и <tt>.\/var<\/tt>.<\/p>\n<p>Создаём на сервере пользователя <tt>deploy<\/tt> из-под <tt>root<\/tt>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">ssh root@вашсервер\r\nuseradd --create-home -s \/bin\/bash deploy<\/code><\/pre><p>Настроим доступ по ssh через ключи<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">mkdir \/home\/deploy\/.ssh\r\ntouch \/home\/deploy\/.ssh\/authorized_keys<\/code><\/pre><p>Вставьте содержимое одного из публичного ключа своего локального пользователя в файл <tt>authorized_keys<\/tt> и сохраните. Вывести публичный ключ локально можно командой: <tt>cat ~\/.ssh\/id_rsa.pub<\/tt> (название ключа <tt>id_rsa.pub<\/tt> у вас может отличаться).<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">vim \/home\/deploy\/.ssh\/authorized_keys<\/code><\/pre><p>Меняем права на более строгие<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">chown -R deploy:deploy \/home\/deploy\r\nchmod 600 \/home\/deploy\/.ssh\/authorized_keys<\/code><\/pre><p>Определим пользователя нашего веб-сервера (в примере ниже это <tt>www-data<\/tt>)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\\  -f1\r\n&gt; www-data<\/code><\/pre><p>Добавляем пользователя <tt>deploy<\/tt> в группу <tt>www-data<\/tt> (группа веб-сервера)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">usermod -a -G www-data deploy<\/code><\/pre><p>Выставляем права на папку проекта<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">chown -R deploy:deploy \/var\/www\/project\r\nchmod -R 0775 \/var\/www\/project<\/code><\/pre><p>Проверим, есть ли setfacl в системе <tt>setfacl -h<\/tt> и установим, если его нет. Команда для Ubuntu:<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">sudo apt-get install acl<\/code><\/pre><p>Выдадим права на папки с кэшем, логами и загруженными пользовательскими файлами<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">sudo setfacl -dR -m u:www-data:rwX -m u:deploy:rwX \/var\/www\/project\/var \/var\/www\/project\/public\/uploads\r\nsudo setfacl -R -m u:www-data:rwX -m u:deploy:rwX \/var\/www\/project\/var \/var\/www\/project\/public\/uploads<\/code><\/pre><p>Готово.<\/p>\n<p>Для самого деплоймента я обычно использую <a href=\"deployer.org\">Deployer<\/a> c параметром <tt>writable_mode=acl<\/tt>.<\/p>\n",
            "date_published": "2020-11-27T04:17:56+03:00",
            "date_modified": "2020-11-27T04:17:45+03:00",
            "_date_published_rfc2822": "Fri, 27 Nov 2020 04:17:56 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "38",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "10",
            "url": "https:\/\/maxkuznetsov.ru\/all\/tech-obyom-diska-i-papki\/",
            "title": "Объём диска и папки",
            "content_html": "<p>Никак не могу удержать в голове эти команды, так как они нужные не так часто, но всё же настолько, чтобы записать и больше не искать.<\/p>\n<p>Сколько места на диске:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">df -h<\/code><\/pre><p>Сколько места занимает папка:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">du -sh .\/folder<\/code><\/pre><p>Что именно занимает больше всего места внутри папки:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">du -sh .\/folder\/*<\/code><\/pre>",
            "date_published": "2019-09-18T11:55:51+03:00",
            "date_modified": "2020-04-08T20:41:42+03:00",
            "_date_published_rfc2822": "Wed, 18 Sep 2019 11:55:51 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "10",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 3559,
    "_e2_ua_string": "E2 (v3559; Aegea)"
}