5

I have been running redis which I built from source for several months, but I switched to using a package manger for it today (running on Debian). It ran fine until I changed the working directory to /home/redis/server. Now when starting it as a service using sudo service redis-server start, I get an error, and the following is added to the redis log:

Can't chdir to '/home/redis/server': Permission denied

Running getfacl recursively on the redis directory returns

# file: .
# owner: redis
# group: redis
user::rwx
group::rwx
other::rwx

# file: server
# owner: redis
# group: redis
user::rwx
group::rwx
other::rwx

# file: server/dump.rdb
# owner: redis
# group: redis
user::rwx
group::rwx
other::rwx

If I su to redis and run it manually, using /usr/bin/redis-server /etc/redis/redis.conf, it works correctly, so it only happens when trying to use the included init.d script.

2 Answers 2

10

It turns out that the init script included with Redis isn't actually used, and instead it uses /etc/systemd/system/redis.service. There are a number of security restrictions in this file, including ProtectHome=yes and limiting the directories that can be written to. I have modified this file to comment out ProtectHome=yes and to add a line ReadWriteDirectories=-/home/redis/server, and it now works correctly.

After this, run systemctl daemon-reload to reload changes before running service start redis-server.

0

You should make sure, that the redis service is started by init.d with the redis user context.

Edit /etc/init.d/redis-server and add

--chuid redis:redis

where start-stop-daemon is called. Since su to redis is working, this should fix the error.

5
  • --chuid is already in there, by default, though I did try chmoding the directory to 777 and that still didn't resolve it.
    – JackW
    Sep 7, 2016 at 17:10
  • Since you don't get the error if you start redis-server as redis (user), I would try to start the server with: su redis -c 'redis-start-command' in the init.d file. This is not the best solution, but might work.
    – pskiebe
    Sep 8, 2016 at 8:56
  • Also check if redis-server ist really running as redis (user) ps u pid-of-redis-server or ps aux | grep redis-server
    – pskiebe
    Sep 8, 2016 at 9:05
  • For some reason, running sudo su redis -c "/usr/bin/redis-server /etc/redis/redis.conf" in the terminal fails silently (nothing logged), and only seems to work if I actually su to redis, then run it manually. Redis is definitely running as user redis.
    – JackW
    Sep 8, 2016 at 15:52
  • Actually, adding -s /bin/bash to the end of the command works, but I'd still like to be able to stop redis if possible, which manually running it wouldn't allow I think.
    – JackW
    Sep 8, 2016 at 15:59

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .