1.用戶權限設置以及更改
linux 判斷你的權限的是UID而不是GID
就算加入root的組也沒有root的權限,只有UID為0的才為管理員
useradd -s /sbin/nologin -r -d /data/mysql -m mysql -u 1234
運維的終極目標就是自動化管理,自動化管理的前提就是環境的統一化。
chown 設置文件的所有者把f1文件所有者變為Max
chown Max f1
chgrp 設置文件的所屬組把f1文件所屬組設為Maxi
chgrp Maxi f1
token里包含有你的(uid,gid,groups)
read r???? 讀
write w??? 寫
excute x?? 執行
二進制程序讀權限沒有什么實際意義,一般讀權限是給文本文件的
寫權限也是,除非你是黑客能看到二進制內容,隨便改有可能導致程序崩潰
注意:
1.普通用戶不能改文件所有者
2.普通用戶要改文件所屬組,首先文件必須是本人的,同時必須在想改變的組內
修改權限的方法
方法一:
chmod 改變權限
方法1:mode 法
chmod who opt per file
who:u g o a(a=all)
opt:+ – =
per:r w x X
例子:
chmod u+x file
chmod u+x,g-w,o=? file
對于普通用戶而言,文件所有者可以修改文件的權限
對于file,賦予擁有者x權限,組用戶去除w權限,other空權限
對于只有w權限而沒有r權限的可以往里面追加信息卻不能讀
例如:
echo mage2 >> f1
> f1 清空內容??!
但是
rm -f f1 沒法執行??!
因為刪除文件必須擁有目錄寫權限
刪除文件等于刪除目錄內容inode等
所以必須對文件夾有權限
刪除文件必須刪除目錄
讀權限對二進制程序不是必須例如
chmod -r /bin/cat
后照樣能夠執行
但是如果沒有執行權限就不能執行了
chmod -x /bin/cat
沒有讀權限有執行權限
file /bin/cat 失敗
因為file原理是打開文件后分析信息實現
讀權限對于目錄
對于目錄而言只有x權限,沒有r不能看文件列表但是可以打開里面文件,前提你知道文件名
有r而沒有x權限,不能cd進去,不能查看詳細屬性,也不能查看文件內容
rx權限對于目錄來說是基礎權限,一般全給要不就全不給。
如果對目錄只有wx權限就可以刪除目錄下的文件!前提你知道里面有什么文件!因為你沒有r權限!
另外,如果對于文件設置
chmod u=r,g=rw,o=rwx f1
結果用戶只有r權限
vfat系統是window系統文件系統不支持權限修改!
用參考文件f1的權限設置f2和f3
chmod –reference=f1 f2 f3
引用f1權限設置f2 f3
總結:
1.讀寫權限對root無效
2.執行權限例外,沒有執行權限包括root也不能運行,但是root可以修改權限
3.普通用戶無法修改文件的所有者
4.普通用戶要改文件所屬組必須自己在這個組以內
5.刪除文件不是對文件有寫權限而是對文件夾有寫權限
6.系統權限判斷的順序是所有者 所屬組 other,一旦匹配就不再判斷!不管后者的權限是不是比前者大!
7.權限修改是由文件系統決定的而不是操作系統決定的。
方法二:
數字法
u?? g?? o
rwx rw- r–
111 110 100
7?? 6?? 4
chmod 764 f1
r:4
w:2
x:1
— 000 0
–x 001 1
-w- 010 2
-wx 011 3
r– 100 4
r-x 101 5
rw- 110 6
rwx 111 7
常見
file:6rw,4r,0,1x
dir:7rwx,5r-x,0
為dir1目錄下的文件和文件夾都加執行權限
chmod -R a+x dir1
為dir2目錄下所有文件夾加執行權限
chmod -R +X dir2
當然有一種例外,如果擁有者已經有其中一個文件的執行權限那么用+X文件也會給其他文件加執行權
限??!
chown -R wang /*
chmod -R 777 /*
都是危險操作?。。。。。。。。。?!
一次性更改文件或者目錄所有者和所屬組(.或者:都可以做為分隔符)
chown wang.g1 dir1
chown root:admins testfile
同時修改所有者和所屬組
chown root. dir1
所有者不變,只修改所屬組
chown :bin dir1
以上2種方法一般少用,因為結果不明晰,容易出錯
默認權限
默認目錄權限755 文件644
默認創建文件和目錄的權限
umask
0022
umask022+default644|755=file666/dir777 初步后面必須修正??!奇數加1偶數不變對于文件而言!!文件
夾不用!??!
umask mask : 掩碼
功能:取消對應的權限
666
125
541
奇數加1偶數不動
110110110
001010101
11010010
642
總結:
對于目錄
unmask+default=777
對于文件
666-umask:對結果觀察,如果有奇數+1,偶數不變
如果想永久修改umask,可以把修改數據寫入.bashrc中格式為
umask xxx
在顯示umask值前面增加umask這個詞以方便寫入文件
umask -p
umask 0022
umask -p >> .bashrc
umask -S
則顯示u=rwx,g=rx,o=x
直接設置法:
umask u=rwx,g=r,o=
umask 026
練習
5、復制/etc/fstab文件到/var/tmp下,設置文件所有者為tomcat讀寫權限,所
屬組為apps組有讀寫權限,其他人無權限
6、誤刪除了用戶git的家目錄,請重建并恢復該用戶家目錄及相應的權限屬性
答案
5
useradd tomcat
groupadd apps
groupmems -a tomcat -g apps
cp /etc/fstab /var/tmp/
chown tomcat:apps fstab
chmod 660 fstab
6
1.mkdir /home/git
2.cp -a /etc/skel/.[^.]*? /home/git
或者
cp -r /etc/skel /home/git
3.chown -R git.git /home/git/
4.chmod 700 /home/git
2、特殊權限suid、sgid、sticky
linux 文件系統上的特殊權限
suid作用在于當一個用戶去運行一個程序的時候,會繼承二進制程序所有者的權限
用戶運行具有suid權限的程序時,會臨時繼承程序所有者的權限
s權限相當于S+x權限
數字法
chmod 4755 /usr/bin/passwd
chmod 755 /usr/bin/passwd 就是去s權限
chmod g+s FILE…
chmod g-s FILE…
suid只適合在二進制的可執行程序
sgid就是用戶運行具有suid權限的程序時,會臨時繼承程序所屬組的權限
1)繼承二進制程序所有者的權限
2)作用于目錄,此目錄新建的文件繼承目錄的所屬組
chmod 2755 /bin/nano
chmod g+s /bin/nano
chmod g+s DIR…
chmod g-s DIR…
sticky是針對文件夾設置的,設置在文件上沒有價值
作用于目錄,此目錄的文件只能被所有者或root刪除,又叫做粘滯位
chmod o+t dir1
chmod o-t dir1
chmod 1777 /data/dir1
普通用戶就算對dir1有寫權限,可是無法實現刪除其他客戶的文件!
總結:
1.suid:繼承二進制程序所有者的權限
2.sgid:
1>繼承二進制程序所有組的權限
2>作用于目錄,此目錄新建的文件繼承目錄的所屬組
3.sticky:作用于目錄,此目錄的文件只能被所有者刪除
當有wang和mage都參與一個項目需要在同一目錄dir1中創建文件,為了方便相互訪問文件,可以把目錄
dir1添加sgid權限,然后設置一個附屬組例如opts,讓wang和mage都加入該組,這樣由于dir1有s權限,那
么在該目錄下無論誰創建的文件,默認組都是opts,那么就組成員就可以訪問彼此的文件了,還可以為
other添加t權限,防止非文件所有者刪除文件。
chmod 3777 dir1??? (3 s+t )
chattr對文件加鎖,管理員也可以避免誤操作
chattr +i s?? 鎖定文件s不能刪除也不能改只能讀,包括root
chattr -i 解鎖
chattr +a 只允許追加內容
chattr +A 鎖定atime
lsattr ss? 顯示ss的特殊屬性
—–a———-
3、ACL權限設置
ACL
setfacl -m u:wang:0 f1???? set file acl
setfacl -m u:mage:rw f1
getfacl f1 查看f1設定的特殊權限列表
一旦啟用acl ,傳統組權限group會變成mask權限
setfacl -m g:g2:x f1? 加
setfacl -x g:g2 f1??? 刪
getfacl f1
mask定義了除user和other的最高權限
setfacl -m mask ::r f1
就是設置了除user和other之外最高只能有讀權限
如果之后對某一個文件執行
chmod g=rw f1
則mask 直接變為rw-
setfacl -b f1
清空權限列表
啟用ACL后的判斷順序依然是匹配順序,一旦匹配直接生效
所有者–》所屬組—》其他人
centos6 裝好系統后才手動添加的分區是不支持acl必須自己添加
centos7 全部支持acl
setfacl -M acl.txt f1
批量修改權限
練習
1、在/testdir/dir里創建的新文件自動屬于webs組,組apps的成員如:tomcat能對這些新文件有讀寫權
限,組dbs的成員如:mysql只能對新文件有讀權限,其它用戶(不屬于webs,apps,dbs)不能訪問這個文件
夾。
2、備份/testdir/dir里所有文件的ACL權限到/root/acl.txt中,清除/testdir/dir中所有ACL權限,最后還原
ACL權限
答案
1.
mkdir -p /testdir/dir
groupadd webs
groupadd apps
groupadd dbs
useradd -G apps tomcat
useradd -G dbs mysql
setfacl -m g:apps:rwx /data/testdir/dir
setfacl -m g:dbs:r-x /data/testdir/dir
chmod o=”” /data/testdir/dir
2.
getfacl -R /test/dir > /root/acl.txt
setfacl -R -b /test/dir
setfacl -R –set-file=acl.txt /root
setfacl –restore acl.txt
getfacl -R /tmp/dir1
4、cat命令、head命令、tail命令、cut命令、paste命令
文本編輯工具
cat
顯示行結束符$
cat -E
對每一行進行編號
cat -n
顯示所有控制符
cat -A
顯示非空編號
cat -b
壓縮連續的空行成一行
cat -S
反向顯示
tac 豎著反
rev 橫著反
這樣設置方便以后的網絡教學:
centos 6
service iptables stop
chkconfig iptables off
centos 7
systemctl stop firewalld
systemctl disable firewalld
文件截取
head
指定獲取前#字節
head -c#
指定獲取前#行
head -n#
指定獲取第#行
head -#
tail
指定獲取后#字節
tail -c#
指定獲取到后#行
tail -n#
指定獲取后第#行
tail -#
跟蹤顯示文件fd新追加的內容,常用日志監控相當于–follow=descriptor
tail -f
跟蹤文件名,相當于–follow=name –retry例如當原文件被執行刪除時會有提示,原理是跟蹤文件名
tail -F
當文件不增長時并不訪問文件,類似tail -f
cut
指明分隔符,默認tab
cut -d
cut -f#
#:第#個字段
#,#:離散的多個字段,例如1,3,6
#-#:連續的多個字段,例如1-6
混合使用:1-3,7
例如取/etc/passwd文件里的第一和第三列,還有第五列到第七列用:做為列分隔符
cut -d: -f 1,3,5-7? /etc/passwd
按字符切割
cut -c
例如取who命令里面的前9個字符
who | cut -c1-9
例如用cut利用率取分區利用率
df | tr -s ” ” | cut -d” ” -f5 | tr -d “%” |
df | tr -s ” ” % |cut -d% -f5
又例如取出ifconfig ens33中的ip地址
ifconfig ens33 |head -n2 | tail -n1 |tr -s ” “|cut -d” ” -f3
取出ifconfig eth0 ip
ifconfig eth0|head -n2|tail -n1|tr -s ” ” :|cut -d: -f4
指定輸出分隔符
cut -d: -f1,3 –output-delimiter=”===” /etc/passwd
paste
合并兩個文件同行號的列到一行
paste -d? 指定分隔符
paste -s? 所有行合成一行顯示
wc (word count)
例如
wc f1
10 10 21 f1
行數 單詞數 字節數
統計行數
wc -l
統計單詞數
wc -w
統計字符數
wc -m
5、sort命令、uniq命令、diff命令
sort
從列中抽出數據按照指定的規則排序
sort -t? 指定分隔符
sort -k? 指定列數
sort -n? 按照數字大小排序
例如按照數字大小排序/etc/passwd下的uid
正向
sort -t:-k3 -n /etc/passwd
反向
sort -t:-k3 -nr /etc/passwd
取出df中占有率最大的數值
df | tr -s ” ” % |cut -d% -f5 |sort -nr |head -n1
把重復的內容取消
sort -u
例如把/etc/passwd下的用戶按uid進行排序
cut -d: -f1,3 /etc/passwd |sort -t: -k2 -nr
uniq
從標準輸入中刪除前后相接的重復的行
顯示重復的行出現的次數
uniq -c
僅顯示重復過的行
uniq -d
僅顯示不曾重復的行
uniq -u
統計當前連接本機的每個遠程主機IP的連接數,并按從大到小排序
last | tr -s ” ” |cut -d” ” -f1,3|sort -t” ” -k2 -nr|uniq -c|sort -nr|head -n3|tr -s ” “|cut -d” ” -f4
比較文件
diff
diff f1 f2
顯示額外的信息
diff -u f1 f2
通過diff.log文件和f2恢復已經刪除的文件f1
diff -u f1 f2 > diff.log
patch -b f2 diff.log
由于通過命令找回的文件會命名為f2所以會覆蓋原f2內容,為了避免于此,就加-b選項對f2做備份
生成f2.orig,運行此命令后會生成f2就是原來的f1,f2.orig就是原來的f2
練習
1、找出ifconfig “網卡名” 命令結果中本機的IPv4地址
2、查出分區空間使用率的最大百分比值
3、查出用戶UID最大值的用戶名、 UID及shell類型
4、查出/tmp的權限,以數字方式顯示
5、統計當前連接本機的每個遠程主機IP的連接數,并按從大到小排序
答案
1.
centos7
ifconfig ens33 | head -n2 | tr -s ” ” : | cut -d: -f3
centos6
ifconfig ens33 | head -n2 | tr -s ” ” : | cut -d: -f3
2.
df | tr -s ” ” % | cut -d% -f5 | sort -n | tail -n1
3.
cat /etc/passwd |sort -t: -k3 -nr | head -n1 | cut -d: -f1,3,7
4.
5.
last | tr -s ” ” |cut -d” ” -f1,3|sort -t” ” -k2 -nr|uniq -c|sort -nr|head -n3|tr -s ” “|cut -d” ” -f4
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95931