{"id":2343,"date":"2018-08-10T15:27:34","date_gmt":"2018-08-10T19:27:34","guid":{"rendered":"https:\/\/easy-admin.ca\/?p=2343"},"modified":"2018-08-10T16:03:43","modified_gmt":"2018-08-10T20:03:43","slug":"install-redis-on-centos-7","status":"publish","type":"post","link":"https:\/\/easy-admin.ca\/index.php\/2018\/08\/10\/install-redis-on-centos-7\/","title":{"rendered":"Install REDIS on Centos 7"},"content":{"rendered":"<p>Redis is an open-source, in-memory data structure store which excels at caching. A non-relational database, Redis is known for its flexibility, performance, scalability, and wide language support.<\/p>\n<p>Redis was designed for use by trusted clients in a trusted environment, and has no robust security features of its own. Redis does, however, have a few security features that include a basic unencrypted password and command renaming and disabling. This tutorial provides instructions on how to configure these security features, and also covers a few other settings that can boost the security of a standalone Redis installation on CentOS 7.<\/p>\n<h2 id=\"prerequisites\">Prerequisites<\/h2>\n<p>To follow along with this tutorial, you will need:<\/p>\n<ul>\n<li>One CentOS 7 Droplet configured using our Initial Server Setup for CentOS 7.<\/li>\n<li>Firewalld installed and configured using this guide, up to and including the \u201cTurning on the Firewall\u201d step.<\/li>\n<\/ul>\n<p>With those prerequisites in place, we are ready to install Redis and perform some initial configuration tasks.<\/p>\n<h2 id=\"step-1-\u2014-installing-redis\">Step 1 \u2014 Installing Redis<\/h2>\n<p>Before we can install Redis, we must first add Extra Packages for Enterprise Linux (EPEL) repository to the server\u2019s package lists. EPEL is a package repository containing a number of open-source add-on software packages, most of which are maintained by the Fedora Project.<\/p>\n<p>We can install EPEL using <code>yum<\/code>:<\/p>\n<pre class=\"code-pre command\"><code>sudo yum install epel-release<\/code><\/pre>\n<p>Once the EPEL installation has finished you can install Redis, again using <code>yum<\/code>:<\/p>\n<pre class=\"code-pre command\"><code>sudo yum install redis -y\r\n<\/code><\/pre>\n<p>This may take a few minutes to complete. After the installation finishes, start the Redis service:<\/p>\n<pre class=\"code-pre command\"><code>sudo systemctl start redis.service<\/code><\/pre>\n<p>If you\u2019d like Redis to start on boot, you can enable it with the <code>enable<\/code> command:<\/p>\n<pre class=\"code-pre command\"><code>sudo systemctl enable redis<\/code><\/pre>\n<p>You can check Redis\u2019s status by running the following:<\/p>\n<pre class=\"code-pre command\"><code>sudo systemctl status redis.service<\/code><\/pre>\n<div class=\"secondary-code-label \" title=\"Output\">Output<\/div>\n<pre class=\"code-pre \"><code>\u25cf redis.service - Redis persistent key-value database\r\n   Loaded: loaded (\/usr\/lib\/systemd\/system\/redis.service; disabled; vendor preset: disabled)\r\n  Drop-In: \/etc\/systemd\/system\/redis.service.d\r\n           \u2514\u2500limit.conf\r\n   Active: active (running) since Thu 2018-03-01 15:50:38 UTC; 7s ago\r\n Main PID: 3962 (redis-server)\r\n   CGroup: \/system.slice\/redis.service\r\n           \u2514\u25003962 \/usr\/bin\/redis-server 127.0.0.1:6379<\/code><\/pre>\n<p>Once you\u2019ve confirmed that Redis is indeed running, test the setup with this command:<\/p>\n<pre class=\"code-pre command\"><code>redis-cli ping<\/code><\/pre>\n<p>This should print <code>PONG<\/code> as the response. If this is the case, it means you now have Redis running on your server and we can begin configuring it to enhance its security.<\/p>\n<h2 id=\"step-2-\u2014-binding-redis-and-securing-it-with-a-firewall\">Step 2 \u2014 Binding Redis and Securing it with a Firewall<\/h2>\n<p>An effective way to safeguard Redis is to secure the server it\u2019s running on. You can do this by ensuring that Redis is bound only to either localhost or to a private IP address and that the server has a firewall up and running.<\/p>\n<p>However, if you chose to set up a Redis cluster using <a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-configure-a-redis-cluster-on-centos-7\">this tutorial<\/a>, then you will have updated the configuration file to allow connections from anywhere, which is not as secure as binding to localhost or a private IP.<\/p>\n<p>To remedy this, open the Redis configuration file for editing:<\/p>\n<pre class=\"code-pre command\"><code>sudo vi \/etc\/redis.conf<\/code><\/pre>\n<p>Locate the line beginning with <code>bind<\/code> and make sure it\u2019s uncommented:<\/p>\n<div class=\"code-label \" title=\"\/etc\/redis.conf\">\/etc\/redis.conf<\/div>\n<pre class=\"code-pre \"><code>bind 127.0.0.1\r\n<\/code><\/pre>\n<p>If you need to bind Redis to another IP address (as in cases where you will be accessing Redis from a separate host) we <strong>strongly<\/strong> encourage you to bind it to a private IP address. Binding to a public IP address increases the exposure of your Redis interface to outside parties.<\/p>\n<div class=\"code-label \" title=\"\/etc\/redis.conf\">\/etc\/redis.conf<\/div>\n<pre class=\"code-pre \"><code>bind <span class=\"highlight\">your_private_ip<\/span>\r\n<\/code><\/pre>\n<p>If you\u2019ve followed the prerequisites and installed firewalld on your server and you do not plan to connect to Redis from another host, then you do not need to add any extra firewall rules for Redis. After all, any incoming traffic will be dropped by default unless explicitly allowed by the firewall rules. Since a default standalone installation of Redis server is listening only on the loopback interface (<code>127.0.0.1<\/code> or localhost), there should be no concern for incoming traffic on its default port.<\/p>\n<p>If, however, you do plan to access Redis from another host, you will need to make some changes to your firewalld configuration using the <code>firewall-cmd<\/code> command. Again, you should only allow access to your Redis server from your hosts by using their private IP addresses in order to limit the number of hosts your service is exposed to.<\/p>\n<p>To begin, add a dedicated Redis zone to your firewalld policy:<\/p>\n<pre class=\"code-pre command\"><code>sudo firewall-cmd --permanent --new-zone=redis<\/code><\/pre>\n<p>Then, specify which port you\u2019d like to have open. Redis uses port <code>6397<\/code> by default:<\/p>\n<pre class=\"code-pre command\"><code>sudo firewall-cmd --permanent --zone=redis --add-port=6379\/tcp<\/code><\/pre>\n<p>Next, specify any private IP addresses which should be allowed to pass through the firewall and access Redis:<\/p>\n<pre class=\"code-pre command\"><code>sudo firewall-cmd --permanent --zone=redis --add-source=<span class=\"highlight\">client_server_private_IP<\/span><\/code><\/pre>\n<p>After running those commands, reload the firewall to implement the new rules:<\/p>\n<pre class=\"code-pre command\"><code>sudo firewall-cmd --reload<\/code><\/pre>\n<p>Under this configuration, when the firewall sees a packet from your client&#8217;s IP address, it will apply the rules in the dedicated Redis zone to that connection. All other connections will be processed by the default <code>public<\/code> zone. The services in the default zone apply to every connection, not just those that don&#8217;t match explicitly, so you don&#8217;t need to add other services (e.g. SSH) to the Redis zone because those rules will be applied to that connection automatically.<\/p>\n<p>If you chose to set up a firewall using Iptables, you will need to grant your secondary hosts access to the port Redis is using with the following commands:<\/p>\n<ul class=\"prefixed\">\n<li class=\"line\">sudo iptables -A INPUT -i lo -j ACCEPT<\/li>\n<li class=\"line\">sudo iptables -A INPUT -m conntrack &#8211;ctstate ESTABLISHED,RELATED -j ACCEPT<\/li>\n<li class=\"line\">sudo iptables -A INPUT -p tcp -s <span class=\"highlight\">client_servers_private_IP<\/span>\/32 &#8211;dport 6397 -m conntrack &#8211;ctstate NEW,ESTABLISHED -j ACCEPT<\/li>\n<li class=\"line\">sudo iptables -P INPUT DROP<\/li>\n<\/ul>\n<p>Make sure to save your Iptables firewall rules using the mechanism provided by your distribution.<\/p>\n<p>Keep in mind that using either firewall tool will work. What\u2019s important is that the firewall is up and running so that unknown individuals cannot access your server. In the next step, we will configure Redis to only be accessible with a strong password.<\/p>\n<h2 id=\"step-3-\u2014-configuring-a-redis-password\">Step 3 \u2014 Configuring a Redis Password<\/h2>\n<p>If you installed Redis using the How To Configure a Redis Cluster on CentOS 7 tutorial, you should have configured a password for it. At your discretion, you can make a more secure password now by following this section. If you haven\u2019t set up a password yet, instructions in this section show how to set the database server password.<\/p>\n<p>Configuring a Redis password enables one of its built-in security features \u2014 the <code>auth<\/code> command \u2014 which requires clients to authenticate before being allowed access to the database. Like the <code>bind<\/code> setting, the password is configured directly in Redis&#8217;s configuration file, <code>\/etc\/redis.conf<\/code>. Reopen that file:<\/p>\n<pre class=\"code-pre command\"><code>sudo vi \/etc\/redis.conf<\/code><\/pre>\n<p>Scroll to the <code>SECURITY<\/code> section and look for a commented directive that reads:<\/p>\n<div class=\"code-label \" title=\"\/etc\/redis.conf\">\/etc\/redis.conf<\/div>\n<pre class=\"code-pre \"><code># requirepass foobared\r\n<\/code><\/pre>\n<p>Uncomment it by removing the <code>#<\/code>, and change <code>foobared<\/code> to a very strong password of your choosing. Rather than make up a password yourself, you may use a tool like <code>apg<\/code> or <code>pwgen<\/code> to generate one. If you don&#8217;t want to install an application just to generate a password, though, you may use the command below.<\/p>\n<p>Note that entering this command as written will generate the same password every time. To create a password different from the one that this would generate, change the word in quotes to any other word or phrase.<\/p>\n<pre class=\"code-pre command\"><code>echo \"<span class=\"highlight\">easy-admin<\/span>\" | sha256sum<\/code><\/pre>\n<p>Though the generated password will not be pronounceable, it is a very strong and very long one, which is exactly the type of password required for Redis. After copying and pasting the output of that command as the new value for <code>requirepass<\/code>, it should read:<\/p>\n<div class=\"code-label \" title=\"\/etc\/redis.conf\">\/etc\/redis.conf<\/div>\n<pre class=\"code-pre \"><code>requirepass <span class=\"highlight\">password_copied_from_output<\/span>\r\n<\/code><\/pre>\n<p>If you prefer a shorter password, use the output of the command below instead. Again, change the word in quotes so it will not generate the same password as this one:<\/p>\n<pre class=\"code-pre command\"><code>echo \"<span class=\"highlight\">easy-admin<\/span>\" | sha1sum<\/code><\/pre>\n<p>After setting the password, save and close the file then restart Redis:<\/p>\n<pre class=\"code-pre command\"><code>sudo systemctl restart redis.service<\/code><\/pre>\n<p>To test that the password works, access the Redis command line:<\/p>\n<pre class=\"code-pre command\"><code>redis-cli<\/code><\/pre>\n<p>The following is a sequence of commands used to test whether the Redis password works. The first command tries to set a key to a value before authentication.<\/p>\n<p>127.0.0.1:6379&gt; set key1 10<\/p>\n<p>That won&#8217;t work as we have not yet been authenticated, so Redis returns an error.<\/p>\n<div class=\"secondary-code-label \" title=\"Output\">Output<\/div>\n<pre class=\"code-pre \"><code>(error) NOAUTH Authentication required.<\/code><\/pre>\n<p>The following command authenticates with the password specified in the Redis configuration file.<\/p>\n<p>127.0.0.1:6379&gt; auth your.redis.password<\/p>\n<p>Redis will acknowledge that we have been authenticated:<\/p>\n<div class=\"secondary-code-label \" title=\"Output\">Output<\/div>\n<pre class=\"code-pre \"><code>OK<\/code><\/pre>\n<p>After that, running the previous command again should be successful:<\/p>\n<p>127.0.0.1:6379&gt; set key1 10<\/p>\n<div class=\"secondary-code-label \" title=\"Output\">Output<\/div>\n<pre class=\"code-pre \"><code>OK<\/code><\/pre>\n<p>The <code>get key1<\/code> command queries Redis for the value of the new key.<\/p>\n<p>127.0.0.1:6379&gt;\u00a0 quit<\/p>\n<p>It should now be very difficult for unauthorized users to access your Redis installation. Please note, though, that without SSL or a VPN the unencrypted password will still be visible to outside parties if you\u2019re connecting to Redis remotely.<\/p>\n<p>Next, we&#8217;ll look at renaming Redis commands to further protect Redis from malicious actors.<\/p>\n<h2 id=\"step-4-\u2014-renaming-dangerous-commands\">Step 4 \u2014 Renaming Dangerous Commands<\/h2>\n<p>The other security feature built into Redis allows you to rename or completely disable certain commands that are considered dangerous. When run by unauthorized users, such commands can be used to reconfigure, destroy, or otherwise wipe your data. Some of the commands that are known to be dangerous include:<\/p>\n<ul>\n<li><code>FLUSHDB<\/code><\/li>\n<li><code>FLUSHALL<\/code><\/li>\n<li><code>KEYS<\/code><\/li>\n<li><code>PEXPIRE<\/code><\/li>\n<li><code>DEL<\/code><\/li>\n<li><code>CONFIG<\/code><\/li>\n<li><code>SHUTDOWN<\/code><\/li>\n<li><code>BGREWRITEAOF<\/code><\/li>\n<li><code>BGSAVE<\/code><\/li>\n<li><code>SAVE<\/code><\/li>\n<li><code>SPOP<\/code><\/li>\n<li><code>SREM<\/code> <code>RENAME<\/code> <code>DEBUG<\/code><\/li>\n<\/ul>\n<p>This is not a comprehensive list, but renaming or disabling all of the commands in that list is a good starting point.<\/p>\n<p>Whether you disable or rename a command is site-specific. If you know you will never use a command that can be abused, then you may disable it. Otherwise, you should rename it instead.<\/p>\n<p>Like the authentication password, renaming or disabling commands is configured in the <code>SECURITY<\/code> section of the <code>\/etc\/redis.conf<\/code> file. To enable or disable Redis commands, open the configuration file for editing one more time:<\/p>\n<pre class=\"code-pre command\"><code>sudo vi  \/etc\/redis.conf<\/code><\/pre>\n<p><span class=\"note\"><strong>NOTE<\/strong>: These are examples. You should choose to disable or rename the commands that make sense for you. You can check the commands for yourself and determine how they might be misused at <a href=\"http:\/\/redis.io\/commands\" target=\"_blank\" rel=\"noopener\">redis.io\/commands<\/a>.<\/span><\/p>\n<p>To disable or kill a command, simply rename it to an empty string, as shown below:<\/p>\n<div class=\"code-label \" title=\"\/etc\/redis.conf\">\/etc\/redis.conf<\/div>\n<pre class=\"code-pre \"><code># It is also possible to completely kill a command by renaming it into\r\n# an empty string:\r\n#\r\n<span class=\"highlight\">rename-command FLUSHDB \"\"<\/span>\r\n<span class=\"highlight\">rename-command FLUSHALL \"\"<\/span>\r\n<span class=\"highlight\">rename-command DEBUG \"\"<\/span>\r\n<\/code><\/pre>\n<p>To rename a command, give it another name like in the examples below. Renamed commands should be difficult for others to guess, but easy for you to remember:<\/p>\n<div class=\"code-label \" title=\"\/etc\/redis.conf\">\/etc\/redis.conf<\/div>\n<pre class=\"code-pre \"><code>rename-command CONFIG \"\"\r\n<span class=\"highlight\">rename-command SHUTDOWN SHUTDOWN_MENOT<\/span>\r\n<span class=\"highlight\">rename-command CONFIG ASC12_CONFIG<\/span>\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2349\" src=\"https:\/\/easy-admin.ca\/wp-content\/uploads\/2018\/08\/rename-commands-2.png\" alt=\"\" width=\"779\" height=\"494\" srcset=\"https:\/\/easy-admin.ca\/wp-content\/uploads\/2018\/08\/rename-commands-2.png 779w, https:\/\/easy-admin.ca\/wp-content\/uploads\/2018\/08\/rename-commands-2-300x190.png 300w, https:\/\/easy-admin.ca\/wp-content\/uploads\/2018\/08\/rename-commands-2-768x487.png 768w\" sizes=\"auto, (max-width: 779px) 100vw, 779px\" \/><\/p>\n<p>Save your changes and close the file, and then apply the change by restarting Redis:<\/p>\n<pre class=\"code-pre command\"><code>sudo systemctl restart redis.service<\/code><\/pre>\n<p>To test the new command, enter the Redis command line:<\/p>\n<pre class=\"code-pre command\"><code>redis-cli<\/code><\/pre>\n<p>Authenticate yourself using the password you defined earlier:<\/p>\n<p>127.0.0.1:6379&gt; auth your_redis_password<\/p>\n<div class=\"secondary-code-label \" title=\"Output\">Output<\/div>\n<pre class=\"code-pre \"><code>OK<\/code><\/pre>\n<p>Assuming that you renamed the <strong>CONFIG<\/strong> command to <strong>ASC12_CONFIG<\/strong>, attempting to use the <code>config<\/code> command should fail.<\/p>\n<p>127.0.0.1:6379&gt; config get requirepass<\/p>\n<div class=\"secondary-code-label \" title=\"Output\">Output<\/div>\n<pre class=\"code-pre \"><code>(error) ERR unknown command 'config'<\/code><\/pre>\n<p>Calling the renamed command should be successful (it&#8217;s case-insensitive):<\/p>\n<p>127.0.0.1:6379&gt; asc12_config get requirepass<\/p>\n<div class=\"secondary-code-label \" title=\"Output\">Output<\/div>\n<pre class=\"code-pre \"><code>1) \"requirepass\"\r\n2) \"your_redis_password\"<\/code><\/pre>\n<p>Finally, you can exit from <code>redis-cli<\/code>:<\/p>\n<p>127.0.0.1:6379&gt; exit<\/p>\n<p>Note that if you&#8217;re already using the Redis command line and then restart Redis, you&#8217;ll need to re-authenticate. Otherwise, you&#8217;ll get this error if you type a command:<\/p>\n<div class=\"secondary-code-label \" title=\"Output\">Output<\/div>\n<pre class=\"code-pre \"><code>NOAUTH Authentication required.<\/code><\/pre>\n<p>Regarding renaming commands, there&#8217;s a cautionary statement at the end of the <code>SECURITY<\/code> section in the <code>\/etc\/redis.conf<\/code> file, which reads:<\/p>\n<blockquote><p><code>Please note that changing the name of commands that are logged into the AOF file or transmitted to slaves may cause problems.<\/code><\/p><\/blockquote>\n<p>That means if the renamed command is not in the AOF file, or if it is but the AOF file has not been transmitted to slaves, then there should be no problem. Keep that in mind as you&#8217;re renaming commands. The best time to rename a command is when you&#8217;re not using AOF persistence or right after installation (that is, before your Redis-using application has been deployed).<\/p>\n<p>When you&#8217;re using AOF and dealing with a master-slave installation, consider this answer from the project&#8217;s GitHub issue page. The following is a reply to the author&#8217;s question:<\/p>\n<blockquote><p>The commands are logged to the AOF and replicated to the slave the same way they are sent, so if you try to replay the AOF on an instance that doesn&#8217;t have the same renaming, you may face inconsistencies as the command cannot be executed (same for slaves).<\/p><\/blockquote>\n<p>The best way to handle renaming in cases like that is to make sure that renamed commands are applied to all instances of master-slave installations.<\/p>\n<h2 id=\"step-5-\u2014-setting-data-directory-ownership-and-file-permissions\">Step 5 \u2014 Setting Data Directory Ownership and File Permissions<\/h2>\n<p>In this step, we&#8217;ll consider a couple of ownership and permissions changes you can make to improve the security profile of your Redis installation. This involves making sure that only the user that needs to access Redis has permission to read its data. That user is, by default, the <strong>redis<\/strong> user.<\/p>\n<p>You can verify this by <code>grep<\/code>-ing for the Redis data directory in a long listing of its parent directory. The command and its output are given below.<\/p>\n<pre class=\"code-pre command\"><code>ls -l \/var\/lib | grep redis<\/code><\/pre>\n<div class=\"secondary-code-label \" title=\"Output\">Output<\/div>\n<pre class=\"code-pre \"><code><span class=\"highlight\">drwxr-xr-x<\/span> 2 <span class=\"highlight\">redis   redis<\/span>   4096 Aug  6 09:32 redis<\/code><\/pre>\n<p>You can see that the Redis data directory is owned by the <strong>redis<\/strong> user, with secondary access granted to the <strong>redis<\/strong> group. This ownership setting is secure, but the folder\u2019s permissions (which are set to 755) are not. To ensure that only the Redis user has access to the folder and its contents, change the permissions setting to 770:<\/p>\n<pre class=\"code-pre command\"><code>sudo chmod 770 \/var\/lib\/redis<\/code><\/pre>\n<p>The other permission you should change is that of the Redis configuration file. By default, it has a file permission of 644 and is owned by <strong>root<\/strong>, with secondary ownership by the <strong>root<\/strong> group:<\/p>\n<pre class=\"code-pre command\"><code>ls -l \/etc\/redis.conf<\/code><\/pre>\n<div class=\"secondary-code-label \" title=\"Output\">Output<\/div>\n<pre class=\"code-pre \"><code><span class=\"highlight\">-rw-r--r--<\/span> 1 <span class=\"highlight\">root root<\/span> 30176 Aug 10  2018 \/etc\/redis.conf<\/code><\/pre>\n<p>That permission (644) is world-readable. This presents a security issue as the configuration file contains the unencrypted password you configured in Step 4, meaning we need to change the configuration file\u2019s ownership and permissions. Ideally, it should be owned by the <strong>redis<\/strong> user, with secondary ownership by the <strong>redis<\/strong> group. To do that, run the following command:<\/p>\n<pre class=\"code-pre command\"><code>sudo chown redis:redis \/etc\/redis.conf<\/code><\/pre>\n<p>Then change the permissions so that only the owner of the file can read and\/or write to it:<\/p>\n<pre class=\"code-pre command\"><code>sudo chmod 660 \/etc\/redis.conf<\/code><\/pre>\n<p>You may verify the new ownership and permissions using:<\/p>\n<pre class=\"code-pre command\"><code>ls -l \/etc\/redis.conf<\/code><\/pre>\n<div class=\"secondary-code-label \" title=\"Output\">Output<\/div>\n<pre class=\"code-pre \"><code>total 40\r\n<span class=\"highlight\">-rw-------<\/span> 1 <span class=\"highlight\">redis redis<\/span> 29716 Sep 22 18:32 \/etc\/redis.conf<\/code><\/pre>\n<p>Finally, restart Redis:<\/p>\n<pre class=\"code-pre command\"><code>sudo systemctl restart redis.service<\/code><\/pre>\n<p>Check the status of redis.service<\/p>\n<p>systemctl status redis.service<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2351\" src=\"https:\/\/easy-admin.ca\/wp-content\/uploads\/2018\/08\/redis-status.png\" alt=\"\" width=\"886\" height=\"326\" srcset=\"https:\/\/easy-admin.ca\/wp-content\/uploads\/2018\/08\/redis-status.png 886w, https:\/\/easy-admin.ca\/wp-content\/uploads\/2018\/08\/redis-status-300x110.png 300w, https:\/\/easy-admin.ca\/wp-content\/uploads\/2018\/08\/redis-status-768x283.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><\/p>\n<p>Congratulations, your Redis installation should now be more secure!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Redis is an open-source, in-memory data structure store which excels at caching. A non-relational database, Redis is known for its flexibility, performance, scalability, and wide language support. Redis was designed for use by trusted clients in a trusted environment, and has no robust security features of its own. Redis does, however, have a few security &hellip; <a href=\"https:\/\/easy-admin.ca\/index.php\/2018\/08\/10\/install-redis-on-centos-7\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Install REDIS on Centos 7<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":2344,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2343","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-general"],"_links":{"self":[{"href":"https:\/\/easy-admin.ca\/index.php\/wp-json\/wp\/v2\/posts\/2343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/easy-admin.ca\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/easy-admin.ca\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/easy-admin.ca\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/easy-admin.ca\/index.php\/wp-json\/wp\/v2\/comments?post=2343"}],"version-history":[{"count":0,"href":"https:\/\/easy-admin.ca\/index.php\/wp-json\/wp\/v2\/posts\/2343\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/easy-admin.ca\/index.php\/wp-json\/wp\/v2\/media\/2344"}],"wp:attachment":[{"href":"https:\/\/easy-admin.ca\/index.php\/wp-json\/wp\/v2\/media?parent=2343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/easy-admin.ca\/index.php\/wp-json\/wp\/v2\/categories?post=2343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/easy-admin.ca\/index.php\/wp-json\/wp\/v2\/tags?post=2343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}