# 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
我想将用户 id 和组 id 从默认 (uid=) 1000(和 gid=1000)更改为(uid=) 5000(和 gid=5000),以便访问使用 ext4 或类似功能系统格式化的移动驱动器使用 uid 和 gid)都没有问题,如果文件和档案具有相同的用户 id 或组 id 5000,则无论另一台计算机或操作系统是否向此写入数据(如果所有自己的用户都有,这可以在计算机之间轻松共享文件相同的uid和gid)。
首先,我创建了一个额外的用户,以新用户身份登录,在终端中更改sudo su -为 root,然后我使用了命令
您可以在 中更改它
/etc/passwd
,/etc/group
或者/etc/shadow
使用上述首选方法之一。但是 - 最重要的是 - 您必须更改属于用户的所有文件的所有权。例如,如果旧用户 id 是 1000,新用户 id 是 5000:
组 ID 也是如此(如果您也更改它)。
问题是,就像您提到的那样,您无法在用户登录会话时更改用户的 UID。您必须使用另一个用户帐户才能继续。
但是您不必创建新用户帐户,将其提升为管理员,注销,登录到新的管理员帐户,更改您的主帐户的 UID,注销,登录到您的主帐户然后删除新的管理员用户只需更改您的UID。;)
您可以启动到恢复模式(这是您启动计算机时出现的一个选项,或者在 BIOS 消息完成后立即按住 shift;ESC在运行 OEM-Ubuntu 的戴尔计算机上使用)。这将使您登录根会话。以 root而不是您通常的用户帐户登录,您将能够修改您的 UID。
因为恢复模式仅在命令行界面中有效,一旦登录到 root 会话,您将必须:
使用BubbaJ 的说明以读写模式重新挂载根文件系统:
mount -o remount,rw /
.使用Luis Alvarado 的命令:
usermod -u NEW_UID your_username
.reboot
),以便您可以在正常模式下启动。基于@AlexandreP 的完整解决方案。和@ddeimeke + 官方文档。无需重新启动。
Debian/Ubuntu 的策略是,如果有
jim
用户 ID的用户1001
,也有一个组jim
ID的组1001
。此解决方案还会更新这些组 ID。启用 root 帐户:
以 root 身份登录并使用提供的用户名和旧/新 UID 运行它:
$username
禁用根帐户:
如果您转到控制台并输入:
usermod --help
您将获得以下参数之一:-u, --uid UID 用户帐户的新 UID
因此,如果您想更改用户 cyrex 的 UID,请执行以下操作:
usermod -u 1000 cyrex
这会将 cyrex 的 uid 从之前的任何值更改为 1000
如果你想直观地做到这一点,那么这样做:
去
从列表中选择自己,然后单击高级设置
UID 位于该窗口的末尾。
使用 KDE:在更改高级用户设置菜单中:
从另一个用户更改不适用于默认用户 1000。
您必须手动执行此操作-我的经验
首先,您需要以 root 身份登录,至少需要一段时间,所以让我们来实现这一点:
重启,ctrl + alt + f1 切换到控制台,以root身份登录,执行以下操作(将自动处理主目录中的所有权):
对于您在主目录以外的地方的文件,请执行以下操作:
如果需要,删除并锁定 root 的密码。(我倾向于保留它):
我按照ddeimeke 的说明进行了以下更改:
sudo su
/etc/shadow
我在其他答案中看到过,您应该启动以恢复或以
root
. 我的是全新的 Ubuntu 14 安装,所以我愿意测试它是否可以在不以root
. 我也在通过 SSH 在 EC2 实例上执行此操作。总结一下,至少从 Ubuntu 20.04 开始需要什么(为了保持能够使用 Automounting,需要更改扩展 ACL 权限):
我想将用户 id 和组 id 从默认 (uid=) 1000(和 gid=1000)更改为(uid=) 5000(和 gid=5000),以便访问使用 ext4 或类似功能系统格式化的移动驱动器使用 uid 和 gid)都没有问题,如果文件和档案具有相同的用户 id 或组 id 5000,则无论另一台计算机或操作系统是否向此写入数据(如果所有自己的用户都有,这可以在计算机之间轻松共享文件相同的uid和gid)。
首先,我创建了一个额外的用户,以新用户身份登录,在终端中更改
sudo su -
为 root,然后我使用了命令用于更改用户 ID 和
用于更改组 ID。(注意:这会更改所有已安装设备的权限。如果不需要,请卸载所有不需要的设备或将部分中的命令缩小
find /
到find /home/<user>
或其他。)在 Fedora 中这有效,但在 Ubuntu 中却完全没有。例如,自动挂载不起作用。然后我读到一个必须修复扩展的 ACL 权限,否则自动安装中断之类的事情(如果没有用户已经拥有此 UID 和 GID,可能不会出现 ACL 权限的问题,但在我的情况下,这是问题所在)。自 Ubuntu 14.04 和 14.10 起,似乎需要更改扩展 ACL 权限。
这些命令可以再次自动挂载:
,它将UID权限设置为'media'中自己的文件夹和
,这会删除旧 UID 对自己的用户文件夹的权限(是的,再次启动自动挂载工作不需要此命令,但它确保具有旧 UID 的另一个用户也无法访问媒体)。
顺便说一句:一位用户说,自 Ubuntu 18.04 以来,usermod 已经更改了主文件夹中的所有权限,但对于自动挂载来说,至少在 Ubuntu 20.04.4 之前这似乎还不够。
大约一个月以来我从哪里得到它并对其进行了实际测试的信息来源: 答案包含我解释的所有内容,但有点混乱,只有一个建议来修复扩展 ACL 权限以保持能够自动安装。
PS:如果有人问我为什么没有将这个问题作为解决方案发布,我不得不说,我在这个网站上没有足够的“业力”来做这件事。所以请投票给这个答案。