描述
- groupmod命令用於修改系統上的組定義。
- groupmod命令通過更改組數據庫(the group database)里的相關條目來修改指定的組。
語法
- groupmod [選項] GROUP
選項列表
選項(常用的已加粗) | 說明 |
-g, --gid GID | 給群組指定一個新的GID,即修改組ID。(類似groupadd,-g可和-o選項一起使用,指定一個已存在的GID給目標組) 注意:1.將更新將該組作為主組的用戶,且保留該組繼續作為用戶的主組。 2.任何具有舊組ID且必須繼續屬於組的文件,都必須手動更改其組ID。 |
-n, --new-name NEW_GROUP | 指定要更改的組名 |
-o, --non-unique | 需和-g選項一起使用,允許為指定的組添加一個已存在的GID,即共享一個GID,使該GID不再具備唯一性。 |
-p, --password PASSWORD | 指定組密碼。 |
-R, --root CHROOT_DIR | 指定在CHROOT_DIR(改變后的根目錄)下更改生效以及使用CHROOT_DIR目錄下的配置文件。 |
退出值
EXIT VALUES | 說明 |
0 | 執行成功 |
2 |
命令語法錯誤 |
3 |
無效的選項參數 |
4 |
指定的組不存在 |
9 |
組名已被使用。 |
10 |
無法更新組文件 |
文件
- /etc/group:組賬戶文件。
- /etc/gshadow:安全的組賬戶文件
- /etc/login.defs:創建用戶和組的定義文件
- /etc/passwd:用戶賬戶信息文件
實例
-
使用-o和-g選項指定一個已存在的GID給目標組
1 [root@pople ~]# id anna && id test 2 uid=1002(anna) gid=1002(anna) groups=1002(anna) 3 uid=1003(test) gid=1003(test) groups=1003(test) 4 [root@pople ~]# ls -la /home/anna/ /home/test/ |grep .bashrc 5 -rw-r--r--. 1 anna anna 231 Oct 31 01:07 .bashrc 6 -rw-r--r--. 1 test test 231 Oct 31 01:07 .bashrc 7 [root@pople ~]# groupmod -o -g 1002 test # 指定anna的GID給test,即共享一個GID 8 [root@pople ~]# id anna && id test 9 uid=1002(anna) gid=1002(anna) groups=1002(anna) 10 uid=1003(test) gid=1002(anna) groups=1002(anna) # 可以看到用戶test的GID已修改 11 [root@pople ~]# ls -la /home/anna/ /home/test/ |grep .bashrc 12 -rw-r--r--. 1 anna anna 231 Oct 31 01:07 .bashrc 13 -rw-r--r--. 1 test 1003 231 Oct 31 01:07 .bashrc # 之前的文件的GID不會被修改,需要手動去修改 14 [root@pople ~]# chown test:anna /home/test/.bashrc # 手動更改.bashrc文件的屬組 15 [root@pople ~]# ls -la /home/anna/ /home/test/ |grep .bashrc 16 -rw-r--r--. 1 anna anna 231 Oct 31 01:07 .bashrc 17 -rw-r--r--. 1 test anna 231 Oct 31 01:07 .bashrc # 已更正屬組為anna
[root@pople ~]# chown test:test /home/test/.bashrc # 更新文件屬組為test,無報錯,但文件的屬組仍未改變??? [root@pople ~]# ls -la /home/anna/ /home/test/ |grep .bashrc -rw-r--r--. 1 anna anna 231 Oct 31 01:07 .bashrc -rw-r--r--. 1 test anna 231 Oct 31 01:07 .bashrc
[root@pople ~]# tail -2 /etc/group # 兩個組擁有同樣的GID。
anna:x:1002:
test:x:1002:
[root@pople ~]# su - test
[test@pople ~]$ touch tt.txt
[test@pople ~]$ ll tt.txt
-rw-r--r--. 1 test anna 0 Apr 9 17:34 tt.txt # 可以發現切換用戶之后創建一個文件,此文件的屬組是anna而不是test。
[root@pople ~]# groupmod -n new_name anna # 修改anna的組名為:new_name
[root@pople ~]# tail -2 /etc/group && tail -2 /etc/gshadow
test:x:1002:
new_name:x:1002: # 兩個組文件的信息已修改,細心的朋友可以發現修改后的組信息排在最后一行,而test排在前面。
test:!::
new_name:!::
[root@pople ~]# ls -la /home/anna/ /home/test/
/home/anna/:
total 16
drwx------. 2 anna test 83 Apr 4 22:47 . # 可以看到用戶anna的當前屬組權限已全部自動更改為test
drwxr-xr-x. 5 root root 41 Apr 9 16:57 ..
-rw-------. 1 anna test 9 Apr 4 22:47 .bash_history
-rw-r--r--. 1 anna test 18 Oct 31 01:07 .bash_logout
-rw-r--r--. 1 anna test 193 Oct 31 01:07 .bash_profile
-rw-r--r--. 1 anna test 231 Oct 31 01:07 .bashrc
/home/test/:
total 12
drwx------. 2 test 1003 76 Apr 9 17:34 .
drwxr-xr-x. 5 root root 41 Apr 9 16:57 ..
-rw-r--r--. 1 test 1003 18 Oct 31 01:07 .bash_logout
-rw-r--r--. 1 test 1003 193 Oct 31 01:07 .bash_profile
-rw-r--r--. 1 test test 231 Oct 31 01:07 .bashrc # 用戶test的屬組權限也自動由anna更換為test了。說明對於共享同一個GID的兩個用戶,文件的屬組名取決於組文件里排在前面的那個組,也就是組test。
-rw-r--r--. 1 test test 0 Apr 9 17:34 tt.txt
[root@pople ~]#
總結:
- 如果兩個用戶共享一個GID為主組,應該先檢查任何具有舊組ID且必須繼續屬於組的文件,都必須手動更改其組ID,否則有可能會導致組ID不一致。
- 如果兩個用戶共享一個GID為主組,那么新建的文件的屬組名稱都會優先選擇組文件(/etc/group、/etc/gshadow)里排在前面的那個組