-
Notifications
You must be signed in to change notification settings - Fork 417
Running process as another user causes permission denied error when setting up database connection. #910
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Thanks, I have suffered totally same issue where I'm using Through I found this is an expected situation documented in supervisord docs, it may not only specify to |
Any news how to fix this? I'm having the same issue with docker, nginx, supervisor and asyncpg and the version is the 0.26.0 |
@tarsil I believe I set |
@eseglem home as empty string? Because if not, I tried and it doesn't work |
@tarsil yeah, effectively unset it so asyncpg doesn't try to look in it. |
@eseglem did you add it to the program? If yes, I will give it a try tomorrow and let you know :) |
@eseglem under program it still fails. |
Setting HOME to a different path inside Dockerfile fixed this problem for us. Our celery worker was running as nobody user but HOME was set to /root. |
@eseglem after 300 tries, your solution worked :) |
I also faced the issue. For me it was a big surprise.
Also take into consideration docker volumes if you use docker. |
I faced this issue as well. In my case the container was missing the HOME path to be set to the directory in which the apps is contained. This changes where the application looks for ssl keys (such as postgresql.key). Default Behavior: When the application inside the container runs and tries to access /root/.postgresql/postgresql.key, it encounters a "Permission denied" error because it likely does not have the necessary permissions to access files in /root/. Custom HOME Directory: By setting the HOME environment variable to /home/app_name, you are telling the operating system and your application to treat /home/app_name as the home directory. As a result, the application will now look for the SSL key files in /home/app_name/.postgresql/ instead of /root/.postgresql/. |
the issue with a local PostgreSQL install?: Both RDS and Docker. Not a PG related issue.
uvloop?: Untested, but shouldn't be relevant.
And I ran into this issue when upgrading from 0.23.0 to 0.25.0, but I believe it was introduced in 0.25.0 based on my reading of the git history.
I am using supervisord to run an app as a different user. When it gets to https://github.com/MagicStack/asyncpg/blob/master/asyncpg/connect_utils.py#L542 when setting up a connection. That resolves the path to
/root/.postgresql/postgresql.key
and results in an a Permission denied error when it calls.exists()
on a file within/root/
as a non root user.I believe this is because http://supervisord.org/subprocess.html#subprocess-environment doesn't change
HOME
in the path, and pathlib still seesHOME="/root"
. So I will be tinkering with unsetting that.Even if changing the environment fixes my issue, it may be worth adding exception handling for when those paths resolve to a directory the user running asyncpg cannot access.
The text was updated successfully, but these errors were encountered: