一.關於用戶
用戶一般來說是指使用計算機的人,計算機針對使用的每一個人給了一個特定的名稱,用戶就可以使用這些名稱來登錄使用計算機,除
了人之外,一些系統服務也需要含有部分特權的用戶賬戶運行;因此出於安全考慮,用戶管理應運而生,它加以明確限制各個用戶賬戶的
權限,root在計算機中用擁有至高特權,所以一般只作管理用,非特權用戶可以通過SU或SUDO程序來臨時獲得特權。
GNU/Linux 通過用戶和用戶組實現訪問控制,包括對文件的訪問,設備使用的控制。
個人可以擁有很多賬戶,只不過是彼此名稱不同,比如root名稱已經占用就不能再用了,此外,任意用戶可能從屬某個用戶組,此用戶
可以加入某些已經存在的組來獲得該組的特權。
GNU/Linux 系統中的每一個文件都屬於一個用戶(屬主)和一個用戶組(屬組)。
文件擁有三種類型的訪問權限:讀(read)、寫(write)、運行(execute)。我們可以針對文件的屬主、屬組、而設置相應的訪問權
限
我們可以通過 ls 或者stat命令查詢文件屬主、屬組和權限
#可以看到passwd文件的訪問權限是-rw-r--r--,用戶是root,用戶組是root
[root@node5 ~]# ls -l /etc/passwd
-rw-r--r-- 1 root root 1447 Oct 13 15:15 /etc/passwd
#stat命令顯示的信息更詳細
[root@node5 ~]# stat /etc/passwd
File: ‘/etc/passwd’
Size: 1447 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 17664215 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-10-13 15:20:01.164284250 +0800
Modify: 2020-10-13 15:15:22.754277347 +0800
Change: 2020-10-13 15:15:22.755277347 +0800
Birth: -
二.用戶的三種類型
linux中用戶分為三類:
- 超級用戶(root):root 擁有系統最高的管理權限,uid=0
- 普通用戶:從centos7開始,系統用戶的UID為1-999,centos6的系統用戶UID為1-499,從centos7開始,本地用戶的UID從1000開始,centos6的本地用戶UID從500開始。其中UID是每個用戶的身份標示,類似於每個人的身份證號碼。
- 虛擬用戶:又稱偽用戶 ,一般不會用來登錄系統的,它主要是用於維持某個服務的正常運行。如:ftp,apache服務。
三.與用戶有關的配置文件詳解
配置文件名稱 | 配置文件存放路徑 | 配置文件詳解 |
---|---|---|
用戶配置文件 | /etc/passwd | 記錄了每個用戶的基本屬性,並且對所有用戶可讀,每一行記錄對應一個用戶,每行記錄通過冒號進行分隔 |
用戶組文件 | /etc/group | 用戶組的所有信息存放地,組名不能重復 |
用戶密碼信息文件 | /etc/shadow | 由於/etc/passwd文件對所有用戶是可讀的,為安全起見把密碼從passwd中分離出來放入這個單獨的文件,該文件只有root用戶擁有讀權限,從而保證密碼安全性 |
1./etc/passwd各個字段含義:
[root@node5 ~]# tail -1 /etc/passwd
elk:x:1001:1001::/opt/elk:/bin/bash
#elk:用戶名
#x:密碼占位符
#1001:用戶的UID,它都是用數字來表示的
#1001:用戶所屬組的GID,它都是用數字來表示的
#用戶描述信息:對用戶的功能或其它來進行一個簡要的描述
#/opt/elk:用戶主目錄/家目錄
#/bin/bash:用戶登錄系統后默認使用的shell
#擴展,查看系統中,支持哪些shell
[root@node5 ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/ksh
/bin/rksh
/bin/zsh
2./etc/shadow各個字段含義
[root@node5 ~]# grep root /etc/shadow
root:$6$KLWtaWU.iaW5rSmI$QgFqjhNnwVjBXRRvHA.TPwhku260i6yJv5X2dGUfn.EBBoOrGuP5QrSKTmNwJehB1j/B2lCHnbUxuvTx6L2G./::0:99999:7:::
/etc/shadow各個字段詳解
name | 賬戶名稱,這個必須是系統中的有效賬戶名 |
---|---|
password | 已加密的密碼,分為三個部分,第一部分是表示使用哪種哈希算法;第二部分是用於加密哈希的salt;第三部分是已加密的哈希 哈希算法:$1表示MD5 ; $6 表示SHA-512 ; $5 SHA-256 |
lastchange | 最近一次更改密碼的日期,以距離1970/1/1的天數表示 |
min-age | 不能更改密碼的最少天數,最近更改過后幾天才可以更改;如果為0表示“最短期限要求” |
maxage | 密碼過期時間,必須更改密碼前的最多天數 |
warning | 密碼即將到期的警告期,以天數表示,0表示“不提供警告” |
inactive | 寬限天數,密碼到期后 |
expire | 賬號過期時間,以距離1970/1/1的天數計算 (千年蟲) |
blank | 預留字段 |
3./etc/group各個字段詳解
[elk@node5 ~]$ tail -4 /etc/group
postgres:x:26:elk
esnode:x:8001:elk
elk:x:1001:
logstash:x:1002:
#第一個字段:組名,用戶組的名稱,組名不能重復
#第二個字段:密碼占位符,密碼存在/etc/gshadow里
#第三個字段:組標識號gid,這個gid號是和/etc/passwd中組標識號對應的
#第四個字段:組內用戶列表,可以有多個用戶,多個用戶之間用逗號分隔
4.控制添加用戶規則的文件有兩個,/etc/default/useradd和/etc/login.defs
[root@node5 ~]# ls /etc/default/useradd
/etc/default/useradd
[root@node5 ~]# ls /etc/login.defs
/etc/login.defs
#egrep -v "^$|^#"的意思是過濾掉空行和#開頭的行
[root@node5 ~]# egrep -v "^$|^#" /etc/login.defs
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000 #本地用戶的UID從1000開始
UID_MAX 60000 #本地用戶的UID最大值
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000 #GID從1000開始
GID_MAX 60000 #GID的最大值
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes #是否為用戶建立home目錄
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512 #shadow文件的加密算法
[root@node5 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100 #表示可以創建普通組,users組ID為100。如果沒有這一條,或者你把users這個組刪除了,當你再創建用戶時,將提示:#useradd: group '100' does not exist
HOME=/home #指定用戶家目錄,如果你不想讓用戶家目錄在/home下,可以修改這個地方。
INACTIVE=-1 #是否啟用帳號過期。passwd文件中第7欄。即:密碼過期后是否會失效的設定值 。INACTIVE:無效。-1表示啟用
EXPIRE= #帳號終止日期 shadow中第8欄。賬號失效的日期 就是 shadow 內的第八字段,你可以直接設定賬號在哪個日期后就直接失效,#而不理會密碼的問題。通常不會設定此配置項,但如果是付費的會員制系統,或許這個字段可以設定!
SHELL=/bin/bash #指定默認使用的shell類型
SKEL=/etc/skel #模板目錄
CREATE_MAIL_SPOOL=yes #是否創建郵箱文件
四.創建用戶
1.創建用戶使用useradd命令,命令的格式為:useradd -d -u “UID” -g "初始組" -G "附加組" -s "登陸的shell” 用戶
#useradd命令參數說明
#-d:-d 用戶主目錄路徑,指定用戶家目錄
#-M:不創建用戶的主目錄
#-g:設置用戶初始組的名稱或數字ID;該組必須是存在的;如果沒有設置該選項,useradd會根據/etc/login.defs文件中
#USERGROUPS_ENAB環境變量進行設置。默認USERGROUPS_ENAB yes 會用和用戶名相同的名字創建群組,GID等於UID
#-G:用戶要加入的附加組列表;使用逗號分隔多個組,不要添加空格;如果不設置,用戶僅僅加入初始組。(一個用戶只允許有一個主組,可以有多#個附屬組)
#-s:用戶默認登錄shell的路徑;啟動過程結束后,默認啟動的登錄shell在此處設定;請確保使用的shell已經安裝,默認是 Bash。有時候需#要禁止某些用戶執行登錄動作,例如用來執行系統服務的用戶。將shell設置成 /sbin/nologin可以禁止用戶登錄。
#擴展,useradd的其他用法
useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name
#參數說明
#-c:加上備注文字(添加注釋),備注文字保存在passwd的備注欄中。
#-d:指定用戶登入時的主目錄,替換系統默認值/home/<用戶名>
#-D:變更預設值。
#-e:指定賬號的失效日期,日期格式為MM/DD/YY,例如06/30/12。缺省表示永久有效。
#-f:指定在密碼過期后多少天即關閉該賬號。如果為0賬號立即被停用;如果為-1則賬號一直可用。默認值為-1.
#-g:指定用戶所屬的群組。值可以使組名也可以是GID。用戶組必須已經存在的,期默認值為100,即users。
#-G:指定用戶所屬的附加群組。
#-m:自動建立用戶的登入目錄。
#-M:不要自動建立用戶的登入目錄。
#-n:取消建立以用戶名稱為名的群組。
#-r:建立系統賬號。
#-s:指定用戶登入后所使用的shell。默認值為/bin/bash。
#-u:指定用戶ID號。
2.創建elk賬戶,elk的家目錄為/opt/elk,UID為1001,附屬組為esnode,postgres,root,默認登錄的shell為bash
[root@node5 ~]# useradd -d /opt/elk -u 1001 -g 1001 -G esnode,postgres,root -s /bin/bash elk
useradd: group '1001' does not exist
#-g:設置用戶初始組的名稱或數字ID;該組必須是存在的,默認GID等於UID
[root@node5 ~]# useradd -d /opt/elk -u 1001 -G esnode,postgres,root -s /bin/bash elk
#id查看elk用戶的uid,gid,groups
[root@node5 ~]# id elk
uid=1001(elk) gid=1001(elk) groups=1001(elk),0(root),26(postgres),8001(esnode)
[root@node5 ~]# tail -1 /etc/passwd
elk:x:1001:1001::/opt/elk:/bin/bash
#elk用戶下的家目錄存在的掩藏文件
[root@node5 ~]# ls /opt/elk/ -a
. .. .bash_logout .bash_profile .bashrc .kshrc .zshrc
#如果一個組有多個成員,我們是可以在/etc/group文件中最后一個字段看到的
[root@node5 ~]# tail -4 /etc/group
tss:x:59:
postgres:x:26:elk
esnode:x:8001:elk
elk:x:1001:
#切換到elk用戶,並進入家目錄
[root@node5 ~]# su - elk
[elk@node5 ~]$ pwd
/opt/elk
[elk@node5 ~]$ ls
#退出elk用戶
[elk@node5 ~]$ exit
logout
3.創建logstash賬戶,但是不創建家目錄
[root@node5 ~]# useradd -M logstash
[root@node5 ~]# id logstash
uid=8002(logstash) gid=8002(logstash) groups=8002(logstash)
[root@node5 ~]# tail -1 /etc/passwd
logstash:x:8002:8002::/home/logstash:/bin/bash
#/etc/passwd里雖然存在/home/logstash家目錄,但是並沒有創建家目錄
[root@node5 ~]# ls /home/logstash
ls: cannot access /home/logstash: No such file or directory
[root@node5 ~]# tail -1 /etc/group
logstash:x:8002:
4.創建es賬戶,並對es賬戶進行注釋
#-c:加上備注文字(添加注釋),備注文字保存在passwd的備注欄中。
[root@node5 ~]# useradd -c "es的賬戶" es
[root@node5 ~]# id es
uid=8003(es) gid=8003(es) groups=8003(es)
[root@node5 ~]# tail -1 /etc/passwd
es:x:8003:8003:es的賬戶:/home/es:/bin/bash
5.創建用戶除了使用useradd,還可以使用adduser,
[root@node5 ~]# which useradd
/usr/sbin/useradd
[root@node5 ~]# which adduser
/usr/sbin/adduser
#可以看到adduser只是useradd的軟鏈接
[root@node5 ~]# ll -h /usr/sbin/adduser
lrwxrwxrwx. 1 root root 7 Apr 26 2019 /usr/sbin/adduser -> useradd
五.設置用戶密碼
1.以交互方式設置用戶密碼
#可以發現如果一個用戶被創建了,但是沒有設置密碼,/etc/shadow文件的第二字段使用!!表示
[root@node5 ~]# tail -3 /etc/shadow
esnode:$6$fznP2Oqd$02x2dTMV0kP5Ra780.sw.W06KZVl7ua8sA7QBMfEsYp0iUs1ukz.9H/iqYjToLLLa1TPSGWDC6a8yVJFZCVV5/:18378:0:99999:7:::
elk:!!:18548:0:99999:7:::
logstash:!!:18548:0:99999:7:::
#設置elk密碼
[root@node5 ~]# passwd elk
Changing password for user elk.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@node5 ~]# tail -3 /etc/shadow
esnode:$6$fznP2Oqd$02x2dTMV0kP5Ra780.sw.W06KZVl7ua8sA7QBMfEsYp0iUs1ukz.9H/iqYjToLLLa1TPSGWDC6a8yVJFZCVV5/:18378:0:99999:7:::
elk:$6$An7lKn2Q$dSuliu1h.Wn42GsrRwKPDS6bgEmTR8TlMsWMHIVWIEXOVbsKwvBcKDDNv.Mxki7aOwV8EBASQFAGQ9W.N/LeV.:18548:0:99999:7:::
logstash:!!:18548:0:99999:7:::
2.一條命令設置用戶密碼,免交互
[root@node5 ~]# echo 123456 | passwd --stdin logstash
Changing password for user logstash.
passwd: all authentication tokens updated successfully.
[root@node5 ~]# tail -3 /etc/shadow
esnode:$6$fznP2Oqd$02x2dTMV0kP5Ra780.sw.W06KZVl7ua8sA7QBMfEsYp0iUs1ukz.9H/iqYjToLLLa1TPSGWDC6a8yVJFZCVV5/:18378:0:99999:7:::
elk:$6$An7lKn2Q$dSuliu1h.Wn42GsrRwKPDS6bgEmTR8TlMsWMHIVWIEXOVbsKwvBcKDDNv.Mxki7aOwV8EBASQFAGQ9W.N/LeV.:18548:0:99999:7:::
logstash:$6$9yY5A65j$YzViQt8dC7mb9ID4my1x1o2dZX3ovQbTfsMr3f5UaJkt3THQRMOmt0pq2YIN0W.zlyU/hRlZe.9vocyFepTYl1:18548:0:99999:7:::
3.如果嫌想密碼太麻煩,可以使用mkpasswd生成隨機密碼
#如果想使用mkpasswd,需要提前安裝expect
[root@node5 ~]# yum -y install expect
[root@node5 ~]# which mkpasswd
/usr/bin/mkpasswd
#mkpasswd命令的參數說明:-l密碼長度 -s特殊字符數 -d數字個數
[root@node5 ~]# mkpasswd -l 12 -s 3 -d 2
y=JZixsj~,14
4.假如兩個用戶的密碼一樣,那么shadow中加密的hash值一樣嗎?
答:不一樣, 因為salt不一樣。
六.刪除用戶
刪除用戶使用userdel,加-r參數的時候,會同時刪除用戶的家目錄和/var/mail下的目錄
[root@node5 ~]# ls /var/mail/
elk es esnode logstash nginx root rpc www
[root@node5 ~]#
[root@node5 ~]# userdel -r es
[root@node5 ~]#
[root@node5 ~]# ls /home/es
ls: cannot access /home/es: No such file or directory
[root@node5 ~]# ls /var/mail/
elk esnode logstash nginx root rpc www
七.用戶密碼時效管理
1.chage命令用於密碼實效管理,是用來修改帳號和密碼的有效期限
2.chage命令參數詳解
參數 | 描述 |
---|---|
-d | 指定密碼最后修改日期,上一次更改的日期,為0表示強制在下次登錄時更新密碼 |
-E | 密碼到期的日期,過了這天,此賬號將不可用,0表示馬上過期,-1表示永不過期 |
-h | 顯示幫助信息並退出 |
-I(大寫的i) | 密碼過期后,鎖定賬號的天數 |
-l | 列出用戶及密碼的有效期 |
-m | 密碼可更改的最小天數,為零代表任何時候都可以更改密碼 |
-M | 密碼保持有效的最大天數 |
-W | 密碼過期前,提前收到警告信息的天數 |
八.查看用戶相關信息的命令
參數 | 描述 |
---|---|
id | 查看用戶和組的信息 |
whoami | 查看當前有效用戶名 |
who | 顯示目前登入系統的用戶信息 |
w | w命令用於顯示已經登陸系統的用戶列表 |
users | 用於顯示當前登錄系統的所有用戶的用戶列表 |
[root@node5 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@node5 ~]# whoami
root
[root@node5 ~]# who
esnode tty1 2020-10-14 00:38
root pts/0 2020-10-13 12:37 (192.168.110.1)
root pts/1 2020-10-13 12:37 (192.168.110.1)
[root@node5 ~]# w
00:39:35 up 6 days, 4:39, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
esnode tty1 00:38 1:03 0.01s 0.01s -bash
root pts/0 192.168.110.1 Tue12 7.00s 0.55s 0.00s w
root pts/1 192.168.110.1 Tue12 6:23m 0.07s 0.07s -bash
[root@node5 ~]# users
esnode root root
九.修改用戶基本信息
1.修改用戶基本信息使用usermod命令,格式為:usermod 【參數】用戶名
參數 | 描述 |
---|---|
-u | 修改用戶UID |
-d | 修改用戶家目錄 |
-g | 修改用戶起始組 |
-G | 修改用戶附加組 |
-s | 修改用戶登錄shell |
-L | 鎖定用戶賬戶 |
[root@node5 ~]# tail -1 /etc/passwd
logstash:x:8002:8002::/home/logstash:/bin/bash
[root@node5 ~]# id logstash
uid=8002(logstash) gid=8002(logstash) groups=8002(logstash)
#修改用戶UID
[root@node5 ~]# usermod -u 1002 logstash
[root@node5 ~]# id logstash
uid=1002(logstash) gid=8002(logstash) groups=8002(logstash)
#修改用戶起始組,修改用戶GID
[root@node5 ~]# usermod -g 1002 logstash
usermod: group '1002' does not exist
[root@node5 ~]# groupmod -g 1002 logstash
[root@node5 ~]# id logstash
uid=1002(logstash) gid=1002(logstash) groups=1002(logstash)
#修改用戶登錄shell,設置logstash禁止登陸
[root@node5 ~]# usermod -s /sbin/nologin logstash
[root@node5 ~]# grep logstash /etc/passwd
logstash:x:1002:1002::/home/logstash:/sbin/nologin
#修改nginx用戶的附屬組為wheel
[root@node5 ~]# id nginx
uid=8000(nginx) gid=8000(nginx) groups=8000(nginx)
[root@node5 ~]# usermod -aG wheel nginx
[root@node5 ~]# id nginx
uid=8000(nginx) gid=8000(nginx) groups=8000(nginx),10(wheel)
[root@node5 ~]# grep wheel /etc/group
wheel:x:10:nginx
2.更改用戶家目錄,並把以前家目錄里的內容遷移到新的家目錄里
[root@node5 ~]# grep elk /etc/passwd
elk:x:1001:1001::/opt/elk:/bin/bash
[root@node5 ~]# su - elk
Last login: Tue Oct 13 15:01:37 CST 2020 on pts/0
[elk@node5 ~]$ pwd
/opt/elk
[elk@node5 ~]$ ls
[elk@node5 ~]$ mkdir -p a/b/c
[elk@node5 ~]$ touch a/test.txt
[elk@node5 ~]$ tree ./
./
└── a
├── b
│ └── c
└── test.txt
3 directories, 1 file
[elk@node5 ~]$ exit
logout
#-m選項會自動創建新目錄並且遷移原有內容到新目錄里面
[root@node5 ~]# usermod -m -d /home/elk elk
[root@node5 ~]# grep elk /etc/passwd
elk:x:1001:1001::/home/elk:/bin/bash
[root@node5 ~]# su - elk
Last login: Wed Oct 14 01:10:27 CST 2020 on pts/0
[elk@node5 ~]$ pwd
/home/elk
#發現原有內容也遷移過來了
[elk@node5 ~]$ tree ./
./
└── a
├── b
│ └── c
└── test.txt
3 directories, 1 file
3.修改用戶注釋
[root@node5 ~]# grep elk /etc/passwd
elk:x:1001:1001::/home/elk:/bin/bash
[root@node5 ~]# usermod -c "elk是es,logstash,kibana的縮寫" elk
[root@node5 ~]# grep elk /etc/passwd
elk:x:1001:1001:elk是es,logstash,kibana的縮寫:/home/elk:/bin/bash
十.管理用戶組
[root@node5 ~]# tail -4 /etc/group
postgres:x:26:elk
esnode:x:8001:elk
elk:x:1001:
logstash:x:1002:
[root@node5 ~]# groupadd es
[root@node5 ~]# groupadd -g 1004 kibana
[root@node5 ~]# tail -4 /etc/group
elk:x:1001:
logstash:x:1002:
es:x:8002:
kibana:x:1004:
#修改es的GID
[root@node5 ~]# groupmod -g 1005 es
[root@node5 ~]# tail -4 /etc/group
elk:x:1001:
logstash:x:1002:
es:x:1005:
kibana:x:1004: