[root@iz2ze46xi6pjjj69ailg9lz ~]# cat /etc/group root:x:0: bin:x:1: daemon:x:2: sys:x:3:
組名:組密碼:GID:組成員
字段 | 含義 |
組名 | 用戶登陸時所在的組 |
組密碼 | 通常不使用 |
GID | 組標識號 |
組內用戶列表 | 屬於該組的用戶列表 |
[root@iz2ze46xi6pjjj69ailg9lz ~]# cat /etc/gshadow
root:::
bin:::
例如:設置組密碼並查看配置文件:linux
[root@iz2ze46xi6pjjj69ailg9lz ~]# gpasswd mygroup #給mygroup設置密碼 Changing the password for group mygroup New Password: Re-enter new password: [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/gshadow #查看/etc/gshadow配置文件 mygroup:$6$wUcog/rKn4p/$fWwlj9.ZQHnpQktuzUXI6iRj4E5I2Yyu3mOaAR9IdqkUhE1hLM8KmeI3 zcIPgNFAyEmLuoWZN7aWXRpjYPjcX0::
組設置密碼的時候也是同用戶設置密碼同樣,先寫到/etc/group中,而後再寫到/etc/gshadow中mongodb
[root@iz2ze46xi6pjjj69ailg9lz ~]# grpunconv #將/etc/gshadow的密碼反寫到/etc/group中 [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group #查看/etc/group中的組密碼 mygroup:$6$wUcog/rKn4p/$fWwlj9.ZQHnpQktuzUXI6iRj4E5I2Yyu3mOaAR9IdqkUhE1hLM8KmeI3 zcIPgNFAyEmLuoWZN7aWXRpjYPjcX0:888:
[root@iz2ze46xi6pjjj69ailg9lz ~]# groupadd -g 888 mygroup #建立用戶組mygroup,GID爲888
[root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group mygroup:x:888:
[root@iz2ze46xi6pjjj69ailg9lz ~]# groupdel mygroup #刪除用戶組 [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group [root@iz2ze46xi6pjjj69ailg9lz ~]#
[root@iz2ze46xi6pjjj69ailg9lz ~]# groupmod -n mygroup2 mygroup #將mygroup從新命名爲mygroup2 [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group mygroup2:x:888: [root@iz2ze46xi6pjjj69ailg9lz ~]#
gpasswd命令是Linux下工做組文件/etc/group
和/etc/gshadow
管理工具。shell
語法:編程
gpasswd(選項)(參數)
選項:centos
-a:添加用戶到組; -d:從組刪除用戶; -A:指定管理員; -M:指定組成員和-A的用途差很少; -r:刪除密碼; -R:限制用戶登入組,只有組中的成員才能夠用newgrp加入該組。
參數:bash
組:指定要管理的工做組。ssh
(0)查看組中有哪些成員:ide
[root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group mygroup:x:888:qlq
組名:組密碼:GID:組成員 最後的qlq則是組中的成員
查看一個用戶屬於哪一個組:
[root@iz2ze46xi6pjjj69ailg9lz ~]# groups qlq #查看qlq屬於哪一個組
qlq : qlq mygroup
或者:
[root@iz2ze46xi6pjjj69ailg9lz ~]# id qlq uid=1000(qlq) gid=1000(qlq) groups=1000(qlq),888(mygroup)
groups和id若是不加後面的參數默認查詢當前用戶的組信息。
(1)添加用戶到組工具
[root@iz2ze46xi6pjjj69ailg9lz ~]# gpasswd -a qlq mygroup #添加qlq用戶到mygroup組 Adding user qlq to group mygroup [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group #查看mygroup組有哪些成員 mygroup:x:888:qlq
(2)從用戶組中刪除用戶ui
[root@iz2ze46xi6pjjj69ailg9lz ~]# gpasswd -d myuser2 root Removing user myuser2 from group root
(3)設置組的密碼:
[root@iz2ze46xi6pjjj69ailg9lz ~]# gpasswd mygroup #設置組密碼 Changing the password for group mygroup New Password: Re-enter new password:
也能夠將組密碼寫到/etc/gshadow或者/etc/group中:
[root@iz2ze46xi6pjjj69ailg9lz ~]# grpunconv #將密碼反轉到/etc/group [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group #查看/etc/group發現帶上密碼信息 mygroup:$6$V/Mkh/dk/NdQk$iOr2BbG/m80pgdODkOxG.5bgQBjMEplhaMCzNgbaPPRd/vEwS8ZycxD DNeh/3Svek7Z1mraDStryYxndSJbUo0:888: [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/gshadow #查看/etc/gshadow發現文件不存在 grep: /etc/gshadow: No such file or directory [root@iz2ze46xi6pjjj69ailg9lz ~]# grpconv #將密碼轉換到/etc/gshadow中 [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/gshadow #查看/etc/gshadow,發現帶上密碼信息 mygroup:$6$V/Mkh/dk/NdQk$iOr2BbG/m80pgdODkOxG.5bgQBjMEplhaMCzNgbaPPRd/vEwS8ZycxD DNeh/3Svek7Z1mraDStryYxndSJbUo0:: [root@iz2ze46xi6pjjj69ailg9lz ~]# grep mygroup /etc/group #查看/etc/group發現去掉加密密碼,且變成密碼位 mygroup:x:888:
(1)groups查看永不屬於哪一個組
例如:
[qlq@iz2ze46xi6pjjj69ailg9lz root]$ groups #查看當前qlq用戶屬於哪一個組
qlq
[qlq@iz2ze46xi6pjjj69ailg9lz root]$ newgrp mygroup #將當前qlq用戶添加到mygroup組中,須要輸入mygroup組的密碼
Password:
[qlq@iz2ze46xi6pjjj69ailg9lz root]$ id #查看當前用戶的UID以及組信息
uid=1000(qlq) gid=888(mygroup) groups=888(mygroup),1000(qlq)
* groups和id也能夠加其餘用戶名查看其餘用戶的信息:
[qlq@iz2ze46xi6pjjj69ailg9lz root]$ id root
uid=0(root) gid=0(root) groups=0(root) [qlq@iz2ze46xi6pjjj69ailg9lz root]$ groups root root : root
(2)grpck 檢測用戶組配置文件信息
(3)vigr編輯/etc/group文件,且佔用文件的鎖,其餘用戶不能編輯文件。
useradd(選項)(參數)
選項:
-c<備註>:加上備註文字。備註文字會保存在passwd的備註欄位中; -d<登入目錄>:指定用戶登入時的啓始目錄; -D:變動預設值; (查看默認的配置) -e<有效期限>:指定賬號的有效期限; -f<緩衝天數>:指定在密碼過時後多少天即關閉該賬號; -g<羣組>:指定用戶所屬的羣組; -G<羣組>:指定用戶所屬的附加羣組; -m:自動創建用戶的登入目錄; -M:不要自動創建用戶的登入目錄; -n:取消創建以用戶名稱爲名的羣組; -r:創建系統賬號; -s<shell>:指定用戶登入後所使用的shell; -u<uid>:指定用戶id。
參數:
用戶名:要建立的用戶名。
例子;
(1)查看默認配置:
[root@iz2ze46xi6pjjj69ailg9lz ~]# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
(2)添加用戶
[root@iz2ze46xi6pjjj69ailg9lz ~]# useradd -u 888 -g mygroup -c "my user" myuser #添加用戶指定UID與默認的組,同時添加描述信息 [root@iz2ze46xi6pjjj69ailg9lz ~]# grep myuser /etc/passwd #查看剛添加的用戶信息 myuser:x:888:888:my user:/home/myuser:/bin/bash [root@iz2ze46xi6pjjj69ailg9lz ~]# passwd myuser #設定用戶密碼 Changing password for user myuser. New password: BAD PASSWORD: The password is a palindrome Retype new password: passwd: all authentication tokens updated successfully. [root@iz2ze46xi6pjjj69ailg9lz ~]#
也能夠手工添加修改,修改/etc/passwd與/etc/shadow文件,同時建立宿主目錄。
usermod命令用於修改用戶的基本信息。usermod命令不容許你改變正在線上的使用者賬號名稱。當usermod命令用來改變user id,必須確認這名user沒在電腦上執行任何程序。你需手動更改使用者的crontab檔。也需手動更改使用者的at工做檔。採用NIS server須在server上更動相關的NIS設定。
語法;
usermod(選項)(參數)
選項:
-c<備註>:修改用戶賬號的備註文字; -d<登入目錄>:修改用戶登入時的目錄; -e<有效期限>:修改賬號的有效期限; -f<緩衝天數>:修改在密碼過時後多少天即關閉該賬號; -g<羣組>:修改用戶所屬的羣組; -G<羣組>;修改用戶所屬的附加羣組; -l<賬號名稱>:修改用戶賬號名稱; -L:鎖定用戶密碼,使密碼無效; -s<shell>:修改用戶登入後所使用的shell; -u<uid>:修改用戶ID; -U:解除密碼鎖定。
參數:
登陸名:指定要修改信息的用戶登陸名。
例子:
[root@iz2ze46xi6pjjj69ailg9lz ~]# usermod -l myuser2 -c "my user2" myuser #修改用戶myuser爲myuser2,同時修改描述信息 [root@iz2ze46xi6pjjj69ailg9lz ~]# grep myuser /etc/passwd #查看信息 myuser2:x:888:888:my user2:/home/myuser:/bin/bash [root@iz2ze46xi6pjjj69ailg9lz ~]# usermod -g sys myuser2 #修改myuser2用戶的用戶組爲sys組 [root@iz2ze46xi6pjjj69ailg9lz ~]# grep myuser /etc/passwd myuser2:x:888:3:my user2:/home/myuser:/bin/bash
語法:
userdel(選項)(參數)
選項:
-f:強制刪除用戶,即便用戶當前已登陸;
-r:刪除用戶的同時,刪除與用戶相關的全部文件。
參數:
用戶名:要刪除的用戶名。
例如:
userdel -f qlq
或者
userdel -rf qlq
(1)pwck檢測/etc/passwd文件和/etc/shadow文件
[root@iz2ze46xi6pjjj69ailg9lz ~]# pwck /etc/passwd user 'ftp': directory '/var/ftp' does not exist pwck: no changes
或者:
[root@iz2ze46xi6pjjj69ailg9lz ~]# pwck user 'ftp': directory '/var/ftp' does not exist pwck: no changes
檢測用戶的基本信息和密碼信息,宿主目錄不存在不是粗,這些目錄是僞用戶的目錄。
(2)vipw
編輯/etc/passwd,在編輯的時候其餘用戶不能編輯,相似於word的只能單獨打開一次文檔。
(3)finger 查看某個用戶的詳細登陸信息
[root@VM_0_12_centos ~]# finger qlq #查看qlq用戶的詳細信息 Login: qlq Name: Directory: /home/qlq Shell: /bin/bash Last login Fri Mar 30 18:37 (CST) on pts/0 from 218.26.179.150 No mail. No Plan.
本地登陸是tty,遠程是pts
(4)su切換(加-的時候環境變量也會跟着變)
例如:不加-的時候切換的仍是root的目錄和環境變量
[root@VM_0_12_centos ~]# su qlq [qlq@VM_0_12_centos root]$ pwd /root [qlq@VM_0_12_centos root]$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/mongodb-linux-x86_6 4-3.0.6/bin/:/root/bin:/usr/local/mongodb-linux-x86_64-3.0.6/bin/
加-的時候環境變量和目錄頁跟着變爲當前用戶的:
[root@VM_0_12_centos ~]# su - qlq #加-切換用戶 Last login: Fri Mar 30 19:40:18 CST 2018 on pts/0 [qlq@VM_0_12_centos ~]$ pwd /home/qlq [qlq@VM_0_12_centos ~]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/qlq/.local/bin:/hom e/qlq/bin
注意:root切換普通用戶的時候不須要輸入密碼,普通用戶切換root用戶須要輸入密碼。
#表明的是超級用戶,$表明的是普通用戶。
(5)查看一個用戶的密碼狀態: passwd -S username
[root@VM_0_12_centos qlq]# passwd -S qlq qlq PS 2018-03-30 0 99999 7 -1 (Password set, MD5 crypt.)
顯示的是用戶的密碼信息以及是否鎖定以及超時時間等信息。
(6)鎖定用戶與解鎖用戶:
第一種加鎖與解鎖的方法: (passwd -l與passwd -uf )
[root@VM_0_12_centos qlq]# passwd -l qlq #鎖定用戶 Locking password for user qlq. passwd: Success [root@VM_0_12_centos qlq]# passwd -S qlq #查看用戶密碼狀態 qlq LK 2018-03-30 0 99999 7 -1 (Password locked.) [root@VM_0_12_centos qlq]# grep qlq /etc/shadow #查看/etc/shadow中的用戶密碼 qlq:!!$1$en8QJp5f$00T1TAnX68yvu2LoWztoF0:17620:0:99999:7:::
鎖定用戶:(發現用戶密碼前面加了兩個感嘆號)
原理是經過修改/etc/shadow下對應用戶的密碼,致使密碼驗證失敗。因此咱們也能夠手工修改/etc/shadow文件,修改用戶對應的密碼則會致使密碼鎖定。
[root@VM_0_12_centos ~]# passwd -uf qlq #解鎖用戶 Unlocking password for user qlq. passwd: Success [root@VM_0_12_centos ~]# passwd -S qlq qlq PS 2018-03-30 0 99999 7 -1 (Password set, MD5 crypt.) [root@VM_0_12_centos ~]# grep qlq /etc/shadow #查看/etc/shadow文件 qlq:$1$en8QJp5f$00T1TAnX68yvu2LoWztoF0:17620:0:99999:7:::
解鎖用戶:
原理是經過將/etc/shadow下對應用戶的密碼前面的兩個感嘆號去掉密碼驗證經過。
第二種加鎖與解鎖的方法;(usermod -L 與 usermod -U)
[root@VM_0_12_centos ~]# passwd -S qlq #鎖定給用戶 qlq PS 2018-03-30 0 99999 7 -1 (Password set, MD5 crypt.) [root@VM_0_12_centos ~]# usermod -L qlq [root@VM_0_12_centos ~]# passwd -S qlq qlq LK 2018-03-30 0 99999 7 -1 (Password locked.) [root@VM_0_12_centos ~]# grep qlq /etc/shadow qlq:!$1$en8QJp5f$00T1TAnX68yvu2LoWztoF0:17620:0:99999:7::: [root@VM_0_12_centos ~]# usermod -U qlq #解鎖用戶 [root@VM_0_12_centos ~]# passwd -S qlq qlq PS 2018-03-30 0 99999 7 -1 (Password set, MD5 crypt.) [root@VM_0_12_centos ~]# grep qlq /etc/shadow qlq:$1$en8QJp5f$00T1TAnX68yvu2LoWztoF0:17620:0:99999:7:::
注意:
這種方法鎖定的時候選項是大寫L與U,同時鎖定的時候在/etc/shadow中用戶棉麻前面加一個!,解鎖去掉前面的一個!
(7)who與w查看當前登陸的用戶信息
[qlq@iz2ze46xi6pjjj69ailg9lz ~]$ w 20:06:44 up 1 day, 7:55, 2 users, load average: 1.70, 1.94, 2.17 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 11:58 1:24 0.00s 0.00s -bash qlq pts/0 218.26.179.150 20:05 4.00s 0.00s 0.00s w
顯示了用戶的登陸時間,登陸地址,空閒時間,與CPU信息,較who顯示的信息更全。tty表示本機登陸,pts表示遠程登陸。from表示從何處登陸。IDLE表示用戶閒置時間。
JCPU:以終端代號來區分,該中斷全部的進程執行時,全部消耗的牀鋪時間會顯示在這裏。
PCPU:CPU執行程序消耗的時間
what:用戶正在執行的動做。
load average:分別顯示系統在過去1,5,15分鐘內的平均負載值。0.8如下認爲系統運行效率還行。
[qlq@iz2ze46xi6pjjj69ailg9lz ~]$ who root tty1 2018-03-30 11:58 qlq pts/0 2018-03-30 20:05 (218.26.179.150)
(8)chage 用來修改賬號和密碼的有效期限。
語法:
chage [選項] 用戶名
選項:
-m:密碼可更改的最小天數。爲零時表明任什麼時候候均可以更改密碼。
-M:密碼保持有效的最大天數。
-w:用戶密碼到期前,提早收到警告信息的天數。
-E:賬號到期的日期。過了這天,此賬號將不可用。
-d:上一次更改的日期。
-i:停滯時期。若是一個密碼已過時這些天,那麼此賬號將不可用。
-l:例出當前的設置。由非特權用戶來肯定他們的密碼或賬號什麼時候過時。
例如:查看qlq信息:
[root@iz2ze46xi6pjjj69ailg9lz qlq]# chage -l qlq Last password change : Mar 30, 2018 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
(9)啓動或停用shadow命令:
pwconv/pwunconv
grpconv/grpunconv
也能夠用authconfig進行修改:
[root@iz2ze46xi6pjjj69ailg9lz qlq]# man authconfig | more AUTHCONFIG(8) System Manager's Manual AUTHCONFIG(8) NAME authconfig, authconfig-tui - an interface for configuring system authentication resources SYNOPSIS authconfig [options] {--update|--updateall|--test|--probe|--restorebackup <name>|--savebackup <name>|--restorelastbackup} DESCRIPTION authconfig provides a simple method of configuring /etc/sysconfig/net‐ work to handle NIS, as well as /etc/passwd and /etc/shadow, the files used for shadow password support. Basic LDAP, Kerberos 5, and Winbind client configuration is also provided. If --test action is specified, the authconfig just reads the current settings from the various configuration files and prints their values.
命令行窗口修改的只能本次生效,若是想永久生效,能夠修改/etc/sysconfig/authconfig ,默認配置以下:
CACHECREDENTIALS=yes FORCELEGACY=no FORCESMARTCARD=no IPADOMAINJOINED=no IPAV2NONTP=no PASSWDALGORITHM=sha512 USEDB=no USEECRYPTFS=no USEFPRINTD=no USEHESIOD=no USEIPAV2=no USEKERBEROS=no USELDAP=no USELDAPAUTH=no USELOCAUTHORIZE=yes USEMKHOMEDIR=no USENIS=no USEPAMACCESS=no USEPASSWDQC=no USEPWQUALITY=yes USESHADOW=yes USESMARTCARD=no USESSSD=yes USESSSDAUTH=no USESYSNETAUTH=no USEWINBIND=no USEWINBINDAUTH=no WINBINDKRB5=no
1.手動批量添加:
(1)首選填寫用戶基本信息腳本:(格式相似於/etc/passwd的文件格式)
[root@iz2ze46xi6pjjj69ailg9lz test]# cat ./user.info qlq1::1001:888::/home/qlq1:/bin/bash qlq2::1002:888::/home/qlq2:/bin/bash qlq3::1003:888::/home/qlq3:/bin/bash qlq4::1004:888::/home/qlq4:/bin/bash qlq5::1005:888::/home/qlq5:/bin/bash
(2)newusers導入用戶
[root@iz2ze46xi6pjjj69ailg9lz test]# newusers < user.info #導入用戶信息 [root@iz2ze46xi6pjjj69ailg9lz test]# tail -5 /etc/passwd #查看/etc/passwd最後五行 qlq1:x:1001:888::/home/qlq1:/bin/bash qlq2:x:1002:888::/home/qlq2:/bin/bash qlq3:x:1003:888::/home/qlq3:/bin/bash qlq4:x:1004:888::/home/qlq4:/bin/bash qlq5:x:1005:888::/home/qlq5:/bin/bash
(3)編寫密碼文件:(格式爲 用戶名:密碼)
[root@iz2ze46xi6pjjj69ailg9lz test]# cat user.pd
qlq1:qlq1
qlq2:qlq2
qlq3:qlq3
qlq4:qlq4
qlq5:qlq5
(4)關閉密碼自動轉換
[root@iz2ze46xi6pjjj69ailg9lz test]# pwunconv
(5)導入密碼文件並查看/etc/passwd文件:
[root@iz2ze46xi6pjjj69ailg9lz test]# chpasswd < user.pd [root@iz2ze46xi6pjjj69ailg9lz test]# tail -5 /etc/passwd qlq1:$6$PnYbXRveZyv2$S98zfhQzGV2gUHkj./gAV51R1VlQlIQBNarJ/FcfQEu2v4XURJ7luCRIYI2 13NdzuJ9aH.n02lHr27CCbLRHM0:1001:888::/home/qlq1:/bin/bash qlq2:$6$PMy.cpjGEAFI$jU1U5wln2pu9TCVIAmtrwTFj/PDJljo9Q2pXgte.B.lIvsBZmaD4BJCBPpr DBvajnQ9N6zt8Uc3A1OJMl/UzV/:1002:888::/home/qlq2:/bin/bash qlq3:$6$tsOk0/bIkIxuw1f$8K4u5VnKhJt7Ih34yX0MDD/d58Ix9FTsLXkwzG4etbGLRRaMID1HOomm OKyxD6U4.oOuZq0z7TZnQ/jTaHO2v/:1003:888::/home/qlq3:/bin/bash qlq4:$6$Vm2wN8YdVN/6$sGGm53KKCPzwtw4NnzXSrTz.OI.3v.cNoV//yQo9P3lHjU8K22s7S5LC9nr 1tkY8qC.bYLxHe7.MW/CptklvW0:1004:888::/home/qlq4:/bin/bash qlq5:$6$yG6E//cntTS$foihNqZpJyh0So9wflT9sjjGPNZv7GZuS5AJbtk0FdRsaFyu3Hc2U5Rha.7Y JiaTqmRD/dP1sD8CEJ8Bk3Xeq.:1005:888::/home/qlq5:/bin/bash
(6)開啓密碼自動轉換,密碼寫入/etc/shadow文件:
[root@iz2ze46xi6pjjj69ailg9lz test]# pwconv #開啓密碼轉換 [root@iz2ze46xi6pjjj69ailg9lz test]# tail -5 /etc/passwd qlq1:x:1001:888::/home/qlq1:/bin/bash qlq2:x:1002:888::/home/qlq2:/bin/bash qlq3:x:1003:888::/home/qlq3:/bin/bash qlq4:x:1004:888::/home/qlq4:/bin/bash qlq5:x:1005:888::/home/qlq5:/bin/bash
例如:C語言風格的for循環批量添加用戶的腳本:
#!/bin/bash #adduser batch echo "please input username:" read username echo "please input number to create:" read number #start to create user for(( i=1;i<="${number}";i++ )) do /usr/sbin/adduser "${username}${i}" > /dev/null 2> /dev/null done #add finished echo "add OK!" echo "please input passwd for users" read password for(( i=1;i<="${number}";i++ )) do /usr/sbin/usermod -p "${password}" "${username}${i}" > /dev/null 2> /dev/null done
結果:
[root@VM_0_12_centos sshDemo]# ./addUserBatch.sh please input username: ppp please input number to create: 20 add OK! please input passwd for users 123456 [root@VM_0_12_centos sshDemo]# tail -5 /etc/passwd ppp16:x:1017:1017::/home/ppp16:/bin/bash ppp17:x:1018:1018::/home/ppp17:/bin/bash ppp18:x:1019:1019::/home/ppp18:/bin/bash ppp19:x:1020:1020::/home/ppp19:/bin/bash ppp20:x:1021:1021::/home/ppp20:/bin/bash [root@VM_0_12_centos sshDemo]# tail -5 /etc/shadow ppp16:123456:17622:0:99999:7::: ppp17:123456:17622:0:99999:7::: ppp18:123456:17622:0:99999:7::: ppp19:123456:17622:0:99999:7::: ppp20:123456:17622:0:99999:7:::
例如:批量刪除用戶的腳本:
解釋:去passwd查找第一列過濾輸入的關鍵詞,而後在第一列中查找關鍵詞,若是查到就輸出給users,最後循環刪除:$?用於判斷上一次命令的返回狀態碼,若是返回0表明正常結束,不然就是失敗!
#!/bin/bash #delete user batch echo "please input username word to delete" read word #get All users like word* users=`/usr/bin/grep ${word} /etc/passwd | awk -F: -v word1=${word} 'index($1,wo rd1)>0 {print $1}'` if [ "${users}" = '' ] then echo "user is does not exist!" exit 1 fi for username in ${users} do /usr/sbin/userdel -rf ${username} > /dev/null 2>/dev/null done if [ "0" = "$?" ] then echo "delete ok!" else echo "delete failed!" fi
解釋:
通常在shell編程咱們須要將一些打印輸入重定向出來,若是咱們不想看這些結果能夠重定向到/dev/null , /dev/null是unix,linux的一個無底洞,咱們重定向進去的東西將永遠也找不回來。錯誤信息也可使用 2> 重定向到/dev/null ,若是咱們但願本身能夠查看信息,能夠本身制定重定向的文件。
咱們在程序中可使用"$?"判斷上一個命令的執行結果,若是返回0就是執行成功,不然執行失敗。
>重定向覆蓋模式,>>是追加模式。
思路:將一個命令的others的權限去掉,更改命令的所屬組,並將能夠執行命令的用戶添加到這個組中便可實現按組管理命令。
(1)查看su的權限
[root@iz2ze46xi6pjjj69ailg9lz qlq]# ll `which su` -rwsr-xr-x 1 root root 32096 Apr 13 2017 /bin/su
(2)去掉su的o的x權限
[root@iz2ze46xi6pjjj69ailg9lz ~]# chmod 4750 `which su` [root@iz2ze46xi6pjjj69ailg9lz ~]# ll `which su` -rwsr-x--- 1 root root 32096 Apr 13 2017 /usr/bin/su
(3)此時qlq用戶執行su命令報未受權:
[qlq@iz2ze46xi6pjjj69ailg9lz ~]$ su root
Password:
su: Authentication failure
(4)建立一個組並賦予將su所屬組改成這個組:
[root@iz2ze46xi6pjjj69ailg9lz qlq]# groupadd sugrp [root@iz2ze46xi6pjjj69ailg9lz qlq]# chgrp sugrp /bin/su [root@iz2ze46xi6pjjj69ailg9lz qlq]# ll `which su` -rwsr-x--- 1 root sugrp 32096 Apr 13 2017 /usr/bin/su
(5)將qlq用戶添加到這個組
[root@iz2ze46xi6pjjj69ailg9lz qlq]# usermod -g sugrp qlq [root@iz2ze46xi6pjjj69ailg9lz qlq]# id qlq uid=1000(qlq) gid=1001(sugrp) groups=1001(sugrp)
(6)qlq執行su命令:
[qlq@iz2ze46xi6pjjj69ailg9lz ~]$ su root
Password:
[root@iz2ze46xi6pjjj69ailg9lz qlq]# ls
(7)qlq11用戶執行su命令沒權限;(不在組內)
[qlq11@iz2ze46xi6pjjj69ailg9lz qlq]$ id uid=1006(qlq11) gid=1006(qlq11) groups=1006(qlq11) [qlq11@iz2ze46xi6pjjj69ailg9lz qlq]$ su qlq bash: /usr/bin/su: Permission denied
更具體的參考:http://blog.51cto.com/chenfage/1830424
(1)將su命令的others的權限置爲0,全部用戶不能執行su命令
[root@VM_0_12_centos ~]# ll `which su` -rwsr-x--- 1 root root 32096 Apr 13 2017 /usr/bin/su
(2)qlq11執行su命令:
[qlq11@VM_0_12_centos root]$ su qlq
bash: /usr/bin/su: Permission denied
(3)編輯sudo命令,使qlq11可使用sudo命令(重點)
sudo:可讓普通用戶擁有root權限去執行命令,sudo的配置文件是/etc/sudoers。
visudo:經過visudo編輯/etc/sudoers,能夠檢查語法。
-l:查看受權狀況,列出用戶在主機上可用的和被禁止的命令※
-k:刪除時間戳,時間戳默認5分鐘也會失效
-u:指定某個用戶身份去執行特定的命令操做
例如:root利用visudo編輯/etc/sudoers文件:
語法格式:
用戶名 主機=命令(絕對命令)
[root@VM_0_12_centos ~]# tail -1 /etc/sudoers qlq11 ALL=/usr/bin/su #qlq11能夠在任何主機執行/usr/bin/su命令,多個命令能夠用參數隔開
上面的qlq11表示用戶名,ALL是主機別名,表示在任何主機,後面的是命令的全路徑,多個命令用逗號隔開,也能夠具體到某個選項。
注意:咱們在/etc/sudoers中能夠看到 下面root的配置,所以root能夠不接收任何權限的限制。
[root@VM_0_12_centos ~]# grep root /etc/sudoers ## the root user, without needing the root password. ## Allow root to run any commands anywhere root ALL=(ALL) ALL ## cdrom as root
若是咱們但願qlq用戶用sudo執行任何命令能夠加一會
## Allow root to run any commands anywhere
qlq ALL=(ALL) ALL
2.qlq11用戶查看本身能夠執行的sudo命令並執行su命令(不會暴露root的密碼)
[qlq11@VM_0_12_centos root]$ su #直接執行會報錯 bash: /usr/bin/su: Permission denied [qlq11@VM_0_12_centos root]$ su root bash: /usr/bin/su: Permission denied [qlq11@VM_0_12_centos root]$ /usr/bin/su root bash: /usr/bin/su: Permission denied [qlq11@VM_0_12_centos root]$ sudo -l #查看本身能夠以root身份執行的命令 [sudo] password for qlq11: Matching Defaults entries for qlq11 on VM_0_12_centos: !visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User qlq11 may run the following commands on VM_0_12_centos: (root) /usr/bin/su [qlq11@VM_0_12_centos root]$ sudo su root #以sudo執行sudo命令 [root@VM_0_12_centos ~]#
總結:sudo命令實際是去/etc/sudoers裏面查看用戶能夠以sudo執行哪些命令,root用戶配置了在任何地點以執行任何命令,所以root的權限不受限制,這也是root是最大的管理員的緣由。
sudo是讓普通用戶以root的身份執行一個命令,用sudo -l 也能夠看到命令前面加的有(root),這個命令不必定是root才能使用的命令,也能夠是一個普通的命令;
sudo能夠精確化,甚至能夠具體到一個帶參數與選項的命令。例如咱們可讓一個用戶立馬關機命令,咱們能夠在/etc/sudoers裏面配置: username ALL=/sbin/shutdown -h now