linux用戶管理:創建用戶,刪除用戶,管理用戶,用戶配置


一.關於用戶

​ 用戶一般來說是指使用計算機的人,計算機針對使用的每一個人給了一個特定的名稱,用戶就可以使用這些名稱來登錄使用計算機,除

了人之外,一些系統服務也需要含有部分特權的用戶賬戶運行;因此出於安全考慮,用戶管理應運而生,它加以明確限制各個用戶賬戶的

權限,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各個字段含義:

image-20201013174941960

[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各個字段含義

image-20201013181432956

[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:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM