我有一个应用程序,我想在系统启动时作为服务运行,并且该应用程序应该以特定用户身份运行(该应用程序是阿帕奇卡拉夫)。我已经完成了所有这些设置,但是我为此使用的用户有密码,因此每次启动服务时,都必须输入该用户的密码。
/etc/passwd
我当前有一个用户,在和中有以下条目/etc/shadow
:
# /etc/passwd
karaf-test-user:x:1002:1002::/home/karaf-test-user:/usr/sbin/nologin
# /etc/shadow
karaf-test-user::15659:0:99999:7:::
据我所知,该用户没有设置密码,无法登录,但有一个主目录(这是应用程序所必需的)。但是,当我输入:
/etc/init.d/karaf-service start
我被提示输入该用户的密码。我该如何避免这种情况?我该如何修改此用户以使其此时不需要密码?我发现这个答案,但我觉得这很不靠谱。这真的是唯一的方法吗?有什么最佳实践值得遵循吗?
我在 Ubuntu 12.04.1 上运行。
答案1
我决定的方法是创建一个带密码的专用用户,但始终以 root 身份管理服务,这样就不需要密码了su
。为了确保安全,我创建了一个组karaf-admins
并向中添加了以下条目sudoers
:
%${KARAF_ADMINS} ALL=NOPASSWD: /etc/init.d/karaf-service
这样该组的成员就可以像 root 一样运行命令,sudo /etc/init.d/karaf-service start
而无需输入密码。karaf-service
脚本本身将切换到我设置的专用用户。只要karaf-admins
不允许用户编辑服务脚本或符号链接(他们不应该这样做),这绝对是安全的。