Centos 7.3 用戶和組管理
原文:http://blog.csdn.net/github_39069288/article/details/73306489
3.1 用戶和密碼配置文件
- passwd配置文件詳解
/etc/passwd說明
root:x:0:0:root:/root:/bin/bash /etc/passwd由―:分割成7個字段,每個字段的具體含義是: (1) 用戶名(如第一行中的root就是用戶名),代表用戶賬號的字符串。 (2) 第二個字段存放的是該賬號的口令。 (3) 這個數字代表用戶標識號,也叫做uid。 (4) 表示組標識號,也叫做gid。 (5) 注釋說明,該字段沒有實際意義。 (6) 用戶的家目錄。 (7) 用戶的shell。除了/bin/bash外還有/sbin/nologin比較多,它表示不允許該賬號登錄,建立賬號時添加-s選項指定第七段的值。
- shadow配置文件詳解
/etc/shadow說明
bin:*:15980:0:99999:7: : : (1) 用戶名。 (2) 用戶密碼,這個密碼已經加密,該文件屬性設置為000,但是root賬戶是可以訪問或更改的。 (3) 上次更改密碼的日期,這個數字是這樣計算得來的,距離1970年1月1日到上次更改密碼的日期,例如上次更改密碼的日期為2012年1月1日,則這個值就是365*(2012-1970)+(2012-1970)/4+1=15341。因為如果是閏年,則有366天。 (4) 要過多少天才可以更改密碼,默認是0,即不限制。 (5) 密碼多少天后到期。默認是99999,可以理解為永遠不需要改。 (6) 密碼到期前的警告期限。 (7) 賬號失效期限。密碼已經到期后多少天失效。 (8) 賬號的生命周期。跟第三段一樣。 (9) 作為保留用的,沒有什么意義。
3.2 用戶組管理
/etc/group、/etc/gshadow配置文件
- 系統自動備份的配置文件,源文件刪除后可將備份文件恢復。
[root@centos7-1 ~]# ls /etc/passwd passwd passwd- [root@centos7-1 ~]# ls /etc/group group group- [root@centos7-1 ~]# ls /etc/shadow shadow shadow- [root@centos7-1 ~]# ls /etc/gshadow gshadow gshadow-
- groupadd 創建組
指定gid創建組:
[root@centos7-1 ~]# groupadd -g 1005 temence [root@centos7-1 ~]# tail -n1 /etc/group temence:x:1005:
- groupdel 刪除組
刪除空組:
[root@centos7-1 ~]# groupdel temence [root@centos7-1 ~]# tail -n1 /etc/group ggg:x:1001: 刪除非空組: [root@centos7-1 ~]# groupdel ggg groupdel:不能移除用戶“ggg”的主組 刪除非空組時,需要將組里用戶刪掉才可刪除該組
- groupmems 組成員管理
用於查看擴展組下的所有用戶
用法:groupmems [選項] [動作]
選項:
-g, --group groupname 更改組 groupname,而不是用戶的組(只 root) -R, --root CHROOT_DIR chroot 到的目錄 動作: -a, --add username 將用戶 username 添加到組成員中 -d, --delete username 從組的成員中刪除用戶 username -h, --help 顯示此幫助信息並推出 -p, --purge 從組中移除所有成員 -l, --list 列出組中的所有成員
3.3 用戶管理
- useradd、adduser 新建用戶
centos7,默認新建的uid和gid都是從1000開始,1000之前為系統保留用戶。centos6,默認新建的uid和gid都是從500開始,500之前為系統保留用戶。
-u 指定uid或者屬主名字 -g 指定gid或者屬組名字 -d 指定用戶家目錄 -s 指定shell -M 不創建家目錄 -G 添加擴展組,可以一次性添加多個組,使用“,”分開
指定uid、gid創建用戶:
[root@centos7-1 ~]# tail -n2 /etc/passwd gbj:x:1000:1000::/home/gbj:/bin/bash ggg:x:1001:1001::/home/ggg:/bin/bash [root@centos7-1 ~]# tail -n2 /etc/group gbj:x:1000: ggg:x:1001: [root@centos7-1 ~]# useradd -u 1003 -g 1000 temence [root@centos7-1 ~]# tail -n2 /etc/group gbj:x:1000: ggg:x:1001: [root@centos7-1 ~]# tail -n2 /etc/passwd ggg:x:1001:1001::/home/ggg:/bin/bash temence:x:1003:1000::/home/temence:/bin/bash 指定家目錄、shell [root@centos7-1 ~]# useradd -d /home/qwer -s /sbin/nologin qwer [root@centos7-1 ~]# tail -n2 /etc/passwd temence:x:1003:1000::/home/temence:/bin/bash qwer:x:1004:1004::/home/qwer:/sbin/nologin 創建用戶同時不創建用戶家目錄 [root@centos7-1 ~]# useradd -M ghj [root@centos7-1 ~]# tail tail tailf [root@centos7-1 ~]# tail -n2 /etc/passwd qwer:x:1004:1004::/home/qwer:/sbin/nologin ghj:x:1005:1005::/home/ghj:/bin/bash [root@centos7-1 ~]# ls /home/ gbj ggg qwer temence
- userdel 刪除用戶
userdel -r [用戶] 刪除用戶的同時刪除用戶家目錄
3.4 usermod更改用戶屬性
usermod 命令修改系統帳戶文件來反映通過命令行指定的變化
1. 首先看看usermod都是有哪些參數
[root@hxweb101 ~]$ usermod --help Usage: usermod [options] LOGIN Options: -a, --append append the user to the supplemental GROUPS (use only with -G) -c, --comment COMMENT new value of the GECOS field -d, --home HOME_DIR new home directory for the user account -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE -f, --inactive INACTIVE set password inactive after expiration to INACTIVE -g, --gid GROUP force use GROUP as new primary group -G, --groups GROUPS new list of supplementary GROUPS -h, --help display this help message and exit -l, --login NEW_LOGIN new value of the login name -L, --lock lock the user account -m, --move-home move contents of the home directory to the new location (use only with -d) -o, --non-unique allow using duplicate (non-unique) UID -p, --password PASSWORD use encrypted password for the new password -s, --shell SHELL new login shell for the user account -u, --uid UID new UID for the user account -U, --unlock unlock the user account -Z, --selinux-user new selinux user mapping for the user account
-a|--append ##把用戶追加到某些組中,僅與-G選項一起使用 -c|--comment ##修改/etc/passwd文件第五段comment -d|--home ##修改用戶的家目錄通常和-m選項一起使用 -e|--expiredate ##指定用戶帳號禁用的日期,格式YY-MM-DD -f|--inactive ##用戶密碼過期多少天后采用就禁用該帳號,0表示密碼已過期就禁用帳號,-1表示禁用此功能,默認值是-1 -g|--gid ##修改用戶的gid,改組一定存在 -G|--groups ##把用戶追加到某些組中,僅與-a選項一起使用 -l|--login ##修改用戶的登錄名稱 -L|--lock ##鎖定用戶的密碼 -m|--move-home ##修改用戶的家目錄通常和-d選項一起使用 -s|--shell ##修改用戶的shell -u|--uid ##修改用戶的uid,該uid必須唯一 -U|--unlock ##解鎖用戶的密碼
實例說明:
比如我有hexu 和 www 用戶和用戶組:
- www創建為內部用戶禁止遠程登陸,用於運行web service。
- hexu創建為外部使用用戶,用於登陸、調試或是上傳代碼等。
這時可以考慮hexu添加到www用戶組,並將代碼目錄允許組讀寫:
$ usermod -a -G www hexu # 將hexu添加到www用戶組 $ chmod -R ug+w /data/code # 將目錄添加用戶組可寫
下面是網友的整理,轉過來了: 示例(Examples):
#1,新建用戶test,密碼test,另外添加usertest組 $ useradd test $ echo "test" | passwd --stdin test $ groupadd usertest #2,把test用戶加入usertest組 $ usermod -aG usertest test ##多個組之間用空格隔開 $ id test uid=500(test) gid=500(test) groups=500(test),501(usertest) #3,修改test用戶的家目錄 $ usermod -md /home/usertest $ ls /home usertest #4,修改用戶名 $ usermod -l testnew(新用戶名稱) test(原來用戶名稱) $ id testnew uid=500(testnew) gid=500(test) groups=500(test),501(usertest) #5,鎖定testnew的密碼 $ sed -n '$p' /etc/shadow testnew:$6$1PwPVBn5$o.MIEYONzURQPvn/YqSp69kt2CIASvXhOnjv/t Z5m4NN6bJyLjCG7S6vmji/PFDfbyITdm1WmtV45CfHV5vux/:15594:0:99999:7::: $ usermod -L testnew $ sed -n '$p' /etc/shadow testnew:!$6$1PwPVBn5$o.MIEYONzURQPvn/YqSp69kt2CIASvXhOnjv/t Z5m4NN6bJyLjCG7S6vmji/PFDfbyITdm1WmtV45CfHV5vux/:15594:0:99999:7::: #6,解鎖testnew的密碼 $ usermod -U testnew $ sed -n '$p' /etc/shadow testnew:$6$1PwPVBn5$o.MIEYONzURQPvn/YqSp69kt2CIASvXhOnjv/t Z5m4NN6bJyLjCG7S6vmji/PFDfbyITdm1WmtV45CfHV5vux/:15594:0:99999:7::: #7,修改用戶的shell $ sed '$!d' /etc/passwd testnew:x:500:500::/home/usertest:/bin/bash $ usermod -s /bin/sh testnew $ sed -n '$p' /etc/passwd testnew:x:500:500::/home/usertest:/bin/sh # 也可以手動編輯 vi /etc/passwd 找到testnew編輯保存即可 $ vi /etc/password #8,修改用戶的UID $ usermod -u 578 testnew (UID必須唯一) $ id testnew uid=578(testnew) gid=500(test) groups=500(test),501(usertest) #9,修改用戶的GID $ groupadd -g 578 test1 $ usermod -g 578 testnew (578組一定要存在) $ id testnew uid=578(testnew) gid=578(test1) groups=578(test1),501(usertest) #10,指定帳號過期日期 $ sed -n '$p' /etc/shadow testnew:$6$1PwPVBn5$o.MIEYONzURQPvn/YqSp69kt2CIASvXhOnjv/t Z5m4NN6bJyLjCG7S6vmji/PFDfbyITdm1WmtV45CfHV5vux/:15594:0:99999:7::: $ usermod -e 2012-09-11 testnew $ sed -n '$p' /etc/shadow testnew:$6$1PwPVBn5$o.MIEYONzURQPvn/YqSp69kt2CIASvXhOnjv/t Z5m4NN6bJyLjCG7S6vmji/PFDfbyITdm1WmtV45CfHV5vux/:15594:0:99999:7::15594: 11,指定用戶帳號密碼過期多少天后,禁用該帳號 $ usermod -f 0 testnew $ sed -n '$p' /etc/shadow testnew:$6$1PwPVBn5$o.MIEYONzURQPvn/YqSp69kt2CIASvXhOnjv/t Z5m4NN6bJyLjCG7S6vmji/PFDfbyITdm1WmtV45CfHV5vux/:15594:0:99999:7:0:15594:
注意(caution): usermod不允許你改變正在線上的使用者帳號名稱。當usermod用來改變userID,必須確認這名user沒在電腦上執行任何程序
/etc/passwd user_name:x:uid:gid:commnet:home:shell
/etc/shadow username:passwd:lastchg:min:max:warn:inactive:expire:flag
- –用戶名
- –密碼
- –從1970年1月1日起到上次修改密碼所經過的天數
- –密碼再過幾天可以被變更(0表示隨時可以改變)
- –密碼再過幾天必須被變更(99999表示永不過期)
- –密碼過期前幾天提醒用戶(默認為一周)
- –密碼過期幾天后帳號被禁用
- –從1970年1月1日算起,多少天后賬號失效
- 查看用戶屬性
[root@centos7-1 ~]# id root uid=0(root) gid=0(root) 組=0(root)
3.5 用戶密碼管理
[root@centos7-1 ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd passwd擁有set_uid權限,可以讓其他用戶也擁有root權限使用該密碼
- passwd [用戶]更改密碼
- cat /etc/shadow配置文件
配置文件第二列為用戶密碼
如果為 *,則表示該用戶密碼被鎖定
如果為!,則表示該用戶密碼為空。
[root@centos7-1 ~]# cat /etc/shadow root:$6$964uE1k0sQeev/EK$fHR5bvMDuvoQ/CaHprM4r5U48hCtZ8yty8aPSQe.z8NlvrZESJrKcbbTixvetRiJbz4.8Z24t4Fy9UzP1zSds.::0:99999:7::: bin:*:17110:0:99999:7::: daemon:*:17110:0:99999:7::: adm:*:17110:0:99999:7::: lp:*:17110:0:99999:7::: sync:*:17110:0:99999:7::: shutdown:*:17110:0:99999:7::: halt:*:17110:0:99999:7::: mail:*:17110:0:99999:7::: operator:*:17110:0:99999:7::: games:*:17110:0:99999:7::: ftp:*:17110:0:99999:7::: nobody:*:17110:0:99999:7::: systemd-bus-proxy:!!:17315:::::: systemd-network:!!:17315:::::: dbus:!!:17315:::::: polkitd:!!:17315:::::: colord:!!:17315:::::: abrt:!!:17315:::::: libstoragemgmt:!!:17315:::::: rpc:!!:17315:0:99999:7::: setroubleshoot:!!:17315:::::: rtkit:!!:17315:::::: rpcuser:!!:17315:::::: nfsnobody:!!:17315:::::: usbmuxd:!!:17315:::::: tss:!!:17315:::::: geoclue:!!:17315:::::: ntp:!!:17315:::::: chrony:!!:17315:::::: mysql:!!:17315:::::: sssd:!!:17315:::::: pulse:!!:17315:::::: gdm:!!:17315:::::: postfix:!!:17315:::::: sshd:!!:17315:::::: tcpdump:!!:17315:::::: gbj:!!:17324:0:99999:7::: ggg:!!:17325:0:99999:7::: temence:!!:17328:0:99999:7::: ghj:!!:17328:0:99999:7:::
- 鎖定用戶
1. passwd -l [用戶]鎖定用戶: [root@centos7-1 ~]# passwd -l temence 鎖定用戶 temence 的密碼 。 passwd: 操作成功 [root@centos7-1 ~]# tail -5 /etc/shadow tcpdump:!!:17315:::::: gbj:!!:17324:0:99999:7::: ggg:!!:17325:0:99999:7::: temence:!!$6$4ppsCRXr$eFNutGrc9zF64UrO3cE2uOL2mDOUpjKmzPfZ7kQorNiU2YUeBvzipNDpVR8uv/0qsL8eroCW8yzGtirGU.dj50:17328:0:99999:7:::
2. usermod -L [用戶]鎖定用戶: [root@centos7-1 ~]# usermod -L temence [root@centos7-1 ~]# tail -5 /etc/shadow tcpdump:!!:17315:::::: gbj:!!:17324:0:99999:7::: ggg:!!:17325:0:99999:7::: temence:!$6$4ppsCRXr$eFNutGrc9zF64UrO3cE2uOL2mDOUpjKmzPfZ7kQorNiU2YUeBvzipNDpVR8uv/0qsL8eroCW8yzGtirGU.dj50:17328:0:99999:7:::
- 解鎖用戶
1. passwd -u [用戶]解鎖用戶: [root@centos7-1 ~]# passwd -u temence 解鎖用戶 temence 的密碼。 passwd: 操作成功
2. usermod -U [用戶]解鎖用戶: [root@centos7-1 ~]# tail -5 /etc/shadow tcpdump:!!:17315:::::: gbj:!!:17324:0:99999:7::: ggg:!!:17325:0:99999:7::: temence:$6$4ppsCRXr$eFNutGrc9zF64UrO3cE2uOL2mDOUpjKmzPfZ7kQorNiU2YUeBvzipNDpVR8uv/0qsL8eroCW8yzGtirGU.dj50:17328:0:99999:7:::
- 腳本更改密碼
此方法可以用作shell腳本更改用戶密碼。
1. passwd --stdin更改密碼: [root@centos7-1 ~]# echo "12345" |passwd --stdin ggg 更改用戶 ggg 的密碼 。 passwd:所有的身份驗證令牌已經成功更新。
2. echo -e更改密碼:\n自動換行 [root@centos7-1 ~]# echo -e "12345\n12345" |passwd temence 更改用戶 temence 的密碼 。 新的 密碼:無效的密碼: 密碼少於 8 個字符 重新輸入新的 密碼:passwd:所有的身份驗證令牌已經成功更新。
3.6 mkpasswd命令
用戶生成密碼的工具
[root@Temence ~]# yum install -y expect
-l 指定密碼長度,默認位9位 -s 指定特殊符號個數 -d 指定數字個數 -c 指定最少小寫字母個數 -C 指定最少大寫字母個數
- 隨機生成一個15位密碼
@Ssa^p=/35Xob!d
3.7 su命令
su - [用戶],切換用戶
- -參數
“-”這個字符的作用是,加上后會初始化當前用戶的各種環境變量
- -c 參數
在不切換用戶的情況下執行某一條命令
[root@centos7-1 ~]# su - -c "touch /home/ggg/2017" ggg [root@centos7-1 ~]# ll /home/ggg/2017 -rw-rw-r-- 1 ggg ggg 0 6月 12 22:35 /home/ggg/2017
- 切換無家目錄的用戶解決辦法:
[root@centos7-1 ~]# useradd -M 2017 [root@centos7-1 ~]# su - 2017 su: 警告:無法更改到 /home/2017 目錄: 沒有那個文件或目錄 -bash-4.2$ 創建2017用戶家目錄並更改屬主、屬組: [root@centos7-1 ~]# id 2017 uid=1006(2017) gid=1006(2017) 組=1006(2017) [root@centos7-1 ~]# mkdir /home/2017 [root@centos7-1 ~]# chown 2017:2017 /home/2017/ [root@centos7-1 ~]# su 2017 bash-4.2$ 此時還是無法正常切換用戶,原因在於用戶家目錄中缺少配置文件,拷貝一份系統模板文件即可: [root@centos7-1 ~]# cp /etc/skel/.bash* /home/2017/ [root@centos7-1 ~]# ls /home/2017/ [root@centos7-1 ~]# su - 2017 上一次登錄:一 6月 12 22:59:04 CST 2017pts/1 上
3.8 sudo 命令
sudo 是允許讓普通用戶臨時執行一些或者全部的root命令的一個工具,如halt,reboot,su等等。這樣不僅減少了root用戶的登錄 和管理時間,同樣也提高了安全性。
-s 以目標用戶身份運行 shell,完全等於sudo /bin/bash,約等於sudo su ; -i 以目標用戶身份運行一個登錄 shell,切換至root同時切換環境變量PATH,約等於sudo su -; -l 列出目前用戶可執行與無法執行的指令; -u 指定用戶作為新的身份,默認為root; -b 在后台執行命令
- visudo命令
使用visudo命令去編輯相關的配置文件/etc/sudoers。
- 添加授權用戶
## Allow root to run any commands anywhere root ALL=(ALL) ALL ggg ALL=(root) NOPASSWD:/usr/bin/ls,/user/bin/mv,/usr/bin/cp 第一部分是用戶名,指定哪個用戶將擁有sudo的權利 第二部分右邊的ALL其實是一個用戶名,即,test用戶可以切換到哪個用戶的身份,如果是ALL就表示所有用戶。 第三部分ALL,用來指定test用戶可以使用的命令都有哪些,如果是多個命令,用英文逗號隔開。可以在前面添加NOPASSWD 不使用密碼。
- 添加授權用戶組
%wheel ALL=(ALL) ALL 以組的形式添加。 ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL %ggg ALL=(root) NOPASSWD: ALL
- 使用別名添加授權
User_Alias USER_SU = test, test1, test2
Cmnd_Alias SU = /bin/su
USER_SU ALL=(ALL) NOPASSWD: SU
- 總結:
sudo -i: 為了頻繁的執行某些只有超級用戶才能執行的權限,而不用每次輸入密碼,可以使用該命令。提示輸入密碼時該密碼為當前賬戶的密碼。沒有時間限制。執行該命令后提示符變為“#”而不是“$”。想退回普通賬戶時可以執行“exit”或“logout” 。 其實,還有幾個類似的用法: sudo /bin/bash : 這個命令也會切換到root的bash下,但不能完全擁有root的所有環境變量,比如PATH,可以擁有root用戶的權限。這個命令和 sudo -s 是等同的。 sudo -s : 如上 sudo su : 這個命令,也是登錄到了root,但是並沒有切換root的環境變量,比如PATH。 sudo su - : 這個命令,純粹的切換到root環境下,可以這樣理解,先是切換到了root身份,然后又以root身份執行了 su - ,這個時候跟使用root登錄沒有什么區別。這個結果貌似跟sudo -i 的效果是一樣的,但是也有不同,sudo 只是臨時擁有了root的權限,而su則是使用root賬號登錄了linux系統。 所以,我們再來總結一下: sudo su - 約等於 sudo -i sudo -s 完全等於 sudo /bin/bash 約等於 sudo su sudo 終究被一個"臨時權限的帽子"扣住,不能等價於純粹的登錄到系統里。
- sudo 擴展
sudo與su比較
http://www.apelearn.com/bbs/thread-7467-1-1.html
sudo配置文件樣例 www.opensource.apple.com/source/sudo/sudo-16/sudo/sample.sudoers
sudo -i 也可以登錄到root嗎? http://www.apelearn.com/bbs/thread-6899-1-1.html
3.9 限制Root遠程登陸
vim /etc/ssh/sshd_config修改ssh配置文件,禁用root遠程登陸
-
更改ssh配置文件
修改配置文件/etc/sshd/sshd_config,在文件中查找PermitRootLogin yes這句話, 修改為PermitRootLogin no -
重啟sshd服務
[root@centos7-1 ~]# systemctl restart sshd.service
/etc/skel 目錄
/etc/skel作用:
1,可以把通知的內容放到skel,讓登入的人去看
2,統一初始化心用戶的環境變量
3、面試題:出現-bash-4.1$問題原因及解決方法
知識點:
/etc/login.defs配置文件
這個文件是用來定義創建新用戶
/etc/default/useradd文件
這個文件是在使用useradd添加用戶時,用戶信息默認的配置文件,可以使用“useradd -D (參數)-s /bin/bash”
[root@bogon ~]# more /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes