linux每日命令(30):Linux 用户及用户组相关文件、命令详解
閱讀目錄(Content)
- 一. 用戶、用戶組概念及其文件結構詳解
- 二. 常用的用戶、用戶組shell命令
- 用戶相關命令
- useradd
- userdel
- usermod
- passwd
- 用戶組相關命令
- groupadd
- groupdel
- groupmod
- 用戶相關命令
- 三. 綜合示例
- 1.建立兩個用戶組group1和group2,以及三個用戶dennis、daniel、abigale,并且將前2個用戶分配在group1用戶組下,后一個分配在group2用戶組下,并給dennis設置密碼
- 2.改變abigale的用戶組由group2變為group1
一. 用戶、用戶組概念及其文件結構詳解
Linux用戶只有兩個等級:root及非root。Linux中還有一部分用戶,如:apache、mysql、nobody、ftp等,這些也都是非root用戶,即普通用戶。Linux的權限實際是上不同用戶所能訪問的文件的不同產生的假象。而這些假象的造成,還要涉及到另外一個概念:用戶組
- 一個用戶至少要屬于一個用戶組
- 一個用戶可以屬于多個用戶組
用戶組存在的原因主要還是方便分配權限。而用戶本身和權限的差別不是很大,各個用戶之間主要的不同是:
- 是否擁有密碼
- home目錄(普通用戶可以有一個以自己用戶名命名的home目錄,存放的地址是/home/username,root用戶的home目錄是:/root)
- shell
像nobody這樣用來執行Nginx的工作進程的用戶,一般不分配密碼和shell,甚至連home目錄都沒有。
為什么不分配密碼?如果設置了密碼,程序無法自動使用。由于不會有人使用這個用戶登錄系統,所以就沒有必要分配shell。(備注:其實嚴格上說是有分配shell,只是分配的shell是/sbin/nologin這個特殊的shell,沒有任何其他功能,主要功能是防止你登陸。)
所有用戶都可以通過查看/etc/passwd查看。以下為我的系統中的用戶信息:
[hc@localhost ~]$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin gluster:x:996:993:GlusterFS daemons:/var/run/gluster:/sbin/nologin saslauth:x:995:76:Saslauthd user:/run/saslauthd:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin unbound:x:993:988:Unbound DNS resolver:/etc/unbound:/sbin/nologin chrony:x:992:987::/var/lib/chrony:/sbin/nologin qemu:x:107:107:qemu user:/:/sbin/nologin radvd:x:75:75:radvd user:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin geoclue:x:991:985:User for geoclue:/var/lib/geoclue:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin sssd:x:990:984:User for sssd:/:/sbin/nologin gdm:x:42:42::/var/lib/gdm:/sbin/nologin gnome-initial-setup:x:989:983::/run/gnome-initial-setup/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin hc:x:1000:1000:hc:/home/hc:/bin/bash nginx:x:988:982:nginx user:/var/cache/nginx:/sbin/nologin redis:x:987:981:Redis Database Server:/var/lib/redis:/sbin/nologin uwsgi:x:986:980:uWSGI daemon user:/run/uwsgi:/sbin/nologin mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin mongod:x:985:979:mongod:/var/lib/mongo:/bin/false文件的每一行代表著一個用戶,每一行由冒號":"分割成7個字段,其結構如下:
用戶名:密碼:UID:GID:用戶全名:home目錄:shellUID:
- UID 0 root用戶
- UID 1~999 是占坑用戶,即一些無法登錄的用戶(以前是系統是1~499,最近剛改)
- UID 1000 以上是正常的可登錄用戶
GID:前面說了一個用戶可以屬于多個用戶組,但這里只有一個,表示的是專職用戶組,即一個用戶只有一個專職用戶組,其屬于其他用戶組的關聯關系存儲在/etc/group 文件中。
其中比較特殊的是密碼字段,統一由x代替了,看/etc/passwd就知道一開始Linux是將密碼存在這個文件里的,由于考慮到/etc/passwd可以被所有人查看,所以將統一存儲到/etc/shadow文件(只有root權限可以訪問)中,具體數據如下:
[hc@localhost ~]$ cat /etc/shadow cat: /etc/shadow: Permission denied [hc@localhost ~]$ sudo cat /etc/shadow [sudo] password for hc: root:$6$yknGgCVbJAppRylr$SY.X4RUN.6dIG8fT9ofTu03/lcUzcfn4pNNeUWwkakZlH4oNF45h8eDYNxsJhz3Gm6/5ovsdJzdJMCZkKDQzs0::0:99999:7::: bin:*:17632:0:99999:7::: daemon:*:17632:0:99999:7::: adm:*:17632:0:99999:7::: lp:*:17632:0:99999:7::: sync:*:17632:0:99999:7::: shutdown:*:17632:0:99999:7::: halt:*:17632:0:99999:7::: mail:*:17632:0:99999:7::: operator:*:17632:0:99999:7::: games:*:17632:0:99999:7::: ftp:*:17632:0:99999:7::: nobody:*:17632:0:99999:7::: systemd-network:!!:17861:::::: dbus:!!:17861:::::: polkitd:!!:17861:::::: libstoragemgmt:!!:17861:::::: rpc:!!:17861:0:99999:7::: colord:!!:17861:::::: gluster:!!:17861:::::: saslauth:!!:17861:::::: abrt:!!:17861:::::: setroubleshoot:!!:17861:::::: rtkit:!!:17861:::::: pulse:!!:17861:::::: rpcuser:!!:17861:::::: nfsnobody:!!:17861:::::: unbound:!!:17861:::::: chrony:!!:17861:::::: qemu:!!:17861:::::: radvd:!!:17861:::::: tss:!!:17861:::::: usbmuxd:!!:17861:::::: geoclue:!!:17861:::::: ntp:!!:17861:::::: sssd:!!:17861:::::: gdm:!!:17861:::::: gnome-initial-setup:!!:17861:::::: sshd:!!:17861:::::: avahi:!!:17861:::::: postfix:!!:17861:::::: tcpdump:!!:17861:::::: hc:$6$h7GHf6NOXJgamNHh$gwsxvkU88Puv5Nt5bn14Wj7UsU0DclLoXMi/99sr36lqn4osb6oKRF/AdCszGAjsYeUl6PX66u/SSJ5MhYsMT0::0:99999:7::: nginx:!!:17861:::::: redis:!!:17861:::::: uwsgi:!!:17861:::::: mysql:!!:17861:::::: mongod:!!:17862::::::其結構如下:
用:分割,從左往右依次為
- 賬戶名:賬戶名與/etc/passwd里面的賬戶名是一一對應的關系。
- 密碼:這里可以看到3類,分別是奇奇怪怪的字符串、*和!!其中,奇奇怪怪的字符串就是加密過的密碼文件。*代表帳號被鎖定(即),!!表示這個密碼已經過期了。奇奇怪怪的字符串是以$6$開頭的,表明是用SHA-512加密的,$1$ 表明是用MD5加密的、$2$ 是用Blowfish加密的、$5$是用 SHA-256加密的。
- 修改日期:這個是表明上一次修改密碼的日期與1970-1-1相距的天數密碼不可改的天數:假如這個數字是8,則8天內不可改密碼,如果是0,則隨時可以改。
- 密碼需要修改的期限:如果是99999則永遠不用改。如果是其其他數字比如12345,那么必須在距離1970-1-1的12345天內修改密碼,否則密碼失效。
- 修改期限前N天發出警告:比如你在第五條規定今年6月20號規定密碼必須被修改,系統會從距離6-20號的N天前向對應的用戶發出警告。
- 密碼過期的寬限:假設這個數字被設定為M,那么帳號過期的M天內修改密碼是可以修改的,改了之后賬戶可以繼續使用。
- 帳號失效日期:假設這個日期為X,與第三條一樣,X表示的日期依然是1970-1-1相距的天數,過了X之后,帳號失效。
- 保留:被保留項,暫時還沒有被用上。
再來看看/etc/group文件:
[hc ~]$ cat /etc/group root:x:0: bin:x:1: daemon:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: lp:x:7: mem:x:8: kmem:x:9: wheel:x:10: cdrom:x:11: mail:x:12:postfix man:x:15: dialout:x:18: floppy:x:19: games:x:20: tape:x:33: video:x:39: ftp:x:50: lock:x:54: audio:x:63: nobody:x:99: users:x:100: utmp:x:22: utempter:x:35: input:x:999: systemd-journal:x:190: systemd-network:x:192: dbus:x:81: polkitd:x:998: printadmin:x:997: cgred:x:996: libstoragemgmt:x:995: rpc:x:32: colord:x:994: dip:x:40: gluster:x:993: ssh_keys:x:992: saslauth:x:76: abrt:x:173: setroubleshoot:x:991: rtkit:x:172: pulse-access:x:990: pulse-rt:x:989: pulse:x:171: rpcuser:x:29: nfsnobody:x:65534: unbound:x:988: chrony:x:987: kvm:x:36:qemu qemu:x:107: radvd:x:75: tss:x:59: libvirt:x:986: usbmuxd:x:113: geoclue:x:985: ntp:x:38: sssd:x:984: gdm:x:42: gnome-initial-setup:x:983: sshd:x:74: avahi:x:70: slocate:x:21: postdrop:x:90: postfix:x:89: tcpdump:x:72: stapusr:x:156: stapsys:x:157: stapdev:x:158: hc:x:1000:hc nginx:x:982: redis:x:981: uwsgi:x:980: mysql:x:27: mongod:x:979:其結構如下:
組名:用戶組密碼:GID:用戶組內的用戶名正常的使用中很少會用到用戶組密碼,其存儲在/etc/gshadow中。
用戶組文件比較特特殊的是“”用戶組內的用戶名”,其實就是這個組下的用戶列表,每個用戶之間用逗號“,”分割;本字段可以為空;如果字段為空表示用戶組為GID的用戶名
普通用戶的權限非常的低,就連在系統里安裝軟件的權限都沒有,很多時候可以臨時給普通用戶以特權,就是sudo(在命令前添加sudo)。比如:
sudo cat /etc/shadow完成后需要您輸入root的密碼,這樣 就可以假借root身份了,centos默認普通用戶是沒有sudo權限的,這與主要以桌面版為主的Ubuntu和Fedora不同,如需給予用戶root特權,就需要更改/etc/sudoers文件,修改內容。
比如我為了給hc用戶增加sudo特權,就用root權限,修改/etc/sudoers文件,在root下面加入了hc用戶
修改前
## Allow root to run any commands anywhere root ALL=(ALL) ALL修改后效果如下
## Allow root to run any commands anywhere root ALL=(ALL) ALL hc ALL=(ALL) ALL如果要給某個用戶組添加sudo特權則為:(與給用戶不同的是多了一個%)
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL另外一種方式是添加不需要輸入root密碼即有root權限的用戶,添加方法如下:
%wheel ALL=(ALL) NOPASSWD: ALL另外還可以設定到底有哪些執行權限,具體的規則如下:(具體可看sudoers配置文件詳解)
授權用戶 主機=[(切換到哪些用戶或用戶組)] [是否需要密碼驗證] 命令1,[(切換到哪些用戶或用戶組)] [是否需要密碼驗證] [命令2],[(切換到哪些用戶或用戶組)] [是否需要密碼驗證] [命令3]......另外默認情況下第一次使用sudo時,需要輸入root密碼,如果5分鐘內再次執行sudo則無需再輸入密碼,超過5分鐘則要重新輸入。這個時間也是可以進行配置的,在sudoers中添加如下內容即可:
Defaults:用戶名 timestamp_timeout=20其中單位是分鐘,如果設為0,則表示每次都要輸入密碼。
講解了這么多,接下來學習下常用的shell命令
回到頂部(go to top)二. 常用的用戶、用戶組shell命令
用戶相關命令
useradd
功能:
用來創建用戶
語法 :
useradd 選項 用戶名選項:
| -d 目錄 | 指定用戶主目錄,如果此目錄不存在,則同時使用-m選項,可以創建主目錄,也是用戶登入時的啟始目錄 |
| -g 用戶組 | 指定用戶所屬的群組 |
| -G 用戶組 | 指定用戶所屬的附加群組 |
| -u 用戶號 | 指定用戶id |
| -e | 指定帳號的有效期限 |
| -f | 指定在密碼過期后多少天即關閉該帳號 |
| -m | 自動建立用戶的登入目錄 |
| -M | 不要自動建立用戶的登入目錄 |
| -n | 取消建立以用戶名稱為名的群組 |
| -r | 建立系統帳號 |
| -s Shell文件 | 指定用戶登入后所使用的shell |
示例1:
useradd –d /home/sam -m sam添加了一個用戶sam,并且他的主目錄為/home/sam,沒有主目錄的時候自動創建。(/home為默認的用戶主目錄所在的父目錄)
示例2:
sudo useradd username -m -s /sbin/nologin -d /home/username -g groupname其中:
-s /sbin/nologin 設置不能登陸
-d 設置用戶主目錄
-g 用戶組
-m 創建用戶目錄
示例3:
useradd -s /bin/sh -g group –G adm,root gem添加一個用戶gem,使用的Shell是/bin/sh,主用戶組為group,附加組為adm,root。
userdel
功能:
用來刪除用戶
語法:
userdel 選項 用戶名-r 把用戶的主目錄一起刪除。
usermod
功能:
用來修改用戶
語法:
usermod 選項 用戶名示例:
usermod -s /bin/ksh -d /home/z –g developer sam將sam用戶的Shell改為/bin/ksh,主目錄改為/home/z,用戶組為developer。
passwd
功能:
用來修改用戶口令
語法:
passwd 選項 用戶名選項:
| -l | 鎖定口令,即禁用賬號。 |
| -u | 口令解鎖。 |
| -d | 使賬號無口令。 |
| -f | 強迫用戶下次登錄時修改口令。 |
示例1: 修改用戶密碼
$ passwdOld password:****** New password:******* Re-enter new password:*******假設當前用戶是sam,則上面的命令修改該用戶自己的口令。
如果是超級用戶,可以用下列形式指定任何用戶的口令:
# passwd samNew password:******* Re-enter new password:*******示例2:
passwd -d sam說明:
將用戶sam的口令刪除,這樣用戶sam下一次登錄時,系統就不再詢問口令。
示例3:
passwd -l sam說明:
鎖定sam用戶,使其不能登錄。
用戶組相關命令
groupadd
功能:
創建用戶組
語法:
groupadd 選項 用戶組參數:
| -g | 指定新用戶組的組標識號(GID)。 |
| -o | 一般與-g選項同時使用,表示新用戶組的GID可以與系統已有用戶組的GID相同。 |
示例1:
groupadd group1說明:
此命令向系統中增加了一個新組group1,新組的組標識號是在當前已有的最大組標識號的基礎上加1。
示例2:
groupadd -g 101 group2說明:
此命令向系統中增加了一個新組group2,同時指定新組的組標識號是101。
groupdel
功能:
用于刪除群組。需要從系統上刪除群組時,可用groupdel(group delete)指令來完成這項工作。倘若該群組中仍包括某些用戶,則必須先刪除這些用戶后,方能刪除群組。
語法:
groupdel [群組名稱]示例:
groupdel group2groupmod
功能:
用于更改一個組在系統上的定義
語法:
groupmod [-g <群組識別碼> <-o>][-n <新群組名稱>][群組名稱]選項:
| -g | --gid GID 修改組的GID號 |
| -n | --new-name NEW_GROUP 更改組的組名 |
| -o | 與-g配置使用,可以設定不唯一的組ID值 |
| -h | --help 獲得groupmod命令的使用幫助信息 |
例子:
假設已存在組testbed,gid為4000
示例:
groupmod -n testbed-new testbed將testbed組名更改為testnbed-new
groupmod -g 5000 testbed-new將testbed-new組的組ID更改為5
回到頂部(go to top)三. 綜合示例
1.建立兩個用戶組group1和group2,以及三個用戶dennis、daniel、abigale,并且將前2個用戶分配在group1用戶組下,后一個分配在group2用戶組下,并給dennis設置密碼
輸出:
[root@localhost ~]# groupadd group1 [root@localhost ~]# groupadd group2 [root@localhost ~]# useradd -g group1 dennis [root@localhost ~]# useradd -g group1 daniel [root@localhost ~]# useradd -g group2 abigale [root@localhost ~]# passwd dennis Changing password for user dennis. New password: BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic Retype new password: passwd: all authentication tokens updated successfully. [root@localhost ~]# tail -3 /etc/passwd dennis:x:1000:1000::/home/dennis:/bin/bash daniel:x:1001:1000::/home/daniel:/bin/bash abigale:x:1002:1001::/home/abigale:/bin/bash [root@localhost ~]# tail -3 /etc/group docker:x:995:root group1:x:1000: group2:x:1001: [root@localhost ~]# cd /home/ [root@localhost home]# ll total 0 drwx------. 2 abigale group2 62 Nov 29 00:36 abigale drwx------. 2 daniel group1 62 Nov 29 00:36 daniel drwx------. 2 dennis group1 62 Nov 29 00:36 dennis2.改變abigale的用戶組由group2變為group1
輸出:
[root@localhost home]# usermod -g group1 abigale [root@localhost home]# ll total 0 drwx------. 2 abigale group1 62 Nov 29 00:36 abigale drwx------. 2 daniel group1 62 Nov 29 00:36 daniel drwx------. 2 dennis group1 62 Nov 29 00:36 dennis [root@localhost home]# tail -3 /etc/passwd dennis:x:1000:1000::/home/dennis:/bin/bash daniel:x:1001:1000::/home/daniel:/bin/bash abigale:x:1002:1000::/home/abigale:/bin/bash參考文章:
https://www.cnblogs.com/duhuo/p/5892513.html
https://blog.csdn.net/chanrayli/article/details/78998941
轉載于:https://www.cnblogs.com/wq-mr-almost/p/10327810.html
總結
以上是生活随笔為你收集整理的linux每日命令(30):Linux 用户及用户组相关文件、命令详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云南旅游市场整治呈压倒性态势 旅游人次及
- 下一篇: [雪峰磁针石博客]大数据Hadoop工具