在系統範圍內更改使用者和組 ID(包括文件系統屬性)?
(這個問題可能與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)?
非常感謝您的任何答案,
乾杯!
如果我正確理解您的問題,您可以使用
find
’-gid
條件:find /media/extdrive -gid 100 | sudo xargs chown myself:myself
或者,如果您更喜歡
find
’s-exec
:sudo find /media/extdrive -gid 100 -exec chown myself:myself {} +
或者,查看
chown
的聯機幫助頁,它有一個--from
您可能會覺得有用的選項:sudo chown -R myself:myself --from=:100
有關詳細資訊,請參閱相應的聯機幫助頁。