fix: 修复服务用户 shell 导致无法执行 sudo 重启的问题
问题原因: - 服务用户 sub2api 的 shell 被设置为 /bin/false - 导致无法执行 sudo systemctl restart 命令 - 安装/升级后服务无法自动重启 修复内容: - 新安装时使用 /bin/sh 替代 /bin/false - 升级时自动检测并修复旧版本用户的 shell 配置 - 修复失败时给出警告和手动修复命令,不中断安装流程
This commit is contained in:
@@ -483,9 +483,24 @@ download_and_extract() {
|
||||
create_user() {
|
||||
if id "$SERVICE_USER" &>/dev/null; then
|
||||
print_info "$(msg 'user_exists'): $SERVICE_USER"
|
||||
# Fix: Ensure existing user has /bin/sh shell for sudo to work
|
||||
# Previous versions used /bin/false which prevents sudo execution
|
||||
local current_shell
|
||||
current_shell=$(getent passwd "$SERVICE_USER" 2>/dev/null | cut -d: -f7)
|
||||
if [ "$current_shell" = "/bin/false" ] || [ "$current_shell" = "/sbin/nologin" ]; then
|
||||
print_info "Fixing user shell for sudo compatibility..."
|
||||
if usermod -s /bin/sh "$SERVICE_USER" 2>/dev/null; then
|
||||
print_success "User shell updated to /bin/sh"
|
||||
else
|
||||
print_warning "Failed to update user shell. Service restart may not work automatically."
|
||||
print_warning "Manual fix: sudo usermod -s /bin/sh $SERVICE_USER"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
print_info "$(msg 'creating_user') $SERVICE_USER..."
|
||||
useradd -r -s /bin/false -d "$INSTALL_DIR" "$SERVICE_USER"
|
||||
# Use /bin/sh instead of /bin/false to allow sudo execution
|
||||
# The user still cannot login interactively (no password set)
|
||||
useradd -r -s /bin/sh -d "$INSTALL_DIR" "$SERVICE_USER"
|
||||
print_success "$(msg 'user_created')"
|
||||
fi
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user