M20 – 1- 第三周博客:Linux中的權限以及特殊權限

上一篇講到了用戶與用戶組,相信大家都明白了Linux中用戶與用戶組的含義和用處,那接下來講的就是Linux中設置用戶與用戶組有使用權限。

Linux用戶權限

何為權限,權限(privilege)是指某個特定的用戶具有特定的系統資源使用權力,而權限又有哪幾種呢。

Linux用戶中主要針對三類著三種權限:讀、寫、執行,而Linux中存在著目錄與文件,而目錄的權限代表的含義與文件卻又不一樣,接下對目錄與文件的權限詳解:

文件的權限和屬主屬組主要針對三類對象進行定義:

owner:屬主, u
group: 屬組, g
other: 其他, o
r: 可以使用ls查看此目錄中文件列表
w: 可在此目錄中創建文件,也可刪除此目錄中的文件
x: 可以使用ls -l查看此目錄中文件列表,可以cd進入此目錄
X:只給目錄x權限,不給文件x權限

每個文件針對每類訪問者都定義了三種權限:

r: Readable
w: Writable
x: eXcutable
r: 可使用文件查看類工具獲取其內容
w: 可修改其內容
x: 可以把此文件提請內核啟動為一個進程

如何查看文件的權限有屬于那些用戶呢,請看下圖:

QQ截圖20160805221253.png

從上圖可以看出普通文件"install.log"的屬主(所有者)為root,而屬主的權限為讀(r)寫(w)權限,屬組(所屬組)也為root,屬組的權限為讀(r),而其他用戶的權限為讀(r),(對于root超級管理員而言,實際是有任何的權限),用數字表示該用戶的權限應為"0644",為何會有0呢,"0"這個數字是特殊權限,下面將會將特殊權限,而數字表示簡寫為"644",如何對文件添加權限和文件的屬主屬組呢,Linux系統中有很多命令是給用戶加權限的,但是有兩個常用的命令對文件添加權限和屬主和屬組:

chown命令

簡介:
chown - change file owner and group
格式:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
選項:
-R: 遞歸
實例1:
[root@centos6 ~]# id user1
uid=3000(user1) gid=3000(user1) groups=3000(user1)
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 root root 45324 Aug  5 19:24 install.log
[root@centos6 ~]# chown user1.user1 install.log   #將普通文件"install.log"的屬主和屬組更改為user1用戶
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 user1 user1 45324 Aug  5 19:24 install.log

chgrp 命令

簡介:
chgrp - change group ownership
格式:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
選項:
-R:遞歸
實例1:
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 user1 user1 45324 Aug  5 19:24 install.log
[root@centos6 ~]# man chgrp
[root@centos6 ~]# chgrp root install.log  #只更改普通文件"install.log"的屬組為root
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 user1 root 45324 Aug  5 19:24 install.log

chmod 命令

簡介:
chmod - change file mode bits
格式:
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
選項:
-R: 遞歸修改權限
--reference=RFILE FILE...: 參考RFILE文件的權限,將FILE的修改為同RFILE;
字母加添法:
修改一類用戶的所有權限:
u= g= o= ug= a= u=,g=
修改一類用戶某位或某些位權限
u+ u-g+ g-o+ o-a+ a-+ -
實例1:
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 user1 root 45324 Aug  5 19:24 install.log
[root@centos6 ~]# chmod ug=rwx install.log  #給普通文件"install.log"的屬主屬組添加r(讀)w(寫)x(執行)權限
[root@centos6 ~]# ls -l install.log
-rwxrwxr--. 1 user1 root 45324 Aug  5 19:24 install.log

給用戶添加權限還有一種方式為數字修改法,而數字添加總共有幾種模式呢,請看下面:

這種表示法為八進制:

--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

因此可以看作為:

blob.png

例如:640: rw-r-----    rwxr-xr-x: 755

那在這里很多人就問了,創建文件和目錄的權限是多少呢,實際是由文件或目錄的"默認權限-umask",何為umask,(Tips:超級管理員的目錄的默認權限為777,文件的默認權限為666,umask是0022;非特權用戶umask是0002)

umask 命令

簡介:
Display or set file mode mask.
格式:
umask [-p] [-S] [mode]
選項:
–S:模式方式顯示
–p:輸出可被調用
實例1:
[root@centos6 ~]# umask -p
umask 0022
[root@centos6 ~]# umask -S
u=rwx,g=rx,o=rx
實例2:
[root@centos6 ~]# umask 0002
[root@centos6 ~]# umask
0002

而umask的默認值的定義是由配置文件定義的:

[root@centos6 ~]# grep -C5 'umask' /etc/bashrc 
                    PATH=$1:$PATH
                fi
        esac
    }

    # By default, we want umask to get set. This sets it for non-login shell.
    # Current threshold for system reserved uid/gids is 200
    # You could check uidgid reservation validity in
    # /usr/share/doc/setup-*/uidgid file
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then   #當前登錄的用戶名的UID是否大于199和當前用戶的id名稱與當前用戶的基本組id是否一致,如果兩種情況滿足,umask就是002,如果其中一個不滿足,uamsk就是022
       umask 002
    else
       umask 022
    fi

    # Only display echos from profile.d scripts if we are no login shell
    # and interactive - otherwise just process them to set envvars
    for i in /etc/profile.d/*.sh; do

可以在個人配置文件中定義

用戶設置:~/.bashrc
全局設置:/etc/bashrc

Linux用戶的特殊權限

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

文件上的特殊權限:SUID, SGID, Sticky

特殊權限:SUID

任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬主
SUID只對二進制可執行程序有效
SUID設置在目錄上無意義

權限設定:chmodu+sFILE...;chmodu-s FILE...

特殊權限:SGID

任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬主
SUID只對二進制可執行程序有效
SUID設置在目錄上無意義
權限設定:chmodu+sFILE...;chmodu-s;FILE...

目錄上的特殊權限:SUID, SGID, Sticky

默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組
一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組
通常用于創建一個協作目錄
    權限設定:chmodg+sDIR...;chmodg-s DIR...

特殊權限:Sticky 位

具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件
sticky 設置在文件上無意義
權限設定:chmodo+tDIR...;chmodo-t DIR...
例如:
ls-ld/tmp  
drwxrwxrwt12rootroot4096Nov215:44/tmp

因此特殊權限數字法也是有八種模式

000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
寫法:chmod4777 /tmp/a.txt

權限位映射

SUID: user,占據屬主的執行權限位
s: 屬主擁有x權限
S:屬主沒有x權限
SGID: group,占據屬組的執行權限位
s: group擁有x權限
S:group沒有x權限
Sticky: other,占據other的執行權限位
t: other擁有x權限
T:other沒有x權限

設定文件特定屬性chattr、lsattr命令

chattr 命令

簡介:
chattr - change file attributes on a Linux file system
格式:
chattr [ -RVf ] [ -v version ] [ mode ] files...
實例1:
chattr +i 不能刪除,改名,更改
[root@centos6 ~]# chattr +i anaconda-ks.cfg 
[root@centos6 ~]# rm anaconda-ks.cfg 
rm: remove regular file `anaconda-ks.cfg'? y
rm: cannot remove `anaconda-ks.cfg': Operation not permitted
[root@centos6 ~]# mv anaconda-ks.cfg anaconda-ks.cfg.bak
mv: cannot move `anaconda-ks.cfg' to `anaconda-ks.cfg.bak': Operation not permitted
[root@centos6 ~]# echo "abc" > anaconda-ks.cfg 
-bash: anaconda-ks.cfg: Permission denied

lsattr 命令

簡介:
lsattr - list file attributes on a Linux second extended file system
格式:
lsattr [ -RVadv ] [ files...  ]
實例1:
[root@centos6 ~]# lsattr anaconda-ks.cfg
----ia-------e- anaconda-ks.cfg

訪問控制列表

ACL:Access Control List,實現靈活的權限管理

除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限
CentOS7.0默認創建的xfs和ext4文件系統有ACL功能。
CentOS7.X之前版本,默認手工創建的ext4文件系統無ACL功能。需手動增加:tune2fs –o acl/dev/sdb1;mount –o acl/dev/sdb1 /mnt
ACL生效順序:所有者,自定義用戶,自定義組,其他人

為多用戶或者組的文件和目錄賦予訪問權限rwx

mount -o acl /directory
getfacl file |directory
setfacl -m u:wang:rwx file|directory
setfacl -Rm g:sales:rwX directory
setfacl -M file.acl file|directory
setfacl -m g:salesgroup:rw file| directory
setfacl -m d:u:wang:rx directory
setfacl -x u:wang file |directory
setfacl -X file.acl directory

ACL中的權限設置

ACL文件上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權限),而非傳統的組權限
getfacl可看到特殊權限:flags
默認ACL權限給了x,文件也不會繼承x權限。
base ACL 不能刪除
setfacl-k dir 刪除默認ACL權限
setfacl-b file1清除所有ACL權限
getfaclfile1 | setfacl--set-file=-file2 復制file1的acl權限給file2

ACL中的權限定義

mask只影響除所有者和other的之外的人和組的最大權限
Mask需要與用戶的權限進行邏輯與運算后,才能變成有限的權限(Effective Permission)
用戶或組的設置必須存在于mask權限設定范圍內才會生效。setfacl-m mask::rxfile
--set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的設置,不能象-m一樣只是添加ACL就可以.如:
setfacl --set u::rw,u:wang:rw,g::r,o::-file1

備份和恢復ACL

主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 參數。但是tar等常見的備份工具是不會保留目錄和文件的ACL信息
#getfacl -R /tmp/dir1 > acl.txt
#setfacl -R -b /tmp/dir1
#setfacl -R --set-file=acl.txt /tmp/dir1
#getfacl -R /tmp/dir1

原創文章,作者:Aleen,如若轉載,請注明出處:http://www.www58058.com/29809

(0)
AleenAleen
上一篇 2016-08-08
下一篇 2016-08-08

相關推薦

  • 20161028第9天作業

    20161028第9天作業 1、編寫腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問” 2、編寫腳本/root/bin/checkdisk.sh,檢查磁盤分區空間和inode使用率率,如果超過80%,就發廣播…

    Linux干貨 2016-10-30
  • 20160802學習筆記

    useradd相關補充:      1.新建一個用戶創建時的一些默認權限在/etc/default/useradd配置中      2.新建用戶家目錄的過程實際就是將/etc/skel中的所有文件,拷貝到新建用戶的/home下,并更改為改用戶的用戶名   &n…

    Linux干貨 2016-08-03
  • Linux 中cp 、rm和mv與inode之間的關系

    1.cp和inode          當文件不存在時,分配一個新的inode號,創建新文件;          當文件存在時,則inode號采用被覆蓋之前的目標文件的inode號。 2.rm和ino…

    2017-07-21
  • shell腳本編程 4

    Shell腳本編程4 一、雜項知識整理 1、數組賦值方法: declare -a files files=(/var/log/*.log)通配所有文件也可 2、創建臨時文件: mktemp命令:創建的臨時文件可避免沖突 mktemp  NAME.XXXX(x至少要出現三個) -d 創建臨時目錄 –tmpdir=/DIR 指明臨時文件所存…

    Linux干貨 2016-08-24
  • 馬哥教育第一天記

    一天學習心得和記錄

    Linux干貨 2018-03-26
  • 第一周作業

    1、描述計算機的組成及其功能 答:計算機主要有5大組件構成: 1) 計算器:用戶數據計算,主要是指CPU 2) 控制器:用于控制數據流或者指令流,控制計算機系統的各個組件的協同工作以及信息的流動,如各種控制芯片(南橋,北橋等) 3) 存儲器:用戶數據的存放,如內存 4) 輸入設備:如鍵盤,鼠標等 5) 輸出設備:如顯示器,外置的存儲設備( 硬盤,光…

    Linux干貨 2016-10-30
欧美性久久久久