su:无法设置用户 ID:参数无效

su:无法设置用户 ID:参数无效

我正在尝试在我的 Linux SUSE SLSE12 机器下创建一个新用户并进入该用户。我是那台机器的root用户。命令集:

> whoami
root
> useradd -u 123456 new_user
> id new_user
uid=123456(new_user) gid=100(users)
> su new_user
su: cannot set user id: Invalid argument

有什么问题吗su?为什么我不能切换到new_user?我su - new_user也尝试过并得到了相同的结果。我还设置了new_user使用该命令的密码passwd,但它仍然不起作用。怎么解决呢?

答案1

不是答案,而是更详细的评论形式。

su失败时会产生此错误消息setuid

static void
change_identity (const struct passwd *pw)
{
#ifdef HAVE_INITGROUPS
  errno = 0;
  if (initgroups (pw->pw_name, pw->pw_gid) == -1)
    error (EXIT_CANCELED, errno, _("cannot set groups"));
  endgrent ();
#endif
  if (setgid (pw->pw_gid))
    error (EXIT_CANCELED, errno, _("cannot set group id"));
  if (setuid (pw->pw_uid))
    error (EXIT_CANCELED, errno, _("cannot set user id"));
}

根据man 3 setuid

如果满足以下一项或多项条件,setuid() 函数将失败,返回 -1,并将 errno 设置为相应的值:

EINVAL uid 参数的值无效且不受实现支持。

EPERM 该进程没有适当的权限,并且 uid 与真实用户 ID 或保存的设置用户 ID 不匹配。

在这种情况下,它是EINVAL(无效参数)

正如 @MC68020 所建议的,可能仍然存在 65535 的限制,因此可能值得尝试较低的 UID。但问题很奇怪。

相关内容