如何更改自己的用户ID?


49

我的系统上只有一个用户。如何从默认值1000更改其用户ID?

如果需要采取其他步骤以避免在典型的桌面安装上中断登录过程,则应将其作为答案的一部分。


5
出于好奇,更改用户ID的原因是什么?
Olivier Lalonde 2010年

14
如果您通常通过NFS与其他系统交换数据,或者只是通过某种复制方法来保留UID,那么如果您在整个系统中对相同的用户名使用相同的UID,则将很有帮助。
若奥·平托

João说对了。特别是,我希望将UID与Mac OS X中的用户进行匹配,以使共享文件系统具有跨操作系统的预期权限。
ændrük

1
当前版本的Nethack(3.6.0)会将包含当前uid的游戏保存在文件名中。如果要在计算机之间同步保存游戏,则需要匹配uid。(使用符号链接是不切实际的)
乔纳森·哈特利

Answers:


27

问题是,就像您提到的那样,登录会话时无法更改用户的UID。您必须使用另一个用户帐户才能继续。

但是您不必创建新的用户帐户,将其提升为管理员,注销,登录到新的管理员帐户,更改主帐户的UID,注销,登录到主帐户然后删除新的管理员用户只需更改您的UID。;)

您可以启动进入恢复模式(启动计算机时会出现此选项,或者在BIOS消息完成后立即按住Shift键;ESC在运行OEM-Ubuntu的Dell计算机上使用)。这将使您登录到根会话。以root 身份而不是通常的用户帐户身份登录后,您将能够修改UID。

由于恢复模式仅适用于命令行界面,因此登录到根会话后,您将必须:

  1. 使用BubbaJ的说明以读写模式重新安装根文件系统mount -o remount,rw /

  2. 使用Luis Alvarado的命令usermod -u NEW_UID your_username

  3. 按照ddeimeke的说明更新文件权限。
  4. 然后,重新启动计算机(reboot),以便可以在正常模式下启动。

1
在Ubuntu 14.04上不起作用。完成usermod -u NEW_UID your_username和之后find / -uid 1000 -exec chown -h 5000 '{}' \+,重新引导将导致仅猜测会话GUI登录。

也许家庭中的隐藏文件没有正确更改?您在家中使用加密吗?
2014年

您是否希望检查自己的/etc/login.defs/etc/adduser.conf文件,是否已更改了那些配置文件中提供的策略之外的uid。超出策略限制的用户不会显示在登录循环中,但是您可以更改策略。看到这个答案
K Markey

usermod: user user_name is currently used by process 1118 @Alexandre P.
alper

54

你可以改变它/etc/passwd/etc/group/etc/shadow或你使用上面的首选possibilties之一。但是-最重要-您必须更改属于该用户的所有文件的所有权。

例如,如果旧的用户ID是1000,新的用户ID是5000:

find / -uid 1000 -exec chown -h 5000 {} +

与组ID相同(如果您也更改的话)。

find / -gid 1000 -exec chgrp -h 5000 {} +

8
这是非常重要的一点。如果您不遵循其他答案中给出的技术,那么很多事情都会崩溃。
poolie 2010年

4
我刚刚了解到应该更好地使用它sudo find / -xdev -uid 1000 -exec chown 5000 '{}' \+,否则应该包括装入的数据(in /mnt,这可能是不希望的)和文件,最好不要在in /proc和中弄乱/dev。看到这篇文章
Sebastian

2
这不是一个好主意。考虑到/ home在不同文件系统上的情况,您甚至都不会更改自己文件的所有权。
ddeimeke

在这个答案上,您应该在编辑/ etc中的文件之前更改组和uid权限,对吗?
MrDaniel 2012年

没关系,您先做什么。
ddeimeke 2012年

25

基于@AlexandreP的完整解决方案。和@ddeimeke +官方文档。无需重启。

Debian / Ubuntu策略是,如果有一个jim具有用户ID的用户1001,那么也会有一个jim具有组ID的组1001。此解决方案还更新了这些组ID。

  1. 启用根帐户

    sudo passwd root
    
  2. 如果用户已登录,则先注销(也在虚拟终端上)
  3. 转到VT1: Ctrl-Alt-F1
  4. 以root用户身份登录,并使用提供的用户名和旧/新UID来运行它:

    # put the information we need in variables
    username=...
    old_uid=`id -u $username`  # looks up current (old) uid
    new_uid=...
    
    # update the user ID and group ID for $username
    usermod -u $new_uid $username
    groupmod -g $new_uid $username
    
    # update the file ownerships
    # NB: you cannot combine the next two chowns, or files where 
    # only the uid xor the gid matches won't be updated  
    chown -Rhc --from=$old_uid $new_uid /    # change the user IDs
    chown -Rhc --from=:$old_uid :$new_uid /  # change the group IDs
    
  5. 登出
  6. 登录为 $username
  7. 禁用根帐户

    sudo passwd -dl root
    

不必启用root帐户;只需使用恢复模式
ændrük

2
这应该比重新启动更快,这就是我发布它的原因。
l0b0 2012年

3
在Ubuntu 14.04和14.10中,您还需要在/ media中修复扩展的ACL权限,否则自动挂载(在Nautilus / Nemo中)会因保留旧的UID而中断。 sudo setfacl -m "u:<NEWUID>:r-x" /media/<USERNAME> sudo setfacl -x "u:<OLDUID>" /media/<USERNAME>
richud.com 2014年

这对我来说就像一种魅力。不过,只需更改uid。
chmike

与使用“恢复模式”相比,启用root帐户对我来说听起来更容易(且更不可怕)。
乔纳森·哈特利

7

如果您进入控制台并输入::usermod --help您将得到一个参数,说:

-u,--uid UID用户帐户的新UID

因此,如果您想更改用户cyrex的UID,请执行以下操作:

usermod -u 1000 cyrex

会将cyrex的uid从之前的任何值更改为1000

如果您想以视觉方式进行操作,请执行以下操作:

系统->管理->用户和组

从列表中选择自己,然后单击“高级设置”

UID在该窗口的末尾。


1
我尝试了您建议的图形方法,但是有一条消息说“用户登录时不能更改用户ID”。你测试过这种方法了吗?
ændrük

2
呵呵,那是真的。我尝试了另一个帐户。您需要通过root或任何其他管理员帐户登录。然后执行图形方式。抱歉
路易斯·阿尔瓦拉多

2
  • 转到系统>>管理>>用户和组

替代文字

  • 单击高级设置,然后转到底部的高级选项卡,您将看到您的用户ID。
  • 更改它,然后单击确定。
    替代文字

1
我应该忽略屏幕快照中的警告:“用户登录时无法更改用户ID。”?
ændrük

您必须从另一个用户帐户更改它才能摆脱此警告。
karthick87

7
我的问题是“如何更改自己的用户ID?”。如果您希望答案是我应该创建一个新用户来编辑该值,则应编辑答案以表明是这样。
ændrük

0

使用KDE:在“更改高级用户设置”菜单中:

从另一个用户更改后,默认用户1000无效。

您必须手动执行-我的经验


0

首先,您至少需要一段时间才能以root用户身份登录,因此让我们实现这一点:

sudo passwd root

重新启动,按ctrl + alt + f1切换到控制台,以root用户身份登录,然后执行以下操作(home dir中的所有权将自动处理):

groupmod --gid NEWGID username
usermod  --uid NEWUID username 

对于除主目录以外的其他位置的文件,请执行以下操作:

sudo chown -R username:username /path/to/files

如果需要,请删除并锁定root的密码。(我倾向于保留它):

passwd -dl root

0

我按照ddeimeke的说明进行了以下更改:

  1. 我没有注销,而是 sudo su
  2. 我没碰 /etc/shadow

在其他答案中,我已经看到它提到您应该启动以进行恢复或以身份登录root。我的是Ubuntu 14的全新安装,所以我愿意测试它是否可以不以as身份登录而工作root。我也在SSH上的EC2实例上执行此操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.