我正在尝试在我的 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。但问题很奇怪。