1. 程式人生 > >第五天用戶組和權限管理

第五天用戶組和權限管理

sig 清空 delet 相關 chmod 遞歸 屬性修改 control 恢復

我把文件管理在總結一下:
組group
用戶管理命令
useradd
useradd [options] LOGIN
-u UID
-o 配合-u 選項,不檢查UID的唯一性
-g GID 指明用戶所屬基本組,可為組名,也可以GID
-c "COMMENT“ 用戶的註釋信息
-d HOME_DIR 以指定的路徑(不存在)為家目錄
-s SHELL 指明用戶的默認shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 為用戶指明附加組,組須事先存在
-N 不創建私用組做主組,使用users組做主組
-r 創建系統用戶 CentOS 6: ID<500,CentOS 7: ID<1000
-m 創建家目錄,用於系統用戶
-M 不創建家目錄,用於非系統用戶
創建用戶: useradd
默認值設定:/etc/default/useradd
顯示或更改默認設置
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GROUP
usermod
usermod [OPTION] login
-u UID: 新UID
-g GID: 新主組
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加組,原來的附加組將會被覆蓋;若保留原有,則要同時使用-a選項
-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: 設定非活動期限
userdel
userdel [OPTION]... login
-r: 刪除用戶家目錄
組帳號維護命令
groupadd
groupmod
groupdel

查看用戶相關的ID信息
id [OPTION]... [USER]
-u: 顯示UID
-g: 顯示GID

-G: 顯示用戶所屬的組的ID
-n: 顯示名稱,需配合ugG使用

切換用戶或以其他用戶身份執行命令
su [options...] [-] [user [args...]]
切換用戶的方式:
su UserName:非登錄式切換,即不會讀取目標用戶的配置文件,不改變當前工作目錄
su - UserName:登錄式切換,會讀取目標用戶的配置文件,切換至家目錄,完全切換
root su至其他用戶無須密碼;非root用戶切換時需要密碼
換個身份執行命令:
su [-] UserName -c ‘COMMAND‘
選項:-l --login
su -l UserName 相當於 su - UserName

設置密碼
passwd [OPTIONS] UserName: 修改指定用戶的密碼
常用選項:
-d:刪除指定用戶密碼
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登錄修改密碼
-f:強制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天開始警告
-i inactivedays:非活動期限
--stdin:從標準輸入接收用戶密碼
示例:echo "PASSWORD" | passwd --stdin USERNAME

修改用戶密碼策略
chage [OPTION]... LOGIN
-d LAST_DAY
-E --expiredate EXPIRE_DATE
-I --inactive INACTIVE
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-l 顯示密碼策略
示例:
chage -d 0 tom 下一次登錄強制重設密碼
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom

創建組
groupadd [OPTION]... group_name
-g GID 指明GID號;[GID_MIN, GID_MAX]
-r 創建系統組
CentOS 6: ID<500
CentOS 7: ID<1000

修改和刪除組
組屬性修改:groupmod
groupmod [OPTION]... group
-n group_name: 新名字
-g GID: 新的GID
組刪除:groupdel
groupdel GROUP

更改組密碼
組密碼:gpasswd
gpasswd [OPTION] GROUP
-a user 將user添加至指定組中
-d user 從指定組中移除用戶user
-A user1,user2,... 設置有管理權限的用戶列表
newgrp命令:臨時切換主組
如果用戶本不屬於此組,則需要組密碼

更改和查看組成員
groupmems [options] [action]
options:
-g, --group groupname 更改為指定組 (只有root)
Actions:
-a, --add username 指定用戶加入組
-d, --delete username 從組中刪除用戶
-p, --purge 從組中清除所有成員
-l, --list 顯示組成員列表
groups [OPTION].[USERNAME]... 查看用戶所屬組列表

修改文件的屬主和屬組
修改文件的屬主:chown
chown [OPTION]... [OWNER][:[GROUP]] FILE...
用法說明:
OWNER
OWNER:GROUP
:GROUP,冒號也可用 . 替換
-R: 遞歸
chown [OPTION]... --reference=RFILE FILE...

修改文件的屬組:chgrp
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R 遞歸

文件權限
文件的權限主要針對三類對象進行定義
owner 屬主, u
group 屬組, g
other 其他, o
每個文件針對每類訪問者都定義了三種權限
r Readable
w Writable
x eXcutable

文件權限
文件:
r 可使用文件查看類工具獲取其內容
w 可修改其內容
x 可以把此文件提請內核啟動為一個進程
目錄:
r 可以使用ls查看此目錄中文件列表
w 可在此目錄中創建文件,也可刪除此目錄中的文件
x 可以使用ls -l查看此目錄中文件元數據(須配合r),可以cd進入此目錄
X 只給目錄x權限,不給文件x權限

修改文件權限
chmod [OPTION]... OCTAL-MODE FILE...
-R: 遞歸修改權限
chmod [OPTION]... MODE[,MODE]... FILE...
MODE:
修改一類用戶的所有權限
u= g= o= ug= a= u=,g=
修改一類用戶某位或某些位權限
u+ u- g+ g- o+ o- a+ a- + -
chmod [OPTION]... --reference=RFILE FILE...
參考RFILE文件的權限,將FILE的修改為同RFILE

新建文件和目錄的默認權限
umask值 可以用來保留在創建文件權限
新建文件的默認權限: 666-umask,如果所得結果某位存在執行(奇數)權限,則將其權限+1
新建目錄的默認權限: 777-umask
非特權用戶umask是 002
root的umask 是 022
umask: 查看
umask # 設定
示例:umask 002
umask u=rw,g=r,o=
umask –S 模式方式顯示
umask –p 輸出可被調用
全局設置: /etc/bashrc 用戶設置:~/.bashrc

Linux文件系統上的特殊權限
?SUID, SGID, Sticky
?三種常用權限:r, w, x user, group, other
?安全上下文
?前提:進程有屬主和屬組;文件有屬主和屬組
(1) 任何一個可執行程序文件能不能啟動為進程,取決發起者對程序文件是否擁有執行權限
(2) 啟動為進程之後,其進程的屬主為發起者,進程的屬組為發起者所屬的組
(3) 進程訪問文件時的權限,取決於進程的發起者
(a) 進程的發起者,同文件的屬主:則應用文件屬主權限
(b) 進程的發起者,屬於文件屬組;則應用文件屬組權限
(c) 應用文件“其它”權限

設定文件特定屬性
chattr +i 不能刪除,改名,更改
chattr +a 只能追加內容
lsattr 顯示特定屬性

訪問控制列表
ACL:Access Control List,實現靈活的權限管理
除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限
CentOS7 默認創建的xfs和ext4文件系統具有ACL功能
CentOS7 之前版本,默認手工創建的ext4文件系統無ACL功能,需手動增加
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
ACL生效順序:所有者,自定義用戶,自定義組,其他人

練習沒有執行權限,只能看到文件,不能看

vfat格式的系統也就是FAT32不支持讀寫,就是文件系統不支持讀寫權限
chmod --reference=f1 f2 f3(將f2與f3的權限跟f1一樣)

數字法:
u g o
rwx rw- r--
111 110 100

421 最大是7
r4
w2
x1

比如:chmod 764 file

file(文件):6(rw),4(r),0(啥都沒有),
如果有基數說明一定有X
dir(文件夾):7(rwx),5(r-x),0

chmod -R a+x dir1(文件夾)(這個命令就是,-R就是遞歸的意思,就是dir所有目錄與文件的三個權限類型都加執行權限)

chmod -R -x dir2(把dir2目錄下的文件與目錄都去掉執行權限)

chmod -R -X dir2(把dir2目錄下的目錄都去掉執行權限,這個只針對目錄不針對文件,但是如果本身dir2下的文件有一個是帶x權限的,那麽三個類型的執行權限都會加上)

如果文件夾下有執行文件,那麽這個文件夾一定要有執行權限

chmod -R 777 dir1(這種方法太不安全了,誰都能操控了)他的危險完全不下與rm -rf /,如果寫成chmod -R 777 /你就完蛋了!chown -R guoguo /*(所有文件所有者都變成guoguo了),帶R都是很危險的!

chown wang.g1 dir1(就是把dir1文件的所有者改成wang,所有組改成g1組)

看當前umask,就是 umask回車,以後改配置可以使用 umask -p >> .bashrc
[root@centos7 data]#umask -S(直接看默認)
u=rwx,g=rx,o=rx
[root@centos7 data]#umask u=rwx,g=r,o=(或者直接給權限)

umask(022)+defaul(644)=file666/dir777 文件644 文件夾755

mask:掩碼
usmask的功能:取消對應的權限

對於目錄:umask+defaul=777

對於文件:666-umask:對結果進行觀察
比如:
666
125

541(偶數不變,基數加一)
642

比如:我設定umask 251
文件夾權限就是:777-251=526
文件權限就是:666-251=415,426

寫進文件裏面比如,如下
cat .bashrc
umask 51

註意:
5、日常目錄也是有執行權限,但是文件最好沒有執行權限,因為病毒***用的就是文件的執行權限
練習題:
復制/etc/fstab文件到/var/tmp下,設置文件所有者為tomcat讀寫權限,所屬組為apps組有讀寫權限,其他人無權限
[root@centos7 tmp]#useradd tomcat(先建這個用戶)
[root@centos7 tmp]#groupadd apps(創建這個apps組)
[root@centos7 tmp]#groupmems -a tomcat -g apps(把tomcat加入apps這個組)(題目沒要求可以略過)
[root@centos7 data]#cp /etc/fstab /var/tmp
[root@centos7 data]#cd !$
cd /var/tmp
[root@centos7 tmp]#ls
abrt
fstab
systemd-private-75d06b4c0df04766bda643d769625d5d-bolt.service-KlIgwn
systemd-private-75d06b4c0df04766bda643d769625d5d-colord.service-v7ECGt
systemd-private-75d06b4c0df04766bda643d769625d5d-cups.service-FGQRa4
systemd-private-75d06b4c0df04766bda643d769625d5d-fwupd.service-qCbq0e
systemd-private-75d06b4c0df04766bda643d769625d5d-rtkit-daemon.service-wdCuu4
[root@centos7 tmp]#ll
total 4
drwxr-xr-x. 2 abrt abrt 6 Dec 12 11:39 abrt
-rw-r--r--. 1 root root 595 Dec 18 11:27 fstab
drwx------. 3 root root 17 Dec 18 08:41 systemd-private-75d06b4c0df04766bda643d769625d5d-bolt.service-KlIgwn
drwx------. 3 root root 17 Dec 18 08:41 systemd-private-75d06b4c0df04766bda643d769625d5d-colord.service-v7ECGt
drwx------. 3 root root 17 Dec 18 08:41 systemd-private-75d06b4c0df04766bda643d769625d5d-cups.service-FGQRa4
drwx------. 3 root root 17 Dec 18 08:41 systemd-private-75d06b4c0df04766bda643d769625d5d-fwupd.service-qCbq0e
drwx------. 3 root root 17 Dec 18 08:40 systemd-private-75d06b4c0df04766bda643d769625d5d-rtkit-daemon.service-wdCuu4
[root@centos7 tmp]#chmod 660 fstab(改權限)
[root@centos7 tmp]#chown tomcat:apps fstab(所有者,所有組也要改)

6、誤刪除了用戶git的家目錄,請重建並恢復該用戶家目錄及相應的權限屬性
mkdir /home/git
cp -a /home/git /etc/skel/.[^.]* /home/git
chown -R git.git /home/git/
chmod 700 /home/git

SUID,SGID,Sticky
suid(集成所有者的權限,只適合2進制可執行的程序,繼承2進制程序所有者的權限)
SGID(繼承2進制程序所有組的權限)
(作用於目錄,此目錄新建的文件繼承目錄的所屬組)
Sticky(粘滯位)(針對文件夾)root創建這個命令 chmod o+t dir1(創建這個命令後,就算dir1文件夾o有刪除權限,那也只能刪除自己的,不能刪除他人的)
數字法 chmod 1777 /data/dir1

chattr (避免root賬號刪除)
chattr +i s(s就是文件)(給s這個文件加鎖)
[root@centos7 data]#lsattr s(查看這個文件的加鎖狀態)
----i----------- s
[root@centos7 data]#chattr -i s (解鎖)
[root@centos7 data]#chattr +a s(追加是可以的)

ACL
[root@centos7 data]#setfacl -m u:guoguo:0 f1(就不能讓guoguo對這個文件進行訪問)
[root@centos7 data]#setfacl -m u:guoguo:rw f1(就不能讓guoguo對這個文件進行能讀能寫)

[root@centos7 data]#getfacl f1(查看ACL是特殊的mask不要當成正常的權限信息)

file: f1

owner: root

group: root

user::rw-
group::r--
other::r--

[root@centos7 data]#setfacl -m g:g1:rw f1(這個g:就是組加g1這個組,給讀寫的權限,給f1)

setfacl -x g:g1 f2(刪除)
setfacl -m mask::r f1(只要我這裏設置了,其他的不管是誰比我高,都砍掉)
setfacl -b f1(清空acl的所有權限)
acl實施的順序

下面這個方式是基數偶數最老的看法,可以略過
110110110
001010101

110100010(最終權限)

0取消
1不取消

文本處理工具
文件查看
cat(查看文本文件的)

cat -n a.txt(假如裏面有很多空行)
cat -ns a.txt(上下空格會壓縮成一個)
cat -A a.txt(以後寫腳本用A可以看空格)

[root@centos7 data]#echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@centos7 data]#echo {1..10} > f2
[root@centos7 data]#rev f2(一行反向顯示)
01 9 8 7 6 5 4 3 2 1

more(對大文件進行分頁顯示)
用空格鍵往下翻
less(也是看文件)(man用的就是less)

head(顯示文件的頭,默認是前10行)
[root@centos7 data]#head /etc/passwd(默認看10行)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

[root@centos7 data]#head -n 3 /etc/passwd (看3行)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@centos7 data]#ifconfig | head -2
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.223.136 netmask 255.255.255.0 broadcast 192.168.223.255

[root@centos7 data]#echo acbd | head -c3(取前三)
acb[root@centos7 data]#

[root@centos7 data]#openssl rand -base64 100 | tr -dc ‘[:alnum:]‘ | head -c 12(取前12個除了字母以外的字符)
il2soZbe0Utx[root@centos7 data]#

[root@centos7 data]#ifconfig | tail -n 3(取後三行)
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tail命令一般日誌文件用的多

[root@centos7 data]#tail -f /data/f2.log(盯著這個日誌文件的變化)

date -d ‘-1 day‘(顯示昨天日期)

cut剪切
[root@centos7 data]#cut -d: -f 1,3 /etc/passwd(剪切passwd前1與3列)

[root@centos7 data]#cut -d: -f 5-7 /etc/passwd(這麽寫也可以)

df | tr -s " " |cut -d " " -f5 |tr -d "%"
Use
8
0
0
2
0
1
17
1
100

[root@centos6 ~]#ifconfig eth0 | head -n2 | tail -n1 | tr -s " " : | cut -d: -f4 (centos6取ip地址)

[root@centos7 data]#ifconfig ens33 | head -n2 | tail -n1 | tr -s " " | cut -d" " -f3
192.168.223.136(centos7取ip地址)

centos6
[root@centos6 ~]#rpm -ivh /media/CentOS_6.10_Final/Packages/httpd-2.2.15-69.el6.centos.x86_64.rpm
warning: /media/CentOS_6.10_Final/Packages/httpd-2.2.15-69.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing... ########################################### [100%]
package httpd-2.2.15-69.el6.centos.x86_64 is already installed
啟動服務service httpd start
[root@centos6 ~]#iptables -F(禁用防火墻)
[root@centos6 ~]#service iptables stop(馬上關閉防火墻)
[root@centos6 ~]#chkconfig iptables off(下次重啟關閉防火墻)

centos7
[root@centos7 data]#systemctl stop firewalld(馬上關閉防火墻)
[root@centos7 data]#systemctl disable firewalld(下次重啟關閉防火墻)

[root@centos6 ~]#tail -f /var/log/httpd/access_log

cut -d" " -f1 /var/log/httpd/access_log(這個是截取ip)

paste合並把兩個列合在一起

paste f1 f2

1 10
2 11
3 12
cat f1 f2(這不就是縱向合並了一列了嗎)

1
2
3
10
11
12
paste -s f1 f2
123
101112

paste -d ":" f1 f2
1:10
2:11
3:12

文本工具
wc(是輸入,跟管道用的多)
wc f1
默認顯示 幾行 幾個單詞 幾個字節(不嚴謹)
ls |wc

[root@centos6 ~]#wc -l /etc/passwd(統計多少行,加l,比如這個就有35個用戶)
35 /etc/passwd

-c統計字符
-m統計字符
-L統計(就是這個文件中最長的那個)
[root@centos6 ~]#cat /var/log/httpd/access_log |wc -l(查詢訪問量)

sort -t:-k3 /etc/passwd(排序)(-t是選擇的是:,-k3是第三列,默認是字母排序,加-n就是按照數字排序,在加-r就是倒序)

[root@centos6 ~]#df | tr -s ‘ ‘ % |cut -d% -f5 |sort -nr |head -n1

[root@centos6 ~]#netstat -nt (查詢遠程連接的數量)

[root@centos6 data]#seq 102 |sort -R |head -n1

cut -d:f1,3 /etc/passwd |sort -t: -k2 -nr

uniq命令取唯一的,從輸入中刪除前後相接的重復行
比如
aa
aa
bb
cc
cc
使用uniq -c f1
就會變成
2 aa
1 bb
2 cc

統計一下訪問次數最多的前10名

cat /var/log/httpd/access_log | cut -d" " -f1 | sort | uniq -c | sort -nr |head -n10

cut -d:f1,3 /etc/passwd |sort -t: -k2 -nr

[root@centos6 ~]#df | tr -s ‘ ‘ % |cut -d% -f5 |sort -nr |head -n1

[root@centos6 ~]#cat /var/log/httpd/access_log |wc -l(查詢訪問量)

sort -t:-k3 /etc/passwd

文件有讀,文件夾有執行就能拷

suid4 sgid2 sticky1

[root@centos6 ~]#cat ss.log | tr -s " "|cut -d: f6|sort|uniq-c|sort -nr|

sz(從linux傳到windows)
rz(從windows傳到本地)

[root@centos7 data]#cat /etc/passwd | sort -rnt: -k3 | head -n1 (sort,rn不解釋了,-t為啥加“:”,k3就是以:的第三列做排列,第三列正好是數字)
(head -n1就是只顯示第一行)
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
mage:x:1001:1003::/home/mage:/bin/bash
guoguo:x:1000:1000:guoguo:/home/guoguo:/bin/bash

第五天用戶組和權限管理