在系统范围内更改用户和组 ID(包括文件系统属性)?

sda*_*aau 2 filesystems users permissions group chown

这个问题可能与Linux的:模拟/后安装的屏蔽用户所有权“外部”分区-堆栈溢出

我通常使用 Ubuntu(目前是 11.04)作为我的桌面操作系统;假设在那里,我是myselfuid=1000的用户,是myselfgid=1000的组的一部分;所以基本上主目录权限如下所示:

> stat ~
  File: `/home/myself'
...
Access: (0755/drwxr-xr-x)  Uid: ( 1000/   myself)   Gid: (  1000/   myself)
Run Code Online (Sandbox Code Playgroud)

现在,在同一台机器上,我有时需要通过 LiveUSB (Live-CD) 启动 OpenSuse(当前为 11.2)。所有这些对我来说都很好,除了 Live-CD 环境中的默认用户是linuxuid=999,属于usersgid=100的组;所以主目录权限如下所示:

> stat ~
  File: `/home/linux'
...
Access: (0755/drwxr-xr-x)  Uid: ( 999/   linux)   Gid: (  100/   myself)
Run Code Online (Sandbox Code Playgroud)

 

因此,基本上,当我在实时 OpenSUSE(其默认用户为 999:100)下安装我的 Ubuntu 驱动器(由 1000:1000 所有)时,我无法像往常一样访问它们,即:

linux@linux:~> touch /media/extdrive/xxx
touch: cannot touch `/media/extdrive/xxx': Permission denied
Run Code Online (Sandbox Code Playgroud)

 

所以,我想我应该尝试更改linux:usersOpenSUSE 机器上的默认 uid/gud ,所以我尝试了这个:

> sudo /usr/sbin/usermod -u 1000 linux
usermod: Account `linux' is currently in use.

> id linux
uid=999(linux) gid=100(users) groups=100(users),33(video)

# so if that fails.... change directly from /etc/passwd? 
> sudo nano /etc/passwd

> id linux
uid=1000(linux) gid=100(users) groups=100(users),33(video)
Run Code Online (Sandbox Code Playgroud)

...并且只是更改了 uid,使我可以很好地访问 Ubuntu 驱动器 - 但是,现在我无法访问以前拥有的 OpenSUSE 内容linux:users

> sudo nano /etc/fstab
sudo: unknown uid: 999
Run Code Online (Sandbox Code Playgroud)

...所以,事实证明,直接更改 /etc/passwd 是个主意 :) 这里的解决方案似乎是先降到 root shell,执行usermod命令,重新启动 - 现在我从 OpenSUSE 环境开始:

linux@linux:~> stat ~
Access: (0755/drwxr-xr-x)  Uid: ( 1000/   linux)   Gid: (  100/   users)
Run Code Online (Sandbox Code Playgroud)

这让我 - 在大多数情况下 - 可以像往常一样访问 Ubuntu 文件系统/驱动器;同时还可以正常访问 OpenSUSE 中默认用户拥有的任何内容。

 

但是,为了安全起见,我还想更改组 ID。这样做的推荐方法是什么(如果我在上面的讨论中没有做对,推荐的方法是更改​​ uid )?

非常感谢您提供任何答案,
干杯!

Kev*_*vin 6

如果我正确理解您的问题,您可以使用find's-gid条件:

find /media/extdrive -gid 100 | sudo xargs chown myself:myself 
Run Code Online (Sandbox Code Playgroud)

或者如果你喜欢find-exec

sudo find /media/extdrive -gid 100 -exec chown myself:myself {} +
Run Code Online (Sandbox Code Playgroud)

或者,查看chown的联机帮助页,它有一个--from您可能会觉得有用的选项:

sudo chown -R myself:myself --from=:100
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅相应的联机帮助页。

  • 查看联机帮助页,如果您使用 `usermod` 来更改用户的 uid 或 gid,它只会自动更改受影响用户主目录中的文件所有权,而在那里之外并使用 `groupmod`,您必须手动更改 id。 (2认同)