1. linux命令之用戶組管理
Linux中每個用戶都要屬於一個或多個組,有了用戶組,就可以將用戶添加到組中,這樣就方便管理員對用戶的集中管理。 Linux系統中用戶組分為root組、系統組、普通用戶組三類。當一個用戶屬於多個組時,這些組中只能有一個作為該用戶的主屬組,其他組就被稱為此用戶的次屬組。 組基本信息在文件/etc/group中;組密碼信息在文件/etc/gshadow中。通過命令:cat /etc/group、cat /etc/gshadow可查看文件內容。
各用戶組中,以 ":" 作為欄位之間的分隔符,分為 4 個欄位,每個欄位對應的含義為:
組名:密碼:GID:該用戶組中的用戶列表
而在gshadow文件中,每行代表一個組用戶的密碼信息,各行信息用 ":" 作為分隔符,分為 4 個欄位,每個欄位的含義如下:
組名:加密密碼:組管理員:組附加用戶列表
root用戶可以直接修改/etc/group文件達到管理組的目的,也可以使用以下命令:groupadd、groupdel、groupmod -n、gpasswd -a、gpasswd -d、newgrp。
下面使用案例分別講解這些命令:
添加用戶組的命令是 groupadd,命令格式如下:
groupadd [ -g gid [ -o ] ] [ -r ] [ -f ] group
參數說明:
-g:指定新建工作組的 id;
-r:創建系統工作組,系統工作組的組ID小於 500;
-K:覆蓋配置文件 "/ect/login.defs";
-o:允許添加組 ID 號不唯一的工作組。
-f,--force: 如果指定的組已經存在,此選項將失明了僅以成功狀態退出。當與 -g 一起使用,並且指定的GID_MIN已經存在時,選擇另一個唯一的GID(即-g關閉)。
示例:創建一個新的組,並添加組 ID。
[root@VM-4-4-centos ~]# groupadd -g 888 newgroup
此時在/etc/group文件中產生了一個id為888的項目:
刪除用戶組時,可用groupdel(group delete)指令來完成。倘若該組中仍包括某些用戶,則必須先刪除這些用戶後,方能刪除組。 注意:刪除的組不能為主屬組! 命令格式:
groupdel [組名]
示例:刪除用戶組 newgroup
[root@VM-4-4-centos ~]# groupdel newgroup
此時再查看/etc/group文件時可以看到用戶組newgroup已經不存在,刪除成功!
要更改用戶組識別碼或名稱可使用 groupmod 來完成。命令格式:
groupmod [ -g <群組識別碼> < -o > ] [ -n <新群組名稱 > ] [原群組名稱]
參數說明 :
-g <群組識別碼> 設置欲使用的群組識別碼。
-o 重復使用群組識別碼。
-n <新群組名稱> 設置欲使用的群組名稱。
示例:創建用戶組newgroup並修改其名稱為modifiedgroup
[root@VM-4-4-centos ~]# groupadd newgroup
[root@VM-4-4-centos ~]# groupmod -n modifiedgroup newgroup
查看/etc/group文件,只存在名稱為modifiedgroup的用戶組,修改成功!
gpasswd 是 Linux 下工作組文件 /etc/group 和 /etc/gshadow 管理工具,用於將一個用戶添加到組或者從組中刪除。命令格式:
gpasswd [可選項] 組名
可選項參數 :
-a:添加用戶到組;
-d:從組刪除用戶;
-A:指定管理員;
-M:指定組成員和-A的用途差不多;
-r:刪除密碼;
-R:限制用戶登入組,只有組中的成員才可以用newgrp加入該組。
示例1:將用戶yangwei添加到組modifiedgroup中
[root@VM-4-4-centos ~]# gpasswd -a yangwei modifiedgroup
此時查看/etc/group文件發現組 modifiedgroup中出現用戶yangwei
示例2:將用戶yangwei從組modifiedgroup中給刪除
[root@VM-4-4-centos ~]# gpasswd -d yangwei modifiedgroup
再次查看/etc/group文件發現用戶yangwei已經不存在。
當需要在不同的群組下工作的時候我們需要進行切換群組操作,這個操作由newgrp指令來完成。命令格式如下:
newgrp [群組名稱]
注意!當前用戶必須都是兩個群組的成員,否則切換群組時需要輸入切換組的組密碼,這時候當前用戶作為臨時成員在切換組下工作,所創建的文件全都屬於切換組。
示例1:用戶yangwei不屬於群組modifiedgroup,請將當前工作組切換為modifiedgroup。
示例2:將用戶yangwei添加到組modifiedgroup中,並切換工作組為modifiedgroup。
總結:Linux用戶組管理需要掌握最基本的幾個命令及其選項參數: groupadd 、groupdel 、groupmod 、gpasswd 、newgrp !
2. Linux系統下用戶以及許可權管理
一、操作系統中的用戶管理 相關配置文件解讀
Linux用戶在操作系統可以進行日常管理和維護,涉及到的相關配置文件如下:
/etc/passwd 保存操作系統中的所有用戶信息
root : x : 0 : 0 : root : /root : /bin/bash
name:password:UID:GID:GECOS:directory:shell
用戶名 :密碼佔位符 :uid :基本組的gid :用戶信息記錄欄位:用戶的家目錄:用戶登錄系統後使用的命令解析器
————————————————
欄位1:用戶名
欄位2:密碼佔位符
欄位3:用戶的UID 0 表示超級用戶 , 500-60000 普通用戶 , 1-499 程序用戶
欄位4:基本組的GID 先有組才有用戶
欄位5:用戶信息記錄欄位
欄位6:用戶的家目錄
欄位7:用戶登錄系統後使用的命令解釋器
————————————————
UID:0表示超級用戶, 程序用戶 (1-499),普通用戶 (500以上60000以下),根據uid將用戶分為以上三類用戶。
/etc/shw 保存用戶密碼(以加密形式保存)
[root@xing /]# cat /etc/shadow
root : $6$Jw5XsDvvNBH5Xoq. : 19180 : 0 : 99999 : 7 : : :
用戶名:密碼(加密後的字元串):最近一次的修改時間【距離1970年1月1日的距離】:密碼的最短有效期:密碼的最長有效期:密碼過期前7天警告:密碼的不活躍期:用戶的失效時間: 保留欄位
————————————————
欄位1:用戶名
*欄位2:用戶的密碼加密後的字元串(sha)
欄位3:距離1970/1/1密碼最近一次修改的時間
欄位4:密碼的最短有效期
*欄位5:密碼的最長有效期(建議時間 90)
欄位6:密碼過期前7天警告
欄位7:密碼的不活躍期
欄位8:用戶的失效時間
欄位9:保留欄位
這個欄位目前沒有使用,等待新功能的加入。
————————————————
/etc/group 保存組信息
————————————————
root:x:0:
bin:x:1:bin,daemon
組名:組的密碼佔位符:gid:附加組成員
————————————————
/etc/login.defs 用戶屬性限制,密碼過期時間,密碼最大長度等限制
/etc/default/useradd 顯示或更改默認的useradd配置文件
二、文件及目錄許可權
文件與許可權: 即文件或者目錄屬於哪個用戶,屬於哪個組,不同的用戶能對該文件進行何種操作。
————————————————
註:
查看文件許可權: ls -l 文件
查看目錄許可權 : ls -ld 目錄
————————————————
[root@xing Desktop]# ls -l /root/Desktop/
total 70584
lrwxrwxrwx. 1 root root 18 Jul 14 14:32 123.txt -> /root/Desktop/ming
-rw-r--r--. (文件屬性) 1 (鏈接個數: 表示指向它的鏈接文件的個數 ) root (所屬者) root (所屬組) 0(文件大小:單位byte) Jul 14 14:14(最後一次修改時間) 2.txt(文件名)
drwx------.(文件屬性) 7 (目錄中的子目錄數: 此處看到的值要減2才等於該目錄下的子目錄的實際個數。 ) root (所屬者) root (所屬組) 4096 (文件大小:單位byte)Jul 13 16:56(最後一次修改時間) vmware-tools-distrib(目錄名)
[root@xing Desktop]# ls -ld /root/Desktop/
drwxr-xr-x. 3 root root 4096 Jul 14 14:44 /root/Desktop/
————————————————
文件屬性解釋:
- rw- r-- r-- .
d rwx r-x r-x .
欄位1:文件類型 【- 普通文件 d目錄 l符號鏈接 b塊設備】
欄位2:文件所有者對該文件的許可權
欄位3:文件所屬組的許可權
欄位4:其他用戶的許可權(既不是文件所有者也不是文件所屬組的用戶)
欄位5:表示文件受 selinux 的程序管理
8進制賦權法: r 【100】4; w【010】2; x【001】1
————————————————
三、用戶以及許可權管理命令匯總:
————————————————
用戶增刪改命令
useradd
userdel
usermod
————————————————
用戶組增刪改命令
groupadd
groupdel
groupmod
————————————————
passwd
change
————————————————
文件許可權修改: chmod命令
chmod 對象 算數運算符 許可權 文件
[root@xing tmp]# ls -ld ming
drwxr-xr-x. 2 root root 4096 Jul 16 10:27 ming
[root@xing tmp]# chmod o-x ming
[root@xing tmp]# ls -ld ming
drwxr-xr--. 2 root root 4096 Jul 16 10:27 ming
————————————————
文件所屬者修改:
chown 用戶 文件
[root@xing tmp]# chown ming ming
[root@xing tmp]# ls -ld ming
drwxr-xr--. 2 ming root 4096 Jul 16 10:27 ming
————————————————
文件所屬組修改:
chgrp 組 文件
[root@xing tmp]# chgrp ming ming
[root@xing tmp]# ls -ld ming
drwxr-xr--. 2 ming ming 4096 Jul 16 10:27 ming
————————————————
8進制賦權法
[root@xing ~]# chmod 644 /tmp/ming
[root@xing ~]# ls -ld /tmp/ming
drw-r--r--. 2 ming ming 4096 Jul 16 10:27 /tmp/ming
————————————————
linux下命令「ll」是「ls -l"的別名。
————————————————
粘滯位:賦權後的文件 只有建立者可以刪除
chmod o+t 文件
[root@xing ~]# chmod o+t /tmp/ming
[root@xing ~]# ll -d /tmp/ming
drw-r--r-T . 2 ming ming 4096 Jul 16 10:27 /tmp/ming
————————————————
sgid : 賦權後的目錄,新建立的文件或者子目錄的所屬組繼承父目錄的所屬組
chmod g+s 目錄
[root@xing ming]# chmod g+s /tmp/ming
[root@xing tmp]# ll
drw-r-Sr-T. 2 ming ming 4096 Jul 16 11:29 ming
[root@xing ming]# touch 20.txt
[root@xing ming]# ll
-rw-r--r--. 1 root ming 0 Jul 16 11:33 20.txt
[root@xing ming]# mkdir 60
[root@xing ming]# ll
drwxr-sr-x. 2 root ming 4096 Jul 16 11:34 60
————————————————
suid :允許誰運行該文件具有該文件所屬者的許可權
chmod u+s 文件
[root@xing Desktop]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2324712 Dec 22 2016 /usr/bin/vim
[root@xing Desktop]# chmod u+s /usr/bin/vim
[root@xing Desktop]# ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2324712 Dec 22 2016 /usr/bin/vim
備註:linux 紅底白字代表警告!
————————————————
[root@xing Desktop]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin
suid:4 sgid:2 粘滯位:1
[root@xing Desktop]# find /usr/bin -perm 4 755
/usr/bin/at
/usr/bin/chage
/usr/bin/pkexec
/usr/bin/Xorg
/usr/bin/crontab
/usr/bin/newgrp
/usr/bin/vim
/usr/bin/gpasswd
/usr/bin/passwd
/usr/bin/ksu
————————————————
1、不再允許添加新用戶的請求
chattr命令 :用於改變文件屬性
chattr +i 文件
lsttr命令 :查看文件屬性
lsattr 文件
[root@xing Desktop]# lsattr /etc/passwd /etc/shadow
-------------e- /etc/passwd
-------------e- /etc/shadow
[root@xing Desktop]# chattr +i /etc/passwd /etc/shadow
[root@xing Desktop]# lsattr /etc/passwd /etc/shadow
----i--------e- /etc/passwd
----i--------e- /etc/shadow
[root@xing Desktop]# useradd kk
useradd: cannot open /etc/passwd
2、umask
root用戶的umask默認值是0022,一般用戶默認是0002
目錄的最高許可權 0777-0022=0755
文件的最高許可權 0666-0022=644
一般伺服器配置umask的值配置為027最好;需要去修改兩處文件中的umask值。
/etc/profile
/etc/bashrc
3、修改默認的密碼最長有效期:修改以下配置文件
/etc/login.defs
3. Linux系統-文件系統&用戶組管理-問題解答
1)ls
ls -l /home/ #顯示home目錄下文件或文件夾的包括訪問許可權、所屬用戶、所屬主組、文件大小等信息, ls -l 也是別名ll的命令與選項部分。
ls -a /root #顯示root目錄下包括隱藏文件在內的所有文件
ls -d /etc/* #顯示etc目錄下所有子目錄(不包括文件)
ls -S /root #按文件從大到小排列顯示root目錄下各文件
ls -Sr /root #按文件從小到大排列顯示root目錄下各文件
ls -U /root #按文件創建時間從新到舊排列顯示root目錄下各文件
ls -X /root #按文件後綴排序顯示root目錄下各文件
ls -R /root #遞歸顯示root目錄下所有文件
ls -t /root #按修改數據內容的時間(mtime)從新到舊排列顯示root目錄下各文件
2)touch
touch /data/file1 #在data目錄下創建file1文件,如果目錄下已經有同名文件,則不會覆蓋同名文件
touch -t 201910200830.50 /etc/hosts #修改/etc/hosts文件的atime以及mtime的時間戳為2019年10月20日8點30分50秒
touch -c /data/f2 #刷新data目錄下f2文件的atime、mtime、ctime,如果f2文件不存在,則不會創建f2
3)cp
cp etc/hosts /home/ #復制/etc/hosts文件到 /home目錄下,如果home目錄下沒有hosts文件,則自動創建同名文件;如果有,則會直接覆蓋。
cp -i etc/hosts /home/ #復制/etc/hosts文件到 /home目錄下,如果home目錄下沒有hosts文件,則自動創建同名文件;如果有,則會詢問用戶是否覆蓋。
cp -r /etc/ntp /root #復制/etc/ntp目錄下所有子目錄以及文件到root目錄下
cp -a /home/* /data/ #復制/home/目錄下所有子目錄以及文件到data目錄下,所有文件的類型、軟鏈接、文件所屬關系、時間戳等信息都一並復制(但是home目錄下的隱藏文件不會被復制到data目錄下)
cp -av /home/* /data/ #在實現cp -a /home/* /data/ 復制的基礎上,在終端上顯示復制過程
cp -u /etc/* /data/ #將etc目錄下的文件復制到data目錄下,如果etc目錄的文件比data目錄下的同名文件新,則覆蓋data目錄下的同名文件,如果etc目錄下的文件比data目錄里的與之同名文件舊,則不覆蓋。
cp --backup=numbered etc/hosts /home/hosts #將etc目錄下hosts文件復制到home目錄下的hosts,在復制之前,會先對home目錄的hosts文件進行備份,避免被覆蓋後,原文件內容丟失。
4)mv
mv /etc/hosts /data/ #將etc目錄下hosts文件轉移到data目錄下,如果data目錄有同名文件,則直接覆蓋
mv -i /etc/hosts /data/ #將etc目錄下hosts文件轉移到data目錄下,如果data目錄有同名文件,則詢問是否覆蓋
mv f1 f2 #將當前目錄下的f1文件修改名字為f2
mv -t /data/ /etc/hosts #將etc目錄下hosts文件轉移到data目錄下,如果data目錄有同名文件,則直接覆蓋 。功能實現上與mv /etc/hosts /data/ 相同,但是移出路徑參數與移入路徑參數的位置發生了互換
mv downloads/ D #將當前目錄下的downloads目錄的名字改成D
5)rm
rm /data/f1 #刪除data目錄下的f1文件
rm -r /data/* #遞歸刪除data目錄下的所有文件
rm -rf /data/* #強制遞歸刪除data目錄下的所有文件
6)file
file /etc/hosts #查看etc目錄下hosts文件的文件類型,如文本文件、壓縮文件、可執行程序等
7)stat
stat /data/f1 #查看/data/f1文件的三個時間,內容數據修改時間mtime,讀取時間atime,元數據修改時間ctime
8)pwd
#在當前目錄下輸入pwd回車,查看當前所在目錄路徑
pwd -P #顯示當前目錄或文件夾的真實路徑
9)cd
cd /data #進入data目錄
cd ~root #進入root的家目錄
cd - #回到剛才離開的目錄
10)mkdir
mkdir /data/dir #在data目錄下創建dir目錄
mkdir -p /data/dir1/dir2/dir3/dir4 #在data目錄下創建子目錄dir1/dir2/dir3/dir4,若dir1、dir2、dir3都不存在,則遞歸創建
11)rmdir
rmdir /data/dir #刪除data目錄下的dir目錄,如果dir裡面有文件,則dir不能被刪除
rmdir -p /data/dir1/dir2/dir3/dir4 #若dir1、dir2、dir3、dir4都是空目錄,則遞歸刪除data目錄下的dir1、dir2、dir3、dir4目錄
12)ln
ln /data/f1 /data/f2 #在data目錄下創建文件f1的硬鏈接f2
ln -s f1 f1.link #在當前目錄下創建文件f1的軟鏈接f1.link
#當軟鏈接路徑與原文件路徑不同時,如軟鏈接位置是:/root/f1.link ,而原文件路徑是:/data/f1 。 則在創建軟鏈接時需要相對於軟鏈接的路徑,對原文件路徑補完相對路徑,具體如下:
ln -s ../data/f1 /root/f1.link
答:
1)創建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b
mkdir /tmp/a{1,2}
touch /tmp/a1/{a,b}
2)在/tmp目錄下創建目錄:x_y, x_z, q_y, q_z
mkdir /tmp/{x,q}_{y,z}
答:文件的元數據信息包括:
文件類型: 指文件所屬的類型,包括目錄、文本文件、壓縮文件、可執行程序等。系統實際上查看文件的頭部信息,magic number。
節點編號: 每個文件、文件夾在同一個磁碟分區內,都有一個唯一的節點編號inode,用於識別磁碟分區內的文件。節點編號的數量在一個磁碟分區內是有限的,如果節點編號耗盡,無論磁碟空間是否真的占滿,都會顯示磁碟空間已滿。
硬鏈接數: 是指指向該文件節點編號inode的文件名稱數量。
所屬用戶UID: 創建該文件的用戶的uid
所屬主組GID: 創建該文件的用戶的主組gid
文件大小: 表示該文件的磁碟空間佔用大小
mtime時間戳: 指文件的內容數據發生修改時的時間點
atime時間戳: 指文件被訪問時的時間點
ctime時間戳: 指文件的元數據發生變化時的時間點
訪問許可權: 指不同用戶對文件的訪問、修改、執行等操作的許可權
指向磁碟數據塊的直接指針: 直接指向磁碟數據塊的指針,一個文件最多有12個直接指針,每個直接指針指向一個4k大小的數據塊
指向磁碟數據塊的間接指針: 間接指向磁碟數據塊的指針,一個間接指針會先指向一個4k大小數據塊作為次階指針表,該數據塊又分成1024個4位元組大小的區間,一個區間存儲一個次階的指針,次階指針指向一個4k的磁碟數據塊存儲真正的文件數據,若依然不能滿足空間要求,則可繼續嵌套次階指針表,直到滿足文件存儲要求為止。
查看元數據信息方式:
1)ls -l /data #可查看data目錄下非隱藏文件的訪問許可權、所屬用戶UID、所屬用戶主組GID、mtime時間戳、文件大小、硬鏈接數。
2)stat /root/bin #可查看root目錄下bin目錄的atime時間戳、mtime時間戳、ctime時間戳
3)ls -lc /root/ #查看root目錄下非隱藏文件的ctime時間戳
4)ls -lu /root/ #查看root目錄下非隱藏文件的atime時間戳
5)ls -i /root #查看root目錄下所有非隱藏文件的節點編號
6)file /root/.bashrc #查看root目錄下.bashrc文件的文件類型
修改文件的時間戳信息:
touch -t 201910200830.50 /etc/hosts #將etc目錄下hosts文件的atime和mtime時間戳修改成2019年10月2日8時30分50秒
touch -a /etc/hosts #更新etc目錄下hosts文件的atime和ctime為當前時間
touch -m /etc/hosts #更新etc目錄下hosts文件的mtime和ctime為當前時間
答: touch /tmp/tfile-`date +"%F-%H-%M-%S"`
答:
mkdir /tmp/mytest1 #先創建mytest1目錄
cp -a /etc/p*[^0-9] /tmp/mytest1/
或:
cp -a /etc/p*[^[:digit:]] /tmp/mytest1/
答:
useradd -u 5001 -md /tmp/tom -s /bin/zsh -G jack tom
1)useradd
useradd jack #創建用戶jack,用戶策略採用系統默認配置
useradd -u 1008 jack #創建用戶jack,指定用戶的UID為1008
useradd -d /data/jack jack #創建用戶jack,指定用戶家目錄路徑為/data/jack
useradd -g 1111 jack #創建用戶jack,指定用戶主組是GID=1111的組,但GID=1111的組需要事先存在,否則無法創建
useradd -G tom jack #創建用戶jack,指定用戶jack加入附加組tom,但tom組需要事先存在,否則無法創建
useradd -s /bin/zsh jack #創建用戶jack,制定用戶jack的shell類型是zsh
useradd -r jack #創建系統用戶jack,系統用戶默認不創建家目錄
useradd -r -md /data/jack jack #配合-d選項,創建系統用戶jack,指定該系統用戶創建家目錄/data/jack,並在家目錄中載入默認配置文件
useradd -N jack #創建用戶jack,不創建jack同名主組,將jack主組默認為users
useradd -M jack #創建用戶jack,強制用戶jack不創建家目錄
2)usermod
usermod -G wang jack #將jack用戶的附加組更改為wang,原有附加組刪除
usermod -aG wang jack #在不退出原有附加組情況下,jack用戶增加附加組wang
usermod -l jacky jack #修改用戶名稱為jacky
usermod -e 20181212 jack #將用戶jack的賬號過期日期修改為2018年12月12日
usermod -s /bin/csh jack #修改用戶jack的shell類型為csh,與命令: chsh -s /bin/csh jack 相等
usermod -c 'abcdefg' jack #編輯用戶jack的注釋為abcdefg
3)userdel
userdel jack #刪除用戶jack
userdel -r jack #刪除用戶jack,包括用戶的家目錄、郵箱
4)groupadd
groupadd -g 1010 leo #創建組leo,指定GID為1010
groupadd -r leo #創建系統組leo
5)groupmod
groupmod -n lee leo #修改組leo名字為lee
groupmod -g 1111 leo #修改組leo的GID為1111
6)groupdel
groupdel wang #刪除wang組,但是wang組必須不是任何用戶的主組,否則不可以刪除
7)su
su jack #當前用戶非登錄切換到jack賬號,不讀取jack賬號配置文件
su - jack #當前用戶登錄切換到jack賬號,讀取jack賬號配置文件
8)groupmems
groupmems -l -g root #查看所有屬於root組的用戶
9)id
id #查看當前用戶的UID名稱 、 主組名稱GID 、 附屬組名稱GID
id root #查看root用戶的UID名稱、 主組名稱GID 、附屬組名稱GID
id -u root #查看root用戶的UID名稱
id -g root #查看root用戶的主組名稱GID
id -G root #查看root用戶的主組名稱GID 、 附屬組名稱GID
id -nG root #只查看root用戶的主組名稱 、 附屬組名稱
10)chfn
chfn jack #編輯修改用戶jack的注釋 ,與命令:usermod -c 'abcdefg' jack 類似
11)chsh
chsh -s /bin/csh jack #修改用戶jack的shell類型為csh
12)chage
chage jack # 互動式修改用戶jack的密碼策略,包括修改:密碼創建時間、最小密碼修改期、密碼有效期、過期通知、過期寬限期、賬戶有效時間
chage -l jack #查看用戶jack的密碼策略
chage -d 0 jack #讓用戶jack密碼期限立即過期,重新登錄需要更換密碼
13)passwd
passwd #修改當前用戶的賬號密碼
passwd jack #修改jack賬號密碼 (僅限root賬號)
passwd -e jack #強制jack用戶下次登錄修改密碼 (僅限root賬號)
echo hello | passwd --stdin jack #利用管道標准輸入,快速將jack用戶密碼修改成hello,無需輸入兩次新密碼,不檢驗密碼的復雜度
14)newgrp
newgrp root #將當前用戶的主組切換成root,原主組切換成附屬組,如果當前用戶的附屬組沒有root組,切換時需要輸入root組密碼;如果當前用戶的附屬組包含root組,則無需輸入組密碼,直接切換
15)gpasswd
gpasswd jack #創建jack組密碼
gpasswd -a wang jack #將wang用戶添加至jack組里
16)groups
groups jack #查看用戶jack所屬的組列表
4. linux中多用戶以及許可權的理解
linux操作系統是多用戶管理系統,管理起來非常麻煩,所以用組的概念來管理用戶就變的簡單多了, 一個用戶可以屬於多個組,一個組可以有多個用戶,用戶和組是多對多的關系。
linux的多用戶多分組管理系統都是針對 文件 來說的, 每個文件都有所屬的用戶和所屬的分組。
linux系統是根據用戶UID來識別用戶的,並不是根據用戶名。linux用戶分為以下3種
每行數據為一個用戶,可以看到紅色部分為root超級用戶,藍色部分為系統用戶,綠色部分為普通用戶。
我們可以看到該文件屬於root用戶和root組。然後root用戶許可權是rw-,root組內成員的許可權是r--,而其他用戶的許可權是r--。由於其他用戶的許可權都是r--,所以任何用戶都是可以讀的。
在/etc/group文件中存儲著系統的所有組,查看文件內容,如下圖
大致分為4段
我們可以看到圖中mail分組的第4段有值為postfix,也就是postfix用戶應該有倆個分組,一個初始組和一個附屬組,我們執行以下命令驗證
用戶密碼文件shadow和組密碼文件gshadow的許可權都是000,所有其他用戶是不能查看的,只有root用戶才可以查看,root用戶也是不能修改該文件的。
使用 whoami 命令查看。
postfix用戶有倆個所屬組postfix和mail。由此可見, uid是指用戶id(用戶名稱),gid是指初始組id(初始組名稱),groups是指包括初始組在內的所有組id(所有組名稱)
我們知道了/etc/group文件的第四段為 組內成員 ,所有我們可以通過 grep 來匹配相關組。比如查詢mail組內的所有成員,命令如下, 可以看到mail組內有mail,postfix和tom3個用戶。
上面是一種方法,我們也可以直接使用命令來查看。
添加用戶只能root用戶來添加,普通用戶沒有許可權,添加用戶有倆種方式
在centos系統下,這倆種方式沒有區別, 都會在/home下自動創建與用戶名同名的用戶目錄,且都是需要使用 passwd userName 命令來設置用戶密碼的,只有設置完密碼後才可以正常登錄。
在unbantu系統下,這倆種方式是有區別的,使用 useradd userName命令 不會在/home下自動創建與用戶名同名的用戶目錄,且不會自動選擇shell版本,後續也是需要使用 passwd username來設置密碼的 。 而使用 adser userName 命令的話 是會在/home目錄下自動創建與用戶名同名的用戶目錄,也會自動選擇shell版本,且會自動提示輸入用戶密碼,對用戶比較友好,後續不需要在使用passwd來設置密碼。
刪除用戶,並不會刪除用戶相關的文件
刪除用戶且一起刪除家目錄
格式如下:
參數如下:
-g 指定組(只有root可以使用)
-a 指定用戶加入組
-d 從組中刪除該用戶
-p 從組中清楚所有成員
-l 顯示組成員列表
linux中每個文件都是有許可權的。 每個文件都有自己的所屬用戶和所屬組,且擁有所屬用戶許可權,所屬組許可權和其他許可權3種。
許可權一般分為讀,寫,執行3種,通過這樣的機制來限制哪些用戶或用戶組可以對特定文件進行相應的操作。
目錄有x許可權才可以cd進入該目錄。目錄有r許可權才能在該目錄中使用ll或者ls查看目錄。一個目錄中的文件能否被刪除或者創建取決於該目錄是否有w許可權。
執行ll命令後顯示如下,我們解讀一下
從左到右發現一共有7段
然後執行如下命令
test文件的許可權改為
常用的參數為 -R ,常用於修改目錄許可權,該參數表示為該目錄以及目錄下的所有子文件都修改為相同的許可權。
然後執行如下命令
再次查看test文件
常用的參數為 -R ,常用於修改目錄,該參數表示為該目錄以及目錄下的所有子文件都修改為相同的用戶及用戶組。
想切換到root用戶,直接使用su命令即可
5. Linux用戶許可權管理命令
Linux系統中的用戶是分角色的,用戶的角色是由UID和GID來識別的(也就是說系統是識別的是用戶的UID、GID,而非用戶用戶名),一個UID是唯一(系統中唯一如同身份證一樣)用來標識系統的用戶賬號(用戶名)。
文件的用戶與用戶組分為超級管理員,普通用戶和系統用戶。
1)超級管理員的UID=0,GID=0,也可以這么說系統只要是識別出某個用戶的UIDGID都為0時,那麼這個用戶系統就認為是超級管理員。
2)普通用戶(管理員添加的),默認它的UIDGID是從500-65535,許可權很小,只能操作自己的家目錄中文件及子目錄(註:nobody它的UIDGID是65534)。
3)系統用戶,也稱虛擬用戶,也就是安裝系統時就默認存在的且不可登陸系統,它們的UIDGID是1-499。
我們可以通過cat /etc/passwd命令來查看所有的用戶信息,例如下圖,第三列是UID,第四列是GID:
創建用戶
useradd user1 創建用戶user1
useradd -e 12/30/2021 user2 創建用戶user2,有效期到2021-12-30
設置用戶密碼
passwd user1 設置密碼,有設置密碼的用戶不能用
這里設置密碼時可能會碰到密碼保護機制問題,這里需要注釋掉保護機制的問題
這個時候需要在編輯/etc/pam.d/system-auth文件,將其中的password requisite
和password sufficient兩行注釋掉,如下圖:
創建用戶組
groupadd –g 888 users 創建一個組users,其GID為888
groupadd users 不用g參數,使用默認的組ID
命令 gpasswd為組添加用戶
只有root和組管理員能夠改變組的成員:
gpasswd –a user1 users 把 user1加入users組
gpasswd –d user1 users 把 user1退出users組
命令groupmod修改組
groupmod –n user2 user1 修改組名user1為user2
groupdel刪除組
groupdel users 刪除組users
真正從安全性角度上來考慮的話,是要控制用戶一定執行命令的許可權,也就是哪些用戶可以執行哪些命令,不可以執行哪些命令,因此也就有了sudo這個應用,對於sudo提權,也就是修改/etc/sudoers的配置文件。
6. Linux用戶組管理
在創建用戶時不會創建附屬組,附屬組只能通過命令創建
使用命令groupadd創建一個附屬組謹簡,也可以在命令中添加參數 -g 指定組id,組id設置的時候應該大於1000,不能重復,重復有可能導致系統無法啟動
groupadd這個命令並不能將用戶添加進用戶組中去,我們如何把用戶添加進用戶組中呢?
使用命令gpasswd加參數-a向一個用戶組中添加用戶,如果不加-a的話默認是修改或者設置組密碼,使用到組密碼的場景很少,至少我沒有碰見過。
使用命令gpasswd和參數-d把一個用戶從一個蠢晌跡用戶組中移除
刪除組可以使用groupdel刪除組
用戶有自己的配置文件,組也有自己的配置文件,組的配置文件主要保存了組名稱,組密碼、組ID和組成員,這個配置文件統一保存帶並在/etc/group文件中並以: 作為分隔符