3

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.

6

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.

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.

  • --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 '16 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 '16 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 '16 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 '16 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 '16 at 15:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.