linux-文件權限以及用戶權限

rwx

root用戶除外 root用戶不受任何限制node

文件:linux

r(read,讀取):對文件而言,具備讀取文件內容的權限;mongodb

w(write,寫入):對文件而言,具備新增、修改文件內容的權限;shell

x(execute,執行):對文件而言,具備執行文件的權限;數據庫

[skyuser1@VM_158_86_centos test]$ll
total 0
-r-xr-xr-x 1 skyuser1 skyuser1 0 May 23 17:25 a.txt
#沒有w寫入權限
[skyuser1@VM_158_86_centos test]$echo "aaa" > a.txt
-bash: a.txt: Permission denied

#沒有r讀取權限
[skyuser1@VM_158_86_centos test]$chmod 333 a.txt
[skyuser1@VM_158_86_centos test]$ll a.txt 
--wx-wx-wx 1 skyuser1 skyuser1 0 May 23 17:27 a.txt
[skyuser1@VM_158_86_centos test]$cat a.txt 
cat: a.txt: Permission denied

目錄:apache

r(Read,讀取):具備瀏覽目錄的權限。編程

w(Write,寫入):具備刪除、移動、修改目錄內文件的權限。vim

x(eXecute,執行):該用戶具備進入目錄的權限。centos

exec:安全

#根目錄的目錄權限
[skyuser1@VM_158_86_centos /]$ ll -d
dr-xr-xr-x. 20 root root 4096 May 23 11:39 .
#沒有寫入權限,因此對於普通用戶而言不能建立任何文件
[skyuser1@VM_158_86_centos /]$ touch a.txt
touch: cannot touch ‘a.txt’: Permission denied
#不能刪除文件
[skyuser1@VM_158_86_centos /]$ ll /a.txt 
-rw-r--r-- 1 root root 24 Mar 12 17:34 /a.txt
[skyuser1@VM_158_86_centos /]$ rm -rf a.txt
rm: cannot remove ‘a.txt’: Permission denied
#不能移動文件
[skyuser1@VM_158_86_centos /]$ mv /a.txt  /home
mv: cannot move ‘/a.txt’ to ‘/home/a.txt’: Permission denied

root用戶 無所不能

[root@VM_158_86_centos /]# touch b.txt
[root@VM_158_86_centos /]# ls /b.txt 
/b.txt

文件的x執行權限

能夠經過sh或bash執行.sh文件

可是不能經過./bill.sh執行文件

[skyuser1@VM_158_86_centos test]$ll bill.sh 
-rw-rw-r-- 1 skyuser1 skyuser1 23 May 23 17:30 bill.sh
[skyuser1@VM_158_86_centos test]$sh bill.sh
123
[skyuser1@VM_158_86_centos test]$./bill.sh
-bash: ./bill.sh: Permission denied

感受這個機制仍是有問題的,只要執行bash xxx.sh文件在根目錄下的root .sh文件就能夠執行了
那拿x權限來幹啥呢?

[wuyuhong@VM_158_86_centos temp_bird]$ su - root
Password: 
Last login: Thu May 23 17:54:36 CST 2019 on pts/0
Last failed login: Thu May 23 17:59:49 CST 2019 on pts/0
There was 1 failed login attempt since the last successful login.
welcome to my world.please smile

[root@VM_158_86_centos ~]# cd /
[root@VM_158_86_centos /]# vim test.sh
[root@VM_158_86_centos /]# bash test.sh 
我是root建立的可執行文件
[root@VM_158_86_centos /]# su - skyuser1
Last login: Thu May 23 17:52:27 CST 2019 on pts/0
welcome to my world.please smile

[skyuser1@VM_158_86_centos /]$bash test.sh 
我是root建立的可執行文件
[skyuser1@VM_158_86_centos /]$ll test.sh 
-rw-r--r-- 1 root root 54 May 23 18:00 test.sh

umask

創建一個新的文件或目錄時,該文件的默認權限會根據umask來設定

umask就是指定 目前用戶在創建文件或目錄時候的權限默認值

[root@VM_158_86_centos vbird]# umask 
0022
[root@VM_158_86_centos vbird]# umask -S
u=rwx,g=rx,o=rx

通常文件的創建不該該有執行權限,通常文件一般用於數據的記錄,因此不須要x權限

-rw-rw-rw-

目錄的x權限決定用戶是否能進入該目錄,因此通常須要x權限

drwxrwxrwx

umask的分數指的是該默認值須要減掉的權限

因此上面減下來:

-rw-r--r--
drwxr-xr-x

出於安全考慮root的默認umask 022,普通用戶的默認umask 002,保留同羣組的寫入權利

文件隱藏屬性

操做:

+ :增長一個特殊參數
- :移除一個特殊參數
= :設定一個特殊參數

option:

a:這個文件只能新增數據,不能刪除,修改數據,只有root能設定
i:不能刪除,更名,設定連結,沒法新增編輯數據,只有root能設定

command:

lsattr [-adR] file Or Directory
-a:隱藏文件的屬性顯示出來
-d: 目錄自己的隱藏屬性
-R:連同子目錄也一併列出來

chattr:

chattr +aiS testFile

文件特殊權限

rwt
rws

[root@VM_158_86_centos ~]# ll -d /tmp
drwxrwxrwt. 7 root root 4096 5月  27 03:31 /tmp
[root@VM_158_86_centos ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

Set UID(SUID)

/etc/shadow:保存着帳戶信息

[root@VM_158_86_centos ~]# ll /etc/shadow
---------- 1 root root 1133 May 23 17:55 /etc/shadow

/etc/shadow這個文件只有root能夠讀寫

但普通用戶能經過/usr/bin/passwd命令執行寫入或更改密碼的操做,也就是能夠經過passwd向文件/etc/shadow寫入修改數據的緣由就是SUID

-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd
[wuyuhong@VM_158_86_centos ~]$ passwd
Changing password for user wuyuhong.
Changing password for wuyuhong.
(current) UNIX password: 
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

SUID生效過程

wuyuhong對於/usr/bin/passwd具備x權限,表示wuyuhong能執行passwd

passwd的擁有者是root;

wuyuhong執行passwd的過程,會<暫時>得到root的權限;

/etc/shadow就能夠被wuyuhong所執行的passwd所修改;prefect

然而

[wuyuhong@VM_158_86_centos ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[wuyuhong@VM_158_86_centos ~]$ ll /usr/bin/cat
-rwxr-xr-x 1 root root 54160 Oct 31  2018 /usr/bin/cat

cat指令沒有SUID屬性,so 不能cat /etc/shadow

SUID只對二進制可執行文件有效

SET GID(SGID)

locate指令具備SGID屬性

[root@VM_158_86_centos ~]# ll /usr/bin/locate 
-rwx--s--x 1 root slocate 40520 Apr 11  2018 /usr/bin/locate

locate的本質是去查詢/var/lib/mlocate/mlocate.db數據庫,從而獲取結果

updatedb手動更新數據庫,更新新增的文件、配置等

[root@VM_158_86_centos ~]# ll /var/lib/mlocate/mlocate.db 
-rw-r----- 1 root slocate 3107582 May 27 16:13 /var/lib/mlocate/mlocate.db

這裏能夠看出只有root能讀寫mlocate.db,slocate羣組能讀取mlocate.db

見證奇蹟

[root@VM_158_86_centos ~]# ll /usr/bin/locate 
-rwx--s--x 1 root slocate 40520 Apr 11  2018 /usr/bin/locate
[root@VM_158_86_centos ~]# ll /var/lib/mlocate/mlocate.db 
-rw-r----- 1 root slocate 3107582 May 27 16:13 /var/lib/mlocate/mlocate.db
[root@VM_158_86_centos ~]# su - wuyuhong
Last login: Mon May 27 16:13:58 CST 2019 on pts/0
welcome to my world.please smile

[wuyuhong@VM_158_86_centos ~]$ locate /usr/bin/passwd
/usr/bin/passwd
[root@VM_158_86_centos ~]# ll /usr/bin/locate 
-rwx--s--x 1 root slocate 40520 Apr 11  2018 /usr/bin/locate
和SUID很類似,locate的other用戶執行權限是x,具備執行權限
locate羣組擁有者是slocate
執行locate的過程,會<暫時>得到slocate的權限;
so.slocate能夠讀取mlocate;prefect
SGID對二進制程序有用;
程序執行者對於該程序來講,需具有x的權限;
執行者在執行的過程當中會得到該程序羣組的支持

SGID不只對二進制可執行文件有效,對目錄依然有效

用戶若對於此目錄具備r與x權限,該用戶可以進入此目錄;
用戶在此目錄下的有效羣組(effective group)將變成該目錄的羣組;
用途:若用戶在此目錄下具備w權限,則使用者所創建的新文件,該新文件的羣組與此目錄的羣組相同

模擬測試:

[root@VM_158_86_centos ~]# groupadd project
[root@VM_158_86_centos ~]# useradd -G project pro_user1
[root@VM_158_86_centos ~]# useradd -G project pro_user2
[root@VM_158_86_centos ~]# id pro_user1
uid=1006(pro_user1) gid=1011(pro_user1) groups=1011(pro_user1),1010(project)
[root@VM_158_86_centos ~]# id pro_user2
uid=1007(pro_user2) gid=1012(pro_user2) groups=1012(pro_user2),1010(project)
[root@VM_158_86_centos ~]# mkdir /srv/prohome
[root@VM_158_86_centos ~]# ll -d /srv/prohome/
drwxr-xr-x 2 root root 4096 May 27 16:51 /srv/prohome/
[root@VM_158_86_centos ~]# chgrp project /srv/prohome/
[root@VM_158_86_centos ~]# chmod 770 /srv/prohome/
[root@VM_158_86_centos ~]# ll -d /srv/prohome/
drwxrwx--- 2 root project 4096 May 27 16:51 /srv/prohome/

[root@VM_158_86_centos ~]# su - pro_user1
welcome to my world.please smile

[pro_user1@VM_158_86_centos ~]$ cd /srv/prohome/
[pro_user1@VM_158_86_centos prohome]$ touch abc.txt
[pro_user1@VM_158_86_centos prohome]$ exit
logout

[root@VM_158_86_centos ~]# su - pro_user2
welcome to my world.please smile

[pro_user2@VM_158_86_centos ~]$ cd /srv/prohome/
[pro_user2@VM_158_86_centos prohome]$ echo "hello" > abc.txt
-bash: abc.txt: Permission denied
[pro_user2@VM_158_86_centos prohome]$ ll abc.txt 
-rw-rw-r-- 1 pro_user1 pro_user1 0 May 27 17:14 abc.txt

abc.txt文件屬於pro_user1的用戶,同時也屬於pro_user1

所以 pro_user2沒有寫入權限 只有r只讀權限

這時就須要賦予/srv/prohome/的SGID權限 讓pro_user1和pro_user2建立的文件爲project羣組文件

[pro_user1@VM_158_86_centos ~]$ cd /srv/prohome/
[pro_user1@VM_158_86_centos prohome]$ touch hello
[pro_user1@VM_158_86_centos prohome]$ ll hello 
-rw-rw-r-- 1 pro_user1 project 0 May 27 22:37 hello


su: Authentication failure
[pro_user1@VM_158_86_centos prohome]$ su - root
Password: 
Last login: Mon May 27 22:28:36 CST 2019 from 183.220.26.92 on pts/0
welcome to my world.please smile


[root@VM_158_86_centos ~]# su - pro_user2
Last login: Mon May 27 17:14:36 CST 2019 on pts/0
Last failed login: Mon May 27 22:38:49 CST 2019 on pts/0
There was 1 failed login attempt since the last successful login.
welcome to my world.please smile

[pro_user2@VM_158_86_centos ~]$ cd /srv/prohome/
[pro_user2@VM_158_86_centos prohome]$ echo "123" > hello
[pro_user2@VM_158_86_centos prohome]$ cat hello
123

添加SGID後建立的文件就爲同組的主組project 同組的成員就能夠訪問和修改文件了

Sticky Bit

只對目錄有效

當用戶對於此目錄具備w,x權限,即具備寫入權限時;
當用戶在該目錄下創建文件或目錄時,僅有本身和root纔有權利操做該文件

意思就是隻有本身能操做該目錄下本身建立的文件,不能操做其餘人建立的文件,其餘人(同組,或other具備權限)有執行權限,也不能操做個人文件,我有其餘人(同組,或other具備權限)的執行權限,也不能操做其餘人的文件

設定SUID SGID SBIT

4爲SUID
2爲GID
1爲SBIT

chmod 4755 XXX;
chmod 7755 XXX;
chmod u=rwxs,go=x XXX;
chmod u+s g+s o+t XXX

chmod 7666 test;ls -l test;
-rwSrwSrwT 
666表示沒有執行權限 因此這裏設置7,因此爲SST,SST表示無效狀態

ACL (access control list)靈活的賦予特殊權限

爲何須要ACL?

傳統的Linux權限只能針對一個用戶(建立者),一個羣組以及非此羣組的其餘人設定權限

假如我須要對該文件設定3個不一樣用戶,兩個不一樣羣組的不一樣權限此時應該怎麼辦?
傳統的權限控制是沒法作到的,只有用ACL這個更細緻的權限控制能夠解決,
而傳統的權限控制控制了一個大的範圍,ACL再細分小的範圍,真是太完美啦

那 ACL 主要能夠針對哪些方面來控制權限呢?他主要能夠針對幾個項目:

使用者 (user):能夠針對使用者來配置權限;
羣組 (group):針對羣組爲對象來配置其權限;
默認屬性 (mask):還能夠針對在該目錄下在建立新文件/目錄時,規範新數據的默認權限;
getfacl
setfacl

shell,/sbin/nologin

系統帳號的shell就是使用/sbin/nologin,
重點在於系統帳號是不須要登陸的,因此就給他這個沒法登陸的合法shell,
這個帳號雖然沒法登陸,可是可使用其餘的系統資源、
ex:
WWW這個服務由apache這個帳號在管理
mongodb這個數據庫服務由mongodb帳號在管理

使用者身份切換 su

su與su -

爲了安全起見,儘可能以通常身份使用者來操做linux的平常做業,
等到須要設定系統環境時,才變成爲root來進行系統管理
#使用su切換身份時,讀取的變量設定方式爲non-login shell,這種方式不少本來的變量不會改變


[wuyuhong@VM_158_86_centos ~]$ su root
Password: 
welcome to my world.please smile

[root@VM_158_86_centos wuyuhong]# env | grep "wuyuhong"
USER=wuyuhong
PATH=/root/.nvm/versions/node/v10.7.0/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/wuyuhong/.local/bin:/home/wuyuhong/bin
MAIL=/var/spool/mail/wuyuhong
PWD=/home/wuyuhong
LOGNAME=wuyuhong

#從普通用戶使用su切換至root,當前shell的部分環境變量不會被改變

#然而使用su - 則是使用login-shell的方式切換用戶,此時環境變量將徹底改變

[wuyuhong@VM_158_86_centos ~]$ su - root
Password: 
Last login: Sun Jun 16 19:10:04 CST 2019 on pts/0
welcome to my world.please smile

[root@VM_158_86_centos ~]# env | grep 'root'
NVM_DIR=/root/.nvm
USER=root
MAIL=/var/spool/mail/root
PATH=/root/.nvm/versions/node/v10.7.0/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
HOME=/root
LOGNAME=root
NVM_BIN=/root/.nvm/versions/node/v10.7.0/bin

這種方式雖然很方式方便,可是須要知道root密碼才行,因此不太安全

sudo

一開始系統默認僅有root能夠執行sudo

sudo能夠切換身份來進行某項任務

ex:當咱們須要使用apache的帳號來執行WWW某項服務時,可是 apache是/sbin/nologin的,沒法使用su -進行切換,這時就要使用sudo來執行了。

sudo的執行流程:

1.當用戶執行sudo時,系統會搜索/etc/sudoers文件中該使用者是否有執行sudo的權限
2.若是有權限,輸入密碼確認
3.密碼成功,便開始sudo的後續接的命令

visudo和/etc/sudoers

編輯/etc/sudoers來管理sudo的使用者和使用範圍

PAM模塊

PAM是一套應用程序編程接口,他提供了一連串的驗證機制,
只要使用者將驗證階段的需求告知PAM後,PAM就能回報使用者驗證結果

clipboard.png

PAM重點在於/etc/pam.d/裏面的配置文件

相關文章
相關標籤/搜索