06-Linux用户管理
生活随笔
收集整理的這篇文章主要介紹了
06-Linux用户管理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 用戶
1.1 基本概述
用戶: 指的是能夠正常登錄Linux或Windows系統的使用者. (可以理解為你租了房子, 能夠正常入駐) Linux與Windows系統的用戶區別: 本質都是登陸系統, bus Windows系統中可以創建多個用戶, 但不允許同一時刻多個用戶登陸系統, Linux系統則允許同一時刻多個用戶同時登陸, 登陸后相互之間操作并不影響.1.2 Linux下創建用戶的作用
1. 通常在公司是使用普通用戶管理服務器, 因為root權限過大, 容易造成故障. 2. 系統上的每一個進程(運行的程序), 都需要一個的用戶運行, 可以創建特定的用戶運行某些程序.1.3 用戶與分組
一個用戶只能屬于一個基本組, 可以有多個附加組. 每個組擁有一定的權限, 將用戶添加到某個組, 用戶就有了該組擁有的權限.2. 查看用戶信息
2.1 查看用戶信息命令
查看用戶信息命令: id [選項] [用戶] uid: 用戶id, 系統只能識別uid, 不能識別名字, 人看名字 gid:組id groups: 用戶所屬附加組的id context: 信息 # 查看當前用戶信息(如果省略用戶名, 則id命令顯示有關當前登錄用戶的信息.) [root@kid ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 # 查看指定用戶信息 [root@kid ~]# id 用戶名 ... # 目前只有一個root用戶 ps: 每一個進程都會由一個用戶身份運行 [root@kid ~]# ps aux|less root 279 0.0 0.0 0 0 ? S< 14:13 0:00 [nfit] root 280 0.0 0.0 0 0 ? S< 14:13 0:00 [mpt/0]2.2 查看用戶信息文本
Linux系統中: 用戶的信息存放在/etc/passwd, (記錄了用戶的信息, 但沒有密碼信息, 一行為一個用戶). 密碼被存放在/etc/shadow中, (加密后的密碼). * 這兩個文件非常的重要, 不要輕易刪除與修改. # 查看第一行的文本信息 [root@kid ~]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash # 1 2 3 4 5 6 7 # /etc/passwd 配置文件解釋如下圖 # 查看用戶密碼文本 [root@kid ~]# head -1 /etc/shadow root:$6$v0xj2KgObMg2wBhC$Ba2rnT2w4F18i0arTc/SDm6RBlJ0u.B38neZ15Ma6P.hw9yASOLKwKNu2VKXkOtUPtmdiiifW/eMeeV/uDBJu1::0:99999:7:::# 配置文件解釋如下圖 ps: 使用change修改密碼過期時間示例: https://kid.cnblogs.com/xuliangwei/p/10679004.html2.3 系統對用戶的ID的約定
| 0 | 超級管理員, 最高權限, 有著極強的破壞能力 |
| 1~200 | 系統用戶, 用來運行系統自帶的進程, 默認已創建 |
| 201~999 | 系統用戶, 用來運行用戶安裝的程序, 所以此類用戶無需登錄系統 |
| 1000+ | 普通用戶, 正常可以登陸系統的用戶, 權限比較小, 能執行的任務有限 |
3. 新增用戶命令
新增用戶命令: useradd [選項] [用戶名] (注意: adduser命令軟鏈接指向useradd命令) 選項 -u 指定要創建用戶的UID,不允許沖突 (某些UID已經被使用)-g 指定要創建用戶默認組 -G 指定要創建用戶附加組, 逗號隔開可添加多個附加組 -d 指定要創建用戶家目錄 -s 指定要創建用戶的bash shell [/bin/bash(默認使用的) /sbin/nologin (不可以登入, 用于運行特定軟件)]-c 指定要創建用戶注釋信息 -M 給創建的用戶不創建家目錄 -r 創建系統賬戶, 默認無家目錄3.1 新增用戶組命令
新增用戶組命令:groupadd [選項] [組名] 選項:-g:設定組的 ID第九小節詳細介紹...3.2 新增用戶練習
新增xx用戶 [root@kid ~]# useradd xx[root@kid ~]# id xx uid=1001(xx) gid=1004(xx) groups=1004(xx)# 查看倒數第一行的信息, 新添加的用戶信息, 已追加的方式添加到文本中. [root@kid ~]# tail -1 /etc/passwd xx:x:1001:1004::/home/xx:/bin/bash # 按照配置文件創建用戶, 在/home/下創建用戶目錄, 默認使用的bash shi /bin/bash, 詳情見第七小節. 用戶名qz, UID5001, 基本組students, 附加組f1, f2 注釋信息:2022 new student,登陸shell: /bin/bash # 添加分組students f1 f2 [root@kid ~]# groupadd students [root@kid ~]# groupadd f1 [root@kid ~]# groupadd f2# 新增用戶 [root@kid ~]# useradd -u 5001 -g students -G f1,f2 -c "2022 new student" -s /bin/bash qz # 附加分組可以有多個使用,隔開 中間不允許有空格否則提示(useradd: group '' does not exist# 查看用戶信息 [root@kid ~]# id qz uid=5001(qz) gid=1000(students) groups=1000(students),1001(f1),1002(f2) 創建mysql系統用戶, -M不建立用戶家目錄 -s指定nologin使其用戶無法登陸系統 * 這個用戶賬戶用于運行特定的運行, 不需要有家目錄, 也不需要登入. # 新增用戶 [root@kid ~]# useradd mysql -M -s /sbin/nologin # 查看用戶信息 [root@kid ~]# id mysql uid=5002(mysql) gid=5002(mysql) groups=5002(mysql)4. 修改用戶信息
修改用戶信息命令: usermod [選項] [用戶名] 選項: -u 指定要修改用戶的UID -g 指定要修改用戶基本組 -G 指定要修改用戶附加組, 使用逗號隔開多個附加組, 覆蓋原有的附加組, -aG追加 -d 指定要修改用戶家目錄 -md 舊家搬新家 -s 指定要修改用戶的bash shell -c 指定要修改用戶注釋信息 -l 指定要修改用戶的登陸名 -L 指定要鎖定的用戶 -U 指定要解鎖的用戶 -md 移動環境(家目錄) # 1.檢查此前創建的qz用戶信息 [root@kid ~]# grep "qz" /etc/passwd qz:x:5001:1000:2022 new student:/home/qz:/bin/bash # 2. 修改qz用戶uid、gid, 附加組 -a表示追加 # 添加分組network, network [root@kid ~]# groupadd -g 5008 network [root@kid ~]# groupadd -g 5009 network [root@kid ~]# usermod -u 6001 -g 5008 -a -G 5009 qz [root@kid ~]# id qz uid=6001(qz) gid=5008(network) groups=5008(network),1001(f1),1002(f2),5009(devops) # 3.修改qz用戶的注釋信息, 用戶家目錄, 登錄shell, 登錄名 -l:改名字, -md, 移動環境 [root@kid ~]# usermod -c "x x x" -md /qz -s /bin/sh -l change_qz qz # 檢查是否修改成功 [root@kid ~]# grep "qz" /etc/passwd change_qz:x:6001:5008:x x x:/qz:/bin/sh # 4.鎖定用戶 # 為用戶設置密碼 為 123 [root@kid ~]# echo "123" |passwd --stdin change_qz Changing password for user change_qz. passwd: all authentication tokens updated successfully. # 鎖定用戶 [root@kid ~]# usermod -L change_qz # 使用change_qz用戶登入系統 ↓ SSH服務器拒絕了密碼 # 5.解鎖用戶 [root@kid ~]# usermod -U change_# 再次輸入密碼 123 登入成功5. 刪除用戶
刪除賬戶命令: userdel [選項] [用戶名] 選項:-r 刪除用戶同時刪除它的家目錄 (一般不會刪除用戶的家目錄, 刪除用戶即可, 用戶家目錄可能安裝一些需要使用的軟件...) # 1.刪除mysql用戶, 但不刪除用戶家目錄用戶郵箱 [root@kid ~]# userdel mysql [root@kid ~]# ls /var/spool/mail/ kid change_qz mysql#2.-r參數可以連同用戶家目錄一起刪除(慎用) [root@kid ~]# userdel -r change_qz6. 用戶相關命令
finger命名查詢用戶信息以及登錄信息(yum install finger -y), 示例: finger UserName [root@kid ~]# finger root Login: root Name: root Directory: /root Shell: /bin/bash On since Sun Aug 28 22:03 (CST) on tty1 20 hours 7 minutes idle On since Mon Aug 29 15:39 (CST) on pts/1 from 10.0.0.14 seconds idle Last login Mon Aug 29 17:53 (CST) on pts/0 from 10.0.0.1 No mail. No Plan. ________________________________________________________________________ 登錄名:root 名稱:root 目錄:/root Shell:/bin/bash 自8月28日星期日22:03(美國中部時間)起,tty1 20小時7分鐘空閑 自8月29日星期一15:39(CST)起,從10.0.0.1開始在pts/1上4秒空閑 最后一次登錄:8月29日星期一17:53(CST)從10.0.0.1開始在pts/0上 沒有郵件。 沒有計劃。 chfn命令修改用戶信息(其實是修改注釋), 示例: chfn UserName [root@kid ~]# chfn root Changing finger information for root. Name [root]: root Office []: python Office Phone []: 21 Home Phone []: 10086Finger information changed. [root@kid ~]# finger root Login: root Name: root Directory: /root Shell: /bin/bash # 多了這一行備注 Office: python, 21 Home Phone: x1-0086 On since Sun Aug 28 22:03 (CST) on tty1 20 hours 10 minutes idle On since Mon Aug 29 15:39 (CST) on pts/1 from 10.0.0.13 seconds idle Last login Mon Aug 29 17:53 (CST) on pts/0 from 10.0.0.1 No mail. No Plan. chsh命令修改用戶登錄Bash Shell, 示例: chsh UserName ps: /bin/下有bash 與 sh sh(Bourne Shell)是一個早期的重要shell, 1978年寫的 bash(Bourne-Again Shell)是一個為GNU計劃編寫的Unix shell。1987年寫的 # 創建用戶qz [root@kid ~]# useradd qz# 查看用戶信息 [root@kid ~]# cat /etc/passwd | grep 'qz' qz:x:5003:5003::/home/qz:/bin/bash# 修改登入bash [root@kid ~]# chsh qz Changing shell for qz. # 輸入新的bash所在路徑 New shell [/bin/bash]: /bin/sh Shell changed. # 查看用戶信息 [root@kid ~]# cat /etc/passwd | grep 'qz' qz:x:5003:5003::/home/qz:/bin/sh who 當前有哪些用戶登錄了 [root@kid ~]# who # tty1 文本模式模式 (VMware) root tty1 2022-08-28 22:03 # pts/1 偽(虛擬)終端 (xshell) root pts/1 2022-08-29 15:39 (10.0.0.1) whoami 查看當前有登入用戶名 [root@kid ~]# whoami root w 查看系統中當前活動的用戶 [root@kid ~]# w # 提示邊框太小無法展示, 將終端窗口拉伸一下 w: 69 column window is too narrow[root@kid ~]# w18:30:07 up 4:16, 2 users, load average: 0.01, 0.04, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 Sun22 4:07 0.21s 0.21s -bash root pts/0 10.0.0.1 18:26 7.00s 0.02s 0.00s w7. 創建用戶流程
* 1. useradd創建用戶時, 系統會以/etc/login.defs、/etc/defaults/useradd兩個配置文件作為參照物, 如果在創建用戶時指定了參數則會覆蓋/etc/login.defs、/etc/defaults/useradd文件默認配置, 如未指定則使用默認. [root@kid ~]# grep -Ev "^#|^$" /etc/login.defs [root@kid ~]# cat /etc/login.defs MAIL_DIR /var/spool/mail # 定義了郵件路徑放在哪 PASS_MAX_DAYS 99999 # 密碼過期時間 PASS_MIN_DAYS 0 # 密碼最少0天 PASS_MIN_LEN 5 # 密碼長度 PASS_WARN_AGE 7 # 7天提醒 UID_MIN 1000 UID_MAX 60000 SYS_UID_MIN 201 SYS_UID_MAX 999 GID_MIN 1000 GID_MAX 60000 SYS_GID_MIN 201 SYS_GID_MAX 999 CREATE_HOME yes # 是否創建home UMASK 077 USERGROUPS_ENAB yes # 用戶不指定組, 默認創建一個同名組 ENCRYPT_METHOD SHA512 # 密碼加密算法 [root@kid ~]# cat /etc/default/useradd GROUP=100 HOME=/home # 把用戶的家目錄建在/home中. INACTIVE=-1 # 是否啟用賬號過期停權,-1表示不啟用. EXPIRE= # 賬號終止日期,不設置表示不啟用. SHELL=/bin/bash # 新用戶默認所有的shell類型. SKEL=/etc/skel # 配置新用戶家目錄的默認文件存放路徑. CREATE_MAIL_SPOOL=yes # 創建mail文件. * 2. 當使用useradd創建用戶時, 創建的用戶家目錄下會存在 .bash_環境變量相關的文件, 這些環境變量文件默認從/etc/skel目錄中拷貝.這個默認拷貝環境變量位置是 由/etc/defaults/useradd配置文件中定義的. # 故障案例, 在當前用戶家目錄執行了rm -rf ., 下次登錄系統時出現-bash-4.1$, 如何解決! -bash-4.1$ cp -a /etc/skel/.bash ./ -bash-4.1$ exit # 重新連接即可恢復 [root@kid ~]#8. 設置、修改密碼
創建用戶后, 如需要使用該用戶登陸系統則需要為用戶設定密碼, 設定密碼使用passwd命令. 建議密碼復雜度高一些、長度大于10、出現各種特殊字符、無任何規律(不要出現簡單的弱口令, 很容易被入侵...)ps: 注意事項 1.普通用戶只允許變更自己的密碼, 無法修改其他人密碼, 并且密碼長度必須8位字符 2.管理員用戶允許修改任何人的密碼, 無論密碼長度多長或多短. * 1. 修改用戶密碼命令: passwd passwd # 給當前用戶修改密碼 passwd root # 給root用戶修改密碼 passwd qz # 給qz用戶修改密碼, 普通用戶只能自己修改自己 * 2. 非交互式修改密碼 [root@kid ~]# echo "123" | passwd --stdin qz Changing password for user qz. # passwd:所有身份驗證令牌都已成功更新。 passwd: all authentication tokens updated successfully. * 3. 批量創建100個用戶的shell腳本, 密碼都為123456 for i in {1..100} do useradd test$1 echo "123456" |passwd --stdin test$1 done * 4.系統內置變量生成隨機字符串(對隨機字符串進行md5加密) [root@kid ~]# echo $RANDOM|md5sum|cut -c 1-10 d09fe9b1xs [root@kid ~]# echo $(echo $RANDOM|md5sum |cut -c 5-14) |tee pass.txt| passwd --stdin qz * 5. mkpasswd生成隨機字符串, -l設定密碼長度,-d數子,-c小寫字母,-C大寫字母,-s特殊字符 # 需要安裝擴展包 [root@kid ~]# yum install -y expect [root@kid ~]# mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4 # 密碼↓ 2KS1!">cp% ps: 推薦密碼保存套件工具, 支持windows、MacOS、Iphone以及瀏覽器插件, Lastpass官方網站: https://kid.lastpass.com/zh9. 用戶組管理
9.1 組有類別
對于用戶來說, 組分以下兩種類別: 基本組: 用戶只能有一個基本組, 創建時可通過-g指定. 私有組: 創建用戶時未指定基本組則會創建一個默認的私有組(與用戶同名). 附加組: 基本組不能滿足授權要求, 創建附加組, 將用戶加入該組, 用戶可以屬于多個附加組.9.2 組的信息位置
用戶組的信息保存在 /etc/group (重點) 和 /etc/gshadow 兩個文件中. [root@kid ~]# head -1 /etc/group root:x:0: # /etc/group 配置文件解釋如下圖 [root@kid ~]# head -1 /etc/gshadow root::: # /etc/gshadow 配置文件解釋如下圖9.3 新增組
使用新增組命令: groupadd [-g GID] 組名 # 創建基本組, 不指定gid [root@kid ~]# groupadd no_gid # 查看倒數第一行的文本信息 [root@kid ~]# tail -n1 /etc/group no_gid:x:5010: # 創建基本組, 指定gid為5555 [root@kid ~]# groupadd -g 5555 yes_gid# 查看倒數第一行的文本信息 [root@kid ~]# tail -n1 /etc/group yes_gid:x:5555:# 創建系統組, gid從201-999 [root@kid ~]# groupadd -r sys_group [root@kid ~]# tail -n1 /etc/group sys_group:x:990:9.4 修改組
修改組命令: groupmod [選項] [組名] 選項:-g 修改組gid -n 修改組名稱 # 修改組id [root@kid ~]# groupmod -g 1111 no_gid [root@kid ~]# tail -1 /etc/group no_gid:x:1111: # 修改組名(把yes_gid名字改為active_group) [root@kid ~]# groupmod yes_gid -n active_group [root@kid ~]# tail -1 /etc/group active_group:x:5555:9.5 刪除組
刪除組命令: groupdel [選項] [組名]刪除組注意事項: 用戶正在使用的基本組與私有組, 無法直接刪除該組, (用戶正在使用這個組, 只有刪除用戶或者用戶變更, 解除對該組的占用, 方可刪除該組). 刪除用戶則會移除默認的私有組, 而不會移除基本組. # 刪除組 [root@kid ~]# groupdel active_group # 添加分組students f1 f2 (之前創建過qz就不要再執行了新增qz用戶的命令了) [root@kid ~]# groupadd students [root@kid ~]# groupadd f1 [root@kid ~]# groupadd f2# 新增用戶(指定基本組 students) [root@kid ~]# useradd -u 5001 -g students -G f1,f2 -c "2022 new student" -s /bin/bash qz # 查查用戶信息 [root@kid ~]# id qz uid=5001(qz) gid=1000(students) groups=1000(students),1001(f1),1002(f2)# 刪除用戶附加組 [root@kid ~]# groupdel f1 [root@kid ~]# groupdel f2 [root@kid ~]# id qz uid=5001(qz) gid=1000(students) groups=1000(students)# 無法刪除用戶基本組(這個組被用戶占用中...) [root@kid ~]# groupdel students groupdel: cannot remove the primary group of user 'qz'# 刪除用戶qz [root@kid ~]# userdel -r qz# 查看qz的基本組students(這個組不上私有組是基本組, 私有組的組名與用戶名一樣...) [root@kid ~]# cat /etc/group | grep 'students' students:x:1001:# 刪除qz的基本組students [root@kid ~]# groupdel students # 新建用戶沒有指定基本組則會默認創建私有組(私有組的組名與用戶名一致) [root@kid ~]# useradd xxx [root@kid ~]# id xxx uid=1000(xxx) gid=1003(xxx) groups=1003(xxx)# 刪除私有組 (這個組被用戶占用中...) [root@kid ~]# groupdel xxx groupdel: cannot remove the primary group of user 'xxx'# 刪除用戶 [root@kid ~]# userdel xxx # 查看私有組xxx(已經被移除) [root@kid ~]# cat /etc/group | grep 'xxx'9.6 設置組密碼
設置組密碼命令: gpasswd # 創建分組 [root@kid ~]# groupadd devops # 設置組密碼 [root@kid ~]# gpasswd devops Changing the password for group devops New Password: 123 Re-enter new password: 1239.7 切換基本組身份
切換基本組身份命令: newgrp # 創建用戶 [root@kid ~]# useradd qq # 查看用戶 信息 [root@kid ~]# id qq uid=1000(qq) gid=1004(qq) groups=1004(qq)# 切換普通用戶 [root@kid ~]# su - qq # 創建新文件,查看文件的屬主和屬組 [qq@kid ~]$ touch file_roots [qq@kid ~]$ ll file_roots -rw-rw-r--. 1 qq qq 0 Aug 29 21:20 file_roots# 使用newgrp切換到devops組 [lqz@kid ~]$ newgrp devops Password: # 創建文件, 檢查屬主和屬組 [qq@kid ~]$ newgrp devops Password: [qq@kid ~]$ touch file_test [qq@kid ~]$ ll total 0 -rw-rw-r--. 1 qq qq 0 Aug 29 21:20 file_roots -rw-r--r--. 1 qq devops 0 Aug 29 21:22 file_test # 后面創建的文件屬組是devops, 賬戶默認使用自己的基本組或私有組, 使用newgrp切換分組(臨時有效)# 用戶分組信息不會改變 [qq@kid ~]$ id qq uid=1000(qq) gid=1004(qq) groups=1004(qq)10. 用戶提權
往往公司的服務器對外都是禁止root用戶直接登錄, 所以通常使用的都是普通用戶. 使用普通用戶執行/sbin目錄下的命令時, 會發現沒有權限運行, 這種情況下我們無法正常的管理服務器, 那么如何才能不使用root用戶直接登錄系統, 同時又保證普通用戶能完成日常工作? 通過以下兩種方式: 1. su 切換用戶, 使用普通用戶登錄, 然后使用su命令切換到root. 優點:簡單 缺點:需要知道root密碼 2. sudo 提權, 當需要使用root權限時進行提權, 而無需切換至root用戶.優點:安全、方便 缺點:復雜* 在使用su切換前, 我們需要了解一些預備知識, 比如shell分類、環境變量配置文件有哪些10.1 Linux Shell介紹
1. Shell分類
Linux Shell主要分為如下幾類 : 交互式shell, 等待用戶輸入執行的命令(終端操作,需要不斷提示) 非交互式shell, 執行shell腳本, 腳本執行結束后shell自動退出 登陸shell, 需要輸入用戶名和密碼才能進入Shell, 日常接觸的最多的一種 非登陸shell, 不需要輸入用戶和密碼就能進入Shell,比如運行bash命令就會開啟一個新的會話窗口 # 切換用戶 [root@kid ~]# su qq # bash新開一個會話窗口并切換到該窗口(非登陸shell) [qq@kid ~]$ bash # 退出新開窗口到之前的窗口 [qq@kid ~]$ exit exit # 退到登入用戶的窗口(由此看出切換用戶其實是新開一個會話窗口) [qq@kid ~]$ exit exit # 在退就退出連接了 [root@kid ~]# exit logout2. shell配置文件
bash shell配置文件介紹(文件主要保存用戶的工作環境) 個人配置文件(當前用戶目錄下): ~/.bash_profile ~/.bashrc .全局配置文件: /etc/profile /etc/profile.d/*.sh /etc/bashrc profile類文件, 設定環境變量, 登陸前運行的腳本和命令. bashrc 類文件, 設定本地變量, 定義命令別名. ps: 如果全局配置和個人配置產生沖突,以個人配置為準。登陸系統后, 環境變量配置文件的應用順序: 登錄式shell配置文件執行順序: /etc/profile-> /etc/profile.d/*.sh -> ~/.bash_profile -> ~/.bashrc-> /etc/bashrc 非登陸式shell配置文件執行順序: ~/.bashrc -> /etc/bashrc -> /etc/profile.d/*.sh 驗證方法: 使用echo在每行添加一個輸出即可.10.2 切換用戶
su命令切換用戶有什么關系? su - username 屬于登陸式shell, su username 屬于非登陸式shell, 區別在于加載的環境變量不一樣. su username 屬于非登陸式shell選項-絕對切換目錄時時候, 加載當前用戶的環境, 切換到當前用戶的家目錄中. 沒有選項-執行切換用戶命令不會目錄不會發生改變.普通用戶輸入: su - 可以直接切換至root用戶, 但需要輸入root用戶的密碼. 超級管理員root用戶輸入: su - username 切換普通用戶不需要輸入任何密碼. # 普通用戶使用su切換root [qq@kid ~]$ su Password: [root@kid qq]# pwd /home/qq # 普通用戶使用su -切換到root, 會加載root的環境變量 [qq@kid ~]$ su - Password: Last login: Mon Aug 29 22:18:41 CST 2022 on pts/0 [root@kid ~]# pwd /root # 以某個用戶的身份執行某個服務(不會切換用戶), 使用命令: su - 用戶 -c 命令 # ifconfig 命令需要安裝 net-tools [root@kid ~]# yum install net-tools -y # 查看網卡信息 [root@kid ~]# su - qq -c 'ifconfig' ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 10.0.0.128 netmask 255.255.255.0 broadcast 10.0.0.255inet6 fe80::2f36:687e:30de:1e0 prefixlen 64 scopeid 0x20<li ...# 查看qq的home目錄下的文件 [root@kid ~]# su - qq -c 'ls ~' file_roots file_roots2 file_test # pstree命令以樹狀圖顯示進程間的關系 [root@kid ~]# yum provides pstree ... [root@kid ~]# yum install psmisc -y ... [root@kid ~]# pstree systemd─┬─NetworkManager─┬─dhclient│ └─2*[{NetworkManager}]├─VGAuthService├─auditd───{auditd}├─chronyd├─crond├─dbus-daemon───{dbus-daemon}├─firewalld───{firewalld}├─login───bash───vi├─lvmetad├─master─┬─pickup│ └─qmgr├─polkitd───6*[{polkitd}]├─rsyslogd───2*[{rsyslogd}]├─sshd───sshd───bash───su───bash───su───bash───su───bash─┬─su│ └─su───bash───pstree├─systemd-journal├─systemd-logind├─systemd-udevd├─tuned───4*[{tuned}]└─vmtoolsd───2*[{vmtoolsd}] # 關閉root遠程登陸, 普通用戶登進來, su - 切換到root用戶 [root@kid ~]# vim /etc/ssh/sshd_config # 搜索 :/PermitRootLogin # 設成no, wq保存退出 PermitRootLogin yes10.3 提權
su命令在切換用戶身份時, 如果每個普通用戶都能拿到root用戶的密碼, 當其中某個用戶不小心泄漏了root的密碼, 那系統會變得非常不安全.為了改進這個問題, 從而產生了sudo這個命令. # 快速配置sudo方式 # 切換到普通用戶 [root@kid ~]# su - qq Last login: Mon Aug 29 22:29:06 CST 2022 on pts/0 [qq@kid ~]$ pwd /home/qq# 查看日志文件 [qq@kid ~]$ tail -f /var/log/secure # 提示沒有權限 tail: cannot open ‘/var/log/secure’ for reading: Permission denied tail: no files remaining# 在root下把qq用戶加到wheel組中 wheel擁有一些權限 [root@kid ~]# usermod qq -G wheel # 檢查普通用戶能提權的命令 [qq@kid root]$ sudo -l [sudo] password for qq: Matching Defaults entries for qq on kid:!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIRLS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENTLC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSETXAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin# 用戶qq可以在kid上運行以下命令: User qq may run the following commands on kid: # (全部)全部(ALL) ALL# 為qq用戶設置密碼123 [root@kid ~]# passwd qq Changing password for user qq. New password: 123 # 忽略這個提示 BAD PASSWORD: The password is shorter than 8 characters Retype new password: 123 passwd: all authentication tokens updated successfully.# 切換用戶 [root@node1 ~]$ sudo tail -f /var/log/secure # sudo 審計日志 [qq@kid ~]$ sudo tail -f /var/log/secure # 提示 We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:#1) Respect the privacy of others.#2) Think before you type.#3) With great power comes great responsibility.#1) 尊重他人的隱私。#2) 在你打字之前先想一想。#3) 權力越大,責任越大。# 輸入當前賬戶的密碼不上root的密碼, 如果沒有密碼會提示, 直接回車會提示 Sorry, try again. [sudo] password for qq: 123 # 日志的內容 Aug 29 22:41:41 kid su: pam_unix(su-l:session): session opened for user qq by root(uid=0) Aug 29 22:42:12 kid sudo: pam_unix(sudo:auth): authentication failure; logname=root uid=1000 euid=0 tty=/dev/pts/0 ruser=qq rhost= user=qq 普通用戶不設置密碼提權會出錯!10.4 提權限制
提升后權限太大, 能否有辦法限制僅開啟某個命令的使用權限? 其他命令不允許? (提權后只允許執行特定的命令) 多用戶多角色多命令配置, 需求如下:| ops1 ops2 | 運維 | 網絡命令:ifconfig/ping 軟件命令:rpm/yum 服務命令:service/systemctl 進程命令:kill/killall |
| dev1 dev2 | 開發 | 網絡命令:ifconfig/ping 服務命令:service/systemctl |
1. 方式1
編輯sudo的配置文件 /etc/sudoers # 第1步 創建用戶與分組并配置密碼 [root@kid ~]# useradd ops1 [root@kid ~]# useradd ops2 [root@kid ~]# useradd dev1 [root@kid ~]# useradd dev2# 設置密碼(必須) [root@kid ~]# echo "123" |passwd --stdin ops1 Changing password for user ops1. passwd: all authentication tokens updated successfully.[root@kid ~]# echo "123"|passwd --stdin ops2 Changing password for user ops2. passwd: all authentication tokens updated successfully.[root@kid ~]# echo "123"|passwd --stdin dev1 Changing password for user dev1. passwd: all authentication tokens updated successfully.[root@kid ~]# echo "123"|passwd --stdin dev2 Changing password for user dev2. passwd: all authentication tokens updated successfully.# 創建分組并設置密碼 [root@kid ~]# groupadd DEV # 第2步 使用visudo命令來編輯sudo的配置文件, 命令等同于 vi /etc/sudoers [root@kid ~]# visudo # 將下面代碼復制到文件中(末尾即可) # 定義用戶組(SPS DEV 與 group沒有關系) # 用戶別名 OPS = ops1,ops2 User_Alias OPS = ops1,ops2 # 用戶別名 DEV = ops1,ops2 User_Alias DEV = dev1,dev2# 定義可執行的命令組 # 網卡命令可以執行ifconfig, ping命令 Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping # 軟件類命令可u執行 rpm yum命令 Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum # 服務類命令可以執行 service, systemctl start命令 Cmnd_Alias SERVICES = /sbin/service, /usr/bin/systemctl start # 進程類命令可u執行 kill, killall命令 Cmnd_Alias PROCESSES = /bin/kill, /usr/bin/kill, /usr/bin/killall# 將用戶組合命令組進行關聯(OPS可以執行上面四類命令, DEV可以執行軟件類, 服務類命令) OPS ALL=(ALL) NETWORKING,SOFTWARE,SERVICES,PROCESSES DEV ALL=(ALL) SOFTWARE,SERVICES # 3.登陸對應的用戶使用 sudo -l 驗證權限 [root@kid ~]# su - ops1 # 查看權限 [ops1@kid ~]$ sudo -l # 提示權限越大責任越大... We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:#1) Respect the privacy of others.#2) Think before you type.#3) With great power comes great responsibility.# 輸入用戶密碼 [sudo] password for ops1: Matching Defaults entries for ops1 on kid:!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset,env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIRUSERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENTLC_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# 用戶ops1可以在kid上運行以下命令:(剛才配置的所有命令, dev就不測試了) User ops1 may run the following commands on kid:(ALL) /sbin/ifconfig, /bin/ping, /bin/rpm, /usr/bin/yum, /sbin/service, /usr/bin/systemctlstart, /bin/kill, /usr/bin/kill, /usr/bin/killall2. 方式2
使用groupadd添加組, 然后給組分配sudo的權限, 如果有新用戶加入, 直接將用戶添加到該組. # 1.添加兩個真實的系統組, group_dev group_ops [root@kid ~]# groupadd group_dev [root@kid ~]# groupadd group_ops # 2.添加四個用戶, 并設置分組 group_ops(user_a user_b) group_dev(user_c user_d) [root@kid ~]# useradd user_a -G group_dev [root@kid ~]# useradd user_b -G group_dev [root@kid ~]# useradd user_c -G group_ops [root@kid ~]# useradd user_d -G group_ops # 3.設置密碼(必須) [root@kid ~]# echo "1" | passwd --stdin user_a Changing password for user user_a. passwd: all authentication tokens updated successfully. [root@kid ~]# echo "1" | passwd --stdin user_b Changing password for user user_b. passwd: all authentication tokens updated successfully. [root@kid ~]# echo "1" | passwd --stdin user_c Changing password for user user_c. passwd: all authentication tokens updated successfully. [root@kid ~]# echo "1" | passwd --stdin user_d Changing password for user user_d. passwd: all authentication tokens updated successfully.# 4.在sudo中配置規則 (將方法一的代碼替換為下列代碼) [root@kid ~]# visudo # 定義可執行的命令組 # 網卡命令可以執行ifconfig, ping命令 Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping # 軟件類命令可u執行 rpm yum命令 Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum # 服務類命令可以執行 service, systemctl start命令 Cmnd_Alias SERVICES = /sbin/service, /usr/bin/systemctl start # 進程類命令可u執行 kill, killall命令 Cmnd_Alias PROCESSES = /bin/kill, /usr/bin/kill, /usr/bin/killall# 將用戶組合命令組進行關聯(OPS可以執行上面四類命令, DEV可以執行軟件類, 服務類命令) %group_ops ALL=(ALL) NETWORKING,SOFTWARE,SERVICES,PROCESSES %group_dev ALL=(ALL) SOFTWARE,SERVICES # 5.檢查sudo是否配置有錯 [root@kid ~]# visudo -c /etc/sudoers: parsed OK # 6.檢查user_a 的權限 [user_a@kid ~]$ sudo -l... # 用戶ops1可以在kid上運行以下命令:(剛才配置的所有命令, 其他的就不測試了) User user_a may run the following commands on kid:(ALL) /sbin/ifconfig, /bin/ping, /bin/rpm, /usr/bin/yum, /sbin/service, /usr/bin/systemctlstart, /bin/kill, /usr/bin/kill, /usr/bin/killall10.4 sudo命令執行流程
1. 普通用戶執行sudo命令時, 會檢查/var/db/sudo是否存在時間戳緩存 2. 如果存在則不需要輸入密碼, 否則需要輸入用戶與密碼 3. 輸入密碼會檢測是否該用戶是否擁有該權限 4. 如果有則執行, 否則報錯退出10.5 系統內置命令提權報錯
問題描述: cd到/etc/docker, 提示權限不夠的錯誤, 使用sudo cd /etc/docker時, 提示sudo: cd:找不到命令.問題分析: cd不是一個應用程序而是Linux內建的命令, 而sudo僅僅只對應用程序起作用。>type cd cd is a shell builtin. cd是一個內置的shell命令.sudo foo 只意味著以root權限運行foo程序 所以, sudo cd /etc/docker會報sudo: cd:找不到命令。解決方法: 使用sudo -i命令提升用戶權限 > sudo -i > cd /etc/docker 使用sudo -s命令打開特殊shell(使用exit命令退出shell) > sudo -s > cd /etc/docker作者:craneyuan 鏈接:https://www.jianshu.com/p/d172a92475f1 來源:簡書 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。總結
以上是生活随笔為你收集整理的06-Linux用户管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CAN总线通信硬件原理图(采用TJA10
- 下一篇: 显卡设置导致osg中数字显示不全问题的解