Skip to content
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

Conf seems to be user specific i.e. values set by one OS user seems to be not accessible by others regardless of permissions. #191

Open
khan-zia opened this issue Feb 4, 2024 · 1 comment

Comments

@khan-zia
Copy link

khan-zia commented Feb 4, 2024

First, thanks for the wonderful open source work.

Secondly, the following observation currently only applies to Linux. This is because I have not tested or tried to reproduce this behavior on other OSes yet.

I have been using Conf and recently I had a use case in which I had to start a node.js app on OS boot. On Linux, you usually do a systemctl service. In my use case, I wanted my node.js app to start for all users therefore, systemctl has to start the service as a root user. The config values set by the other user via the app were no longer accessible to the app when it was run by root. This means that this is not a permissions related issue and perhaps a planned user separation implemented by Conf?

Is there a way to get around this and have conf set values system-wide?

@khan-zia
Copy link
Author

khan-zia commented Feb 8, 2024

I figured this out later. The problem is indeed not with permissions but rather the config file not existing at all for the root user when running the app in the background. Basically, this package conf by default uses user's home directory to create and store configuration file. If the user changes, obviously the home directory changes, hence the unexpected loss of config for your app that might need to run in the background by another user.

The simplest fix for this is that when instantiating conf, you can pass the cwd option to the constructor which will then use your specified location for storing configuration. If your app has a use case like mine, where the config might be created when the app is set up by a human/another user and then your app has to run as a daemon most likely by user root or another special user, your best bet is to specify a system wide config directory that's available to all users via the cwd option. In linux, a standard system-wide config location is the /etc folder.

Remember that your app running as a root means you will have to deal with the sudo shenanigans. If you specify a location at /etc for the cwd option, then all users will either need to be sudoers or have to use sudo on each operation of your app in which conf writes to the configuration file. Otherwise, conf will fail with permission denied error.

P.S
@sindresorhus Perhaps this should be mentioned in the Readme? Or at least some more details about the default location of the config file used by conf.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant