(这个问题可能与Linux:在安装“外部”分区时模拟/屏蔽用户所有权? - 堆栈溢出)
我通常使用 Ubuntu(当前为 11.04)作为我的桌面操作系统;假设我是用户myself
uid=1000,属于该组myself
gid=1000;所以基本上主目录权限如下所示:
> stat ~
File: `/home/myself'
...
Access: (0755/drwxr-xr-x) Uid: ( 1000/ myself) Gid: ( 1000/ myself)
现在,在同一台机器上,我有时需要通过 LiveUSB (Live-CD) 启动 OpenSuse(当前为 11.2)。所有这些对我来说都很好,除了 Live-CD 环境中的默认用户是linux
uid=999,属于该组users
gid=100;所以主目录权限如下所示:
> stat ~
File: `/home/linux'
...
Access: (0755/drwxr-xr-x) Uid: ( 999/ linux) Gid: ( 100/ myself)
因此,基本上,当我在实时 OpenSUSE(其默认用户为 999:100)下安装我的 Ubuntu 驱动器(由 1000:1000 拥有)时,我无法像往常一样访问它们,即:
linux@linux:~> touch /media/extdrive/xxx
touch: cannot touch `/media/extdrive/xxx': Permission denied
所以,我想我应该尝试更改linux:users
OpenSUSE 机器上的默认 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)
...只需更改 uid,就可以很好地访问 Ubuntu 驱动器 - 但是,现在我无法访问以前拥有的 OpenSUSE 内容linux:users
:
> sudo nano /etc/fstab
sudo: unknown uid: 999
...所以,事实证明,坏的直接更改 /etc/passwd 的想法:) 这里的解决方案似乎是先进入 root shell,执行命令usermod
,重新启动 - 现在我已经从 OpenSUSE 环境中启动了:
linux@linux:~> stat ~
Access: (0755/drwxr-xr-x) Uid: ( 1000/ linux) Gid: ( 100/ users)
这使得我在很大程度上可以像往常一样访问 Ubuntu 文件系统/驱动器;同时还可以正常访问 OpenSUSE 中默认用户拥有的任何内容。
不过,为了安全起见,我还想更改组ID。推荐的执行此操作的方法是什么(如果我在上面的讨论中没有正确执行,那么推荐的更改 uid 的方法是什么)?
非常感谢您的回答,
干杯!
答案1
如果我正确理解你的问题,你可以使用find
的-gid
条件:
find /media/extdrive -gid 100 | sudo xargs chown myself:myself
或者如果您愿意的find
话-exec
:
sudo find /media/extdrive -gid 100 -exec chown myself:myself {} +
或者,查看 的chown
联机帮助页,它有一个--from
您可能会觉得有用的选项:
sudo chown -R myself:myself --from=:100
有关详细信息,请参阅相应的联机帮助页。