Linux是個多用戶多任務的分時操作系統,因此要使用系統資源的用戶都必須先向系統管理員申請一個賬號,然后以這個賬號的身份進入系統。用戶的賬號一方面能幫助系統管理員對使用系統的用戶進行跟蹤,并控制他們對系統資源的訪問與限制,并為用戶提供安全性保護。每個用戶賬號都擁有一個惟一的用戶名(UID)和用戶口令(PASSWD)。用戶在登錄時鍵入正確的用戶名和口令后,才能進入系統和自己的主目錄。
實現用戶賬號的管理,要完成的工作主要有如下幾個方面:
-
用戶賬戶的添加、刪除、管理
-
用戶口令的管理
-
用戶以及組的管理
一、Linux用戶的添加、刪除、管理
1、Linux用戶的添加
Linux如何添加用戶呢,添加用戶后如何認證呢
Linux添加用戶自帶著兩個命令useradd和adduser,接下來將的是如何使用命令創建用戶
useradd 命令
簡介: useradd - create a new user or update default new user information
格式: useradd [options] LOGIN useradd -D useradd -D [options]
選項: -c"COMMENT":用戶的注釋信息,例如用戶的家庭地址、電話、公司地址等 -d HOME_DIR:指定的用戶的家目錄,必須事先不存在 -g GID:指明用戶所屬基本組,可為命名為組名或GID -G GROUP1[,GROUP2,...]:為用戶指明附加組,組必須事先存在 -N:不創建私用組做主組,使用users組做主組 -u uid:設置用戶的ID值。必須為唯一的ID值,除非用-o選項。數字不可為負值。預設為最小不得小于99而逐次增加。0~99傳統上是保留給系統帳號使用 -o:配合-u 選項,不檢查UID的唯一性 -r: 創建系統用戶(CentOS 6: ID<500,CentOS 7: ID<1000) -s SHELL:指明用戶的默認使用的shell程序;可用列表在/etc/shells文件
實例1: [root@centos7 ~]# useradd -c "new" -d /home/gentoo -u 1055 -s /bin/sh gentoo #創建普通用戶gentoo,設置uid號為1055,并且設置注釋為“new”,并指定家目錄為路徑為/home/gentoo,使用shell類型為/bin/sh [root@centos7 ~]# id gentoo uid=1055(gentoo) gid=1055(gentoo) groups=1055(gentoo)
實例2: [root@centos7 ~]# useradd -c "system" -r -s /bin/bash -d /home/nginx nginx #創建系統用戶nginx,并設置注釋為“system”,并指定家目錄為路徑為/home/nginx,使用shell類型為/bin/bash [root@centos7 ~]# id nginx uid=991(nginx) gid=986(nginx) groups=986(nginx)
實例3 [root@localhost ~]# id gentoo uid=1055(gentoo) gid=1055(gentoo) groups=1055(gentoo) [root@localhost ~]# useradd -G gentoo hardoop #創建普通用戶hardoop,并將gentoo組作為hardoop的附加組 [root@localhost ~]# id hardoop uid=1056(hardoop) gid=1056(hardoop) groups=1056(hardoop),1055(gentoo)
adduser命令實際是一個軟鏈接,引用useradd創建用戶
[root@localhost ~]# whereis adduser adduser: /usr/sbin/adduser /usr/share/man/man8/adduser.8.gz [root@localhost ~]# ls -ld /usr/sbin/adduser lrwxrwxrwx. 1 root root 7 Aug 3 2016 /usr/sbin/adduser -> useradd [root@localhost ~]#
從上面的講解是否已經對創建用戶得心應手了呢,接下來講的是介紹安全3A,為什么要講3A呢,因為并不是創建用戶后就能使用系統的資源,那又跟3A有什么關系呢,接下來就是了解3A:
安全3A
Authentication(認證):對用戶的身份進行驗證
Authorization(授權):用戶認證后,可以系統上使用那些權限
Accouting|Audition(審計):用戶權限后做了哪些操作,都是有監控和記錄的
為了更方便理解3A的概念,接下來講個例子:假設你在某國企上班,你上班需要進入辦公室,這時就需要出示你的工牌,這就是認證(Authentication),當你認證后進入辦公室后,并登錄你 的辦公電腦系統后,系統會識別該用戶對該系統有哪些資源可以使用,那些是不能使用,這就是授權(Authorization),接下來是你在使用資源后,系統會每時每刻監控你的操作記錄,這就是 審計(Accouting|Audition)。
2、用戶的刪除
當有些員工辭職后,會留下用戶的一些信息,而這些信息對公司有著一些至關重要的機密,因此需要將用戶的信息刪除,如何刪除用戶的信息,接下來將的就是刪除用戶信息的命令:
userdel 命令
簡介: userdel - delete a user account and related files
格式: userdel [options] LOGIN
選項: -r:刪除用戶家目錄
實例1: [root@localhost ~]# man userdel [root@localhost ~]# id gentoo uid=1055(gentoo) gid=1055(gentoo) groups=1055(gentoo) [root@localhost ~]# userdel gentoo userdel: group gentoo not removed because it has other members. #因為沒有使用-r選項,導致沒有刪除用戶的家目錄,以及mail郵箱目錄 [root@localhost ~]# id gentoo #但是用戶確實已經刪除了 id: gentoo: no such user [root@localhost ~]# ls -ld /home/gentoo drwx------ 3 1055 gentoo 74 Aug 3 20:00 /home/gentoo [root@localhost ~]# ls -l /var/spool/mail/gentoo -rw-rw---- 1 1055 mail 0 Aug 3 20:00 /var/spool/mail/gentoo
實例2: [root@localhost ~]# [root@localhost ~]# id centos uid=1001(centos) gid=1001(centos) groups=1001(centos),1003(admin) [root@localhost ~]# userdel -r centos #直接使用-r選項即可刪除用戶的家目錄和和mail郵箱目錄,建議刪除用戶使用-r選項 [root@localhost ~]# id centos id: centos: no such user [root@localhost ~]# ls -l /home/ total 0 drwx------ 5 a a 121 Aug 3 16:35 a drwx------ 5 b a 121 Aug 3 16:35 b drwx------ 3 1055 gentoo 74 Aug 3 20:00 gentoo drwx------ 3 hardoop hardoop 74 Aug 3 20:10 hardoop drwx------. 3 mageedu mageedu 74 Aug 3 2016 mageedu [root@localhost ~]# ls -l /var/spool/ total 4 drwxr-x--x. 2 root abrt 6 Dec 1 2015 abrt drwx------. 2 abrt abrt 6 Dec 1 2015 abrt-upload drwxr-xr-x. 2 root root 60 Aug 3 2016 anacron drwx------. 3 daemon daemon 29 Aug 3 2016 at drwx------. 2 root root 6 Jul 27 2015 cron drwx--x---. 3 root lp 16 Aug 3 2016 cups drwxr-xr-x. 2 root root 6 Aug 12 2015 lpd drwxrwxr-x. 2 root mail 73 Aug 3 21:00 mail drwxr-xr-x. 2 root root 6 Nov 20 2015 plymouth drwxr-xr-x. 16 root root 4096 Aug 3 2016 postfix
是不是覺得刪除用戶特簡單呢
3、用戶賬戶的管理
是否覺得在創建用戶的時候,創建用戶的信息以及密碼還有一起創建出來的組信息等都放置在那個目錄呢,接下來將的就是用戶的管理信息:
當管理員在創建用戶的時候,用戶的信息以及密碼實際存放在passwd命令的配置文件中,配置文件為"/etc/passwd"和"/etc/share"下,下面是講的是兩個配置文件的詳解:
/etc/passwd里面的格式為:(直接man 5 passwd 即可查看格式)
以冒號為分隔符
name:password:UID:GID:GECOS:directory:shell 用戶名:密碼:用戶的uid:用戶的基本組id:用戶的注釋信息:用戶的家目錄:用戶使用的shell
/etc/share里面的格式為:(直接man 5 shadow 即可查看格式)
以root為樣板
root:$6$4w4LEKnT$zOs9se3YgGE.5mPA4u.pTR9/Wl7mItDe8gYKUG7zIWdpHshP6wCvvHQkWgzevTYGqNc2KP7TyvqyZIiYDxGNs.:17016:0:99999:7::: 用戶名:加密了的密碼:最近一次更改密碼的日期:密碼的最小使用期限:最大密碼使用期限:密碼警告時間段:密碼禁用期:賬戶過期日期:保留字段
4、用戶的密碼以及其它屬性更改
用戶平常會有丟失密碼的情況,這時可以用超級管理員更改用戶的密碼即可再次登陸,如何更改用戶的密碼呢,接下來講的是更改用戶的密碼以及用戶的屬性
passwd 命令
簡介: passwd - update user's authentication tokens
格式: passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
選項: -l:鎖定指定用戶 -u:解鎖指定用戶 -e:強制用戶下次登錄修改密碼 -n mindays:指定最短使用期限 -x maxdays:最大使用期限 -w warndays:提前多少天開始警告 -iinactivedays:非活動期限 --stdin:從標準輸入接收用戶密碼;echo "PASSWORD" | passwd--stdinUSERNAME
實例1: [root@localhost ~]# id centos uid=1057(centos) gid=1057(centos) groups=1057(centos) [root@localhost ~]# passwd centos #更改用戶centos密碼(只有root才能更改別人用的密碼) Changing password for user centos. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. #提示更改成功
實例2 [root@localhost ~]# echo "1234567" | passwd --stdin "centos" #此種方式也能更改用戶的密碼,這種方式容易暴露密碼(在實際生產環境中,建議不適用此種方法改密) Changing password for user centos. passwd: all authentication tokens updated successfully. [root@localhost ~]#
usermod 命令
簡介: usermod - modify a user account
格式: usermod [options] LOGIN
選項: -u UID:更改uid號 -g GID:更改用戶的基本組 -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加組,原來的附加組將會被覆蓋;若保留原有,則要同時使用-a選項,表示append -s SHELL:更改用戶的默認SHELL -c 'COMMENT':更改用戶的注釋信息 -d HOME:新家目錄不會自動創建,原家目錄中的文件不會同時移動至新的家目錄;若要創建新家目錄并移動原家數據,同時使用-m選項 -l login_name:更改用戶的名稱 -L:lock指定用戶,在/etc/shadow 密碼欄的增加 -U:unlock指定用戶,將/etc/shadow 密碼欄的! 拿掉 -e YYYY-MM-DD:指明用戶賬號過期日期 -f INACTIVE:設定非活動期限
實例1: [root@localhost ~]# getent passwd centos centos:x:1057:1057::/home/centos:/bin/bash [root@localhost ~]# id centos uid=1057(centos) gid=1057(centos) groups=1057(centos) [root@localhost ~]# usermod -u 1058 -g hardoop -G mageedu -c 'system' -s /bin/sh -l 'apache' centos #更改用戶的uid為1058、基本組為hardoop,覆蓋附加組為mageedu,注釋信息更改為‘system’,shell更改為/bin/sh,并更改用戶的名稱為apache [root@localhost ~]# id centos #已經更改為apache,因此查詢不到 id: centos: no such user [root@localhost ~]# id apache uid=1058(apache) gid=1056(hardoop) groups=1056(hardoop),1000(mageedu) #已經顯示更改成功 [root@localhost ~]# getent passwd apache #已經顯示更改成功 apache:x:1058:1056:system:/home/centos:/bin/sh
實例2: [root@localhost ~]# id apache uid=1058(apache) gid=1056(hardoop) groups=1056(hardoop),1000(mageedu) [root@localhost ~]# usermod -aG nginx,mysql apache #將組nginx、mysql添加為apache的附加組 [root@localhost ~]# id apache uid=1058(apache) gid=1056(hardoop) groups=1056(hardoop),27(mysql),1000(mageedu),986(nginx) #以顯示添加成功,附加組有多個的話,由,分隔
chage 命令
簡介: chage - change user password expiry information
格式: chage [options] LOGIN
選項: -d:上一次更改的日期 -E:帳號到期的日期,過了這天,此帳號將不可用 -I:停滯時期。如果一個密碼已過期這些天,那么此帳號將不可用 -m:密碼可更改的最小天數,為零時代表任何時候都可以更改密碼 -M:密碼保持有效的最大天數 -W:用戶密碼到期前,提前收到警告信息的天數 -l:顯示密碼策略
實例1: [root@localhost ~]# chage -l apache Last password change : Aug 03, 2016 #最近一次密碼修改時間 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 #在密碼過期之前警告的天數
5、用戶相關的其他命令
chfn 命令
簡介: chfn - change your finger information
格式: chfn [-f full-name] [-o office] ,RB [ -p office-phone] [-h home-phone] -u] [-v] [username]
選項: -f:設置真實姓名 -h:設置家中的電話號碼 -o:設置辦公室的地址 -p:設置辦公室的電話號碼 -u --help:在線幫助 -v -version:顯示版本信息
實例1: [root@localhost ~]# chfn Changing finger information for root. Name [apache]: tom Office []: Office Phone []: ^C [root@localhost ~]# chfn Changing finger information for root. Name [apache]: tom Office []: mageedu Office Phone []: 110 Home Phone []: 119 Finger information changed.
chsh 命令
簡介: chsh - change your login shell
格式: chsh - change your login shell
選項: -s --shell:更改系統預設的shell環境 -l --list-shells:列出目前系統可用的shell清單 -u --help:在線幫助 -v -version:顯示版本信息
實例1 [zabbix@localhost ~]$ chsh Changing shell for zabbix. New shell [/bin/bash]: /bin/sh Password: Shell changed.
finger 命令
簡介: finger — user information lookup program
格式: finger [-lmsp] [user ...] [user@host ...]
選項: -l:列出該用戶的帳號名稱,真實姓名,用戶專屬目錄,登入所用的Shell,登入時間,轉信地址,電子郵件狀態,還有計劃文件和方案文件內容 -m:排除查找用戶的真實姓名 -s:列出該用戶的帳號名稱,真實姓名,登入終端機,閑置時間,登入時間以及地址和電話 -p:列出該用戶的帳號名稱,真實姓名,用戶專屬目錄,登入所用的Shell,登入時間,轉信地址,電子郵件狀態,但不顯示該用戶的計劃文件和方案文件內容
實例1: [root@localhost ~]# finger Login Name Tty Idle Login Time Office Office Phone root tom tty1 6:42 Aug 3 15:53 mageedu 110 root tom pts/0 Aug 3 15:56 (10.1.250.48) root tom pts/1 39 Aug 3 15:59 (10.1.250.48)
6、用戶的其他信息
Linux用戶中是否uid是無限制的呢,其實是有限制的,下面將的是與用戶一些相關信息:
6.1、 Linux用戶:Username/UID
管理員:root, 0
普通用戶:1-65535
系統用戶:1-499(CENTOS6), 1-999
對守護進程獲取資源進行權限分配
登錄用戶:500(CENTOS6)+, 1000+
交互式登錄
6.2、Linux用戶的配置文件
/etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)
/etc/shadow:用戶密碼及其相關屬性
6.3、密碼加密
加密機制:
加密:明文--> 密文 解密:密文--> 明文
單向加密:
哈希算法:原文不同,密文必不同,相同算法定長輸出,獲得密文不可逆推出原始數
雪崩效應:初始條件的微小改變,引起結果的巨大改變 md5: message digest, 128bits sha1: secure hash algorithm, 160bits sha224: 224bits sha256: 256bits sha384: 384bits sha512: 512bits
更改加密算法
authconfig--passalgo=sha256 --update
6.4、密碼的復雜性策略
(1)使用數字、大寫字母、小寫字母及特殊字符中至少3種 (2)足夠長 (3)使用隨機密碼 (4)定期更換;不要使用最近曾經使用過的密碼
6.5、用戶的配置文件操作
使用vipw和pwck命令更改用戶的"/etc/passwd"和"/etc/share"文件,可以檢測更改的語法是否有錯
6.7、普通用戶提權的三種方式
(1)將普通用戶的UID更改
(2)將普通用戶加入到某個有權限組中
(3)利用su命令切換到超級管理員賬號執行
實例1: [root@localhost ~]# man su [root@localhost ~]# id centos id: centos: no such user [root@localhost ~]# id zabbix id: zabbix: no such user [root@localhost ~]# useradd zabbix #創建普通用戶zabbix [root@localhost ~]# id zabbix uid=1001(zabbix) gid=1001(zabbix) groups=1001(zabbix) [root@localhost ~]# usermod -ou 0 zabbix #更改普通用戶的的uid為0 [root@localhost ~]# id zabbix uid=0(root) gid=0(root) groups=0(root) #因此查詢zabbix用戶,顯示為root,實際原因為系統只識別10,而人識別的是用戶的名稱,因此顯示的是0 [root@localhost ~]# getent passwd zabbix zabbix:x:0:1001::/home/zabbix:/bin/bash [root@localhost ~]# ls -l /home/ /var/spool/mail/ #但是zabbix原先的家目錄以及郵箱實際還存在,這是一種提權的方法(建議:實際生產環境中不適用) /home/: total 0 drwx------. 3 mageedu mageedu 74 Aug 3 2016 mageedu drwx------ 3 root zabbix 74 Aug 3 16:02 zabbix /var/spool/mail/: total 0 -rw-rw----. 1 mageedu mail 0 Aug 3 2016 mageedu -rw-rw----. 1 rpc mail 0 Aug 3 2016 rpc -rw-rw---- 1 root mail 0 Aug 3 16:02 zabbix
實例2: [root@localhost ~]# id nginx id: nginx: no such user [root@localhost ~]# useradd nginx #創建普通用戶nginx [root@localhost ~]# usermod -G root nginx #設置nginx用戶添加附加組root,而Linux系統中的很多文件,屬組都是root組 [root@localhost ~]# id nginx uid=1001(nginx) gid=1002(nginx) groups=1002(nginx),0(root) #顯示添加成功 [root@localhost ~]#
實例3: su 命令 簡介: su - run a command with substitute user and group ID 格式: su [options...] [-] [user [args...]] 切換用戶的方式: su UserName:非登錄式切換,即不會讀取目標用戶的配置文件,不改變當前工作目錄 su - UserName:登錄式切換,會讀取目標用戶的配置文件,切換至家目錄,完全切換 注意:root su至其他用戶無須密碼;非root用戶切換時需要密碼 換個身份執行命令: su [-] UserName -c 'COMMAND' su - l UserName 相當于su-UserName [nginx@localhost ~]$ whoami nginx [nginx@localhost ~]$ su - root #切換到超級管理員root下執行操作,需要輸入root密碼 Password: [root@localhost ~]# [nginx@localhost ~]$ su - root -c "getent passwd nginx" #不登錄超級管理員root,而是用root用戶執行命令操作,需要輸入root密碼 Password: nginx:x:1001:1002::/home/nginx:/bin/bash [nginx@localhost ~]$
原創文章,作者:Aleen,如若轉載,請注明出處:http://www.www58058.com/28199