文件的權限


Linux權限

開啟兩個窗口  一個root用戶  一個普通用戶 
root用戶用於更改權限,普通用戶用於測試

對於文件rwx權限

創建環境

[root@nfsnobody ~]# mkdir -p /nfsnobody
[root@nfsnobody ~]# echo  'hostname'  >/nfsnobody/test.sh
[root@nfsnobody ~]# cat /nfsnobody/test.sh
hostname

r權限測試

root下修改權限  讓用戶只有r權限

[root@nfsnobody nfsnobody]# chmod u=r test.sh                   更改權限 u=r 只有r權限
[root@nfsnobody nfsnobody]# ll                                  檢查
total 24
-r--r--r--  1 nfsnobody nfsnobody   9 Aug  6 16:22 test.sh
nfsnobody用戶測試
[nfsnobody@nfsnobody nfsnobody]$ ll                                nfsnobody用戶下檢查
total 24
-r--r--r--  1 nfsnobody nfsnobody   9 Aug  6 16:22 test.sh
[nfsnobody@nfsnobody nfsnobody]$ cat test.sh                 可以讀取
hostname
[nfsnobody@nfsnobody nfsnobody]$ echo 'nfsnobody' >> test.sh    不能寫入
-bash: test.sh: Permission denied
[nfsnobody@nfsnobody nfsnobody]$ /nfsnobody/test.sh             不能執行
-bash: /nfsnobody/test.sh: Permission denied

w權限測試

root下修改權限  讓用戶只有w權限

[root@nfsnobody nfsnobody]# chmod u=w test.sh            超級用戶下修改權限
[root@nfsnobody nfsnobody]# ll
total 24
--w-r--r--  1 nfsnobody nfsnobody   9 Aug  6 16:22 test.sh     檢查 只有w權限
nfsnobody用戶下
[nfsnobody@nfsnobody nfsnobody]$ ll
total 24
--w-r--r--  1 nfsnobody nfsnobody   9 Aug  6 16:22 test.sh
[nfsnobody@nfsnobody nfsnobody]$ cat test.sh             無法讀取
cat: test.sh: Permission denied
[nfsnobody@nfsnobody nfsnobody]$ echo 'pwd' >> test.sh   可以寫入
[nfsnobody@nfsnobody nfsnobody]$ /nfsnobody/test.sh         無法執行
-bash: /nfsnobody/test.sh: Permission denied
只有w權限的時候 vim強制保存退出會導致源文件內容丟失

x權限測試

root下修改權限  讓用戶只有x權限

[root@nfsnobody nfsnobody]# chmod u=x test.sh          root下修改
[root@nfsnobody nfsnobody]# ll
total 24
---xr--r--  1 nfsnobody nfsnobody  13 Aug  6 16:34 test.sh   只有x權限
nfsnobody用戶下測試
[nfsnobody@nfsnobody nfsnobody]$ ll                       先檢查
total 24
---xr--r--  1 nfsnobody nfsnobody  13 Aug  6 16:34 test.sh
[nfsnobody@nfsnobody nfsnobody]$ cat test.sh              無法查看
cat: test.sh: Permission denied  
[nfsnobody@nfsnobody nfsnobody]$ echo 'pwd' >> test.sh    無法寫入
-bash: test.sh: Permission denied
[nfsnobody@nfsnobody nfsnobody]$ /nfsnobody/test.sh          
無法執行  因為想要執行一個文件/腳本 可以執行 必須要有讀取的權限 先知道內容才能執行
bash: /nfsnobody/test.sh: Permission denied

文件權限小結

r   查看/讀取 文件的內容
w  修改文件的內容 需要r權限的配合
x   執行文件的權限 需要r的權限配合
只有w權限的時候 強制保存退出會導致源文件內容丟失 

對於目錄rwx的權限

創建環境

[root@nfsnobody nfsnobody]# mkdir  -p /nfsnobody/test
[root@nfsnobody nfsnobody]# cd /nfsnobody/test
[root@nfsnobody test]# touch /nfsnobody/test/nfsnobody{01..5}.txt
[root@nfsnobody test]# tree
.
├── nfsnobody01.txt
├── nfsnobody02.txt
├── nfsnobody03.txt
├── nfsnobody04.txt
└── nfsnobody05.txt

0 directories, 5 files

r權限測試

root用戶下修改權限 修改目錄r權限

[root@nfsnobody nfsnobody]# chmod u=r test                修改權限
[root@nfsnobody nfsnobody]# chown nfsnobody.nfsnobody test      修改所屬用戶和組
[root@nfsnobody nfsnobody]# ll                            檢查
total 28
dr--r-xr-x  2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
nfsnobody用戶下測試
[nfsnobody@nfsnobody nfsnobody]$ ll                          先檢查
total 28
dr--r-xr-x  2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
[nfsnobody@nfsnobody nfsnobody]$ ls test                     可以看到文件名但是報錯
ls: cannot access test/nfsnobody02.txt: Permission denied
ls: cannot access test/nfsnobody05.txt: Permission denied
ls: cannot access test/nfsnobody04.txt: Permission denied
ls: cannot access test/nfsnobody03.txt: Permission denied
ls: cannot access test/nfsnobody01.txt: Permission denied
nfsnobody01.txt  nfsnobody02.txt  nfsnobody03.txt  nfsnobody04.txt  nfsnobody05.txt
[nfsnobody@nfsnobody nfsnobody]$ ls -l test                  只能看文件名 文件屬性不能看
ls: cannot access test/nfsnobody02.txt: Permission denied
ls: cannot access test/nfsnobody05.txt: Permission denied
ls: cannot access test/nfsnobody04.txt: Permission denied
ls: cannot access test/nfsnobody03.txt: Permission denied
ls: cannot access test/nfsnobody01.txt: Permission denied
total 0
-????????? ? ? ? ?            ? nfsnobody01.txt
-????????? ? ? ? ?            ? nfsnobody02.txt
-????????? ? ? ? ?            ? nfsnobody03.txt
-????????? ? ? ? ?            ? nfsnobody04.txt
-????????? ? ? ? ?            ? nfsnobody05.txt

r權限 加 x權限

接r權限  在r的基礎上加上x
root下再給目錄加上x權限

[root@nfsnobody nfsnobody]# chmod u+x test              在r的基礎上加上x權限
[root@nfsnobody nfsnobody]# ll                          檢查
total 28
dr-xr-xr-x  2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
nfsnobody用戶下測試
[nfsnobody@nfsnobody nfsnobody]$ ll                        nfsnobody用戶下檢查
total 28
dr-xr-xr-x  2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
[nfsnobody@nfsnobody nfsnobody]$ ls test                  查看test目錄的內容
nfsnobody01.txt  nfsnobody02.txt  nfsnobody03.txt  nfsnobody04.txt  nfsnobody05.txt
[nfsnobody@nfsnobody nfsnobody]$ ls -l test               可以查看 沒有報錯
total 0
-rw-r--r-- 1 root root 0 Aug  7 09:21 nfsnobody01.txt
-rw-r--r-- 1 root root 0 Aug  7 09:21 nfsnobody02.txt
-rw-r--r-- 1 root root 0 Aug  7 09:21 nfsnobody03.txt
-rw-r--r-- 1 root root 0 Aug  7 09:21 nfsnobody04.txt
-rw-r--r-- 1 root root 0 Aug  7 09:21 nfsnobody05.txt

w權限測試

root下給目錄加上w權限

[root@nfsnobody nfsnobody]# chmod u=w test            加上w權限 只有w權限測試
[root@nfsnobody nfsnobody]# ll -ld test               檢查 只有w權限
d-w-r-xr-x 2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
nfsnobody用戶下測試
[nfsnobody@nfsnobody nfsnobody]$ ll -ld test                nfsnobody用戶下檢查
d-w-r-xr-x 2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
[nfsnobody@nfsnobody nfsnobody]$ touch test/linux.txt       創建文件  
touch: cannot touch `test/linux.txt': Permission denied  報錯 無法創建
[nfsnobody@nfsnobody nfsnobody]$ ls test                    無法查看
ls: cannot open directory test: Permission denied 
[nfsnobody@nfsnobody nfsnobody]$ rm -f test/nfsnobody01.txt    無法刪除
rm: cannot remove `test/nfsnobody01.txt': Permission denied  

w權限 加 x權限

接w權限  在w的基礎上加上x
root下給目錄加上x權限

[root@nfsnobody nfsnobody]# chmod u+x test              給目錄在w權限基礎上加上x權限
[root@nfsnobody nfsnobody]# ll -ld test                 檢查
d-wxr-xr-x 2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
nfsnobody用戶下測試
[nfsnobody@nfsnobody nfsnobody]$ ll -ld test               nfsnobody用戶下檢查    
d-wxr-xr-x 2 nfsnobody nfsnobody 4096 Aug  7 09:57 test
[nfsnobody@nfsnobody nfsnobody]$ touch test/linux          創建新文件  成功
[nfsnobody@nfsnobody nfsnobody]$ ls test                   無法查看
ls: cannot open directory test: Permission denied
[nfsnobody@nfsnobody nfsnobody]$ rm -f test/linux          可以刪除
刪除一個文件 需要看 文件所在目錄的權限 是否有wx  跟文件本身的權限沒有關系

目錄權限小結

目錄權限小結:
1. r 顯示目錄內容          需要x權限配合 
2. w 是否能刪除目錄內容    在目錄中創建文件   修改(重命名)
3. x 是否能進入到目錄 cd  (你是否能查看目錄中文件的屬性)
4.   刪除一個文件          看文件所在目錄的權限 是否有wx權限  
目錄的rwx權限 
r   查看目錄內容    ls 
w   可以刪除 創建 重命名  目錄中的文件 
x   是否能進入到目錄 cd

文件訪問過程與權限

相對路徑訪問

先通過文件名找到inode號碼
再讀取inode中存放的block位置信息
最后顯示block內容,就是顯示文件的內容。

絕對路徑訪問

如訪問/etc下的文件:
先訪問/目錄
讀取目錄的block,找對應的文件
/etc目錄的inode
讀取文件的權限
找到block的位置
讀取文件的內容

關系

文件的名字是存放在所在目錄的block里面
文件名與inode的對應關系放在目錄的block中

控制系統默認權限-umask

系統的默認權限

file---666 -rw-rw-rw     文件
dir ---777 drwxrwxrwx    目錄
創建一個文件或目錄 默認權限

[root@nfsnobody nfsnobody]# touch 2.txt    創建文件
[root@nfsnobody nfsnobody]# ll 2.txt       默認權限644
-rw-r--r-- 1 root root 0 Aug  7 10:55 2.txt
[root@nfsnobody nfsnobody]# mkdir  1       創建目錄
[root@nfsnobody nfsnobody]# ls -dl 1       目錄權限默認755
drwxr-xr-x 2 root root 4096 Aug  7 10:55 1

umask 反掩碼計算

默認的最大權限減去 umask

umask為偶數

實例 當umask為0022
文件:
file-  666-022=644
目錄:
dir-  777-022=755

umask為奇數

實例 當umask為0032
當umask為奇數時,計算文件的默認權限的時候,要在奇數位加1
目錄不變
file- 666-032=634
      +010   =644  最終是為644

umask=035

[root@nfsnobody ~]# umask 035
[root@nfsnobody ~]# touch file035
[root@nfsnobody ~]# mkdir dir035
[root@nfsnobody ~]# ll file035 && ll -d dir035              使用ls 命令查看
-rw-r---w- 1 root root 0 Sep  6 10:42 file035
drwxr---w- 2 root root 4096 Sep  6 10:42 dir035

file=642  dir=742

修改umask的方法

[root@nfsnobody ~]# vim /etc/profile
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi
解釋:
如果 [ 用戶UID>=199 ] 並且  [ 用戶的名字 == 用戶組名字 ];然后
    umask 002
那么
    umask 022

網站權限-讓網站更安全

控制權限

讓網站以www身份運行
讓主要的文件歸root用戶所有
對於用戶上傳的文件處理
讓用戶上傳的文件放在屬於www用戶的文件夾中;
限制文件的后綴;
上傳之后不能查看……
網站 blog.nfsnobody.com  
/app/blog  
 1.網站通過www用戶運行(虛擬用戶)
 2.控制目錄/app/blog 權限
  file  644   root root  
  dir   755   root root  
 3.網站上傳目錄upload 
  file  644   www  www 
  dir   755   www  www

模擬網站環境試驗

模擬環境

mkdir -p /app/blog  /app/blog/upload   
touch    /app/blog/tao.avi /app/blog/dao.mp4  /app/blog/ndd.torrent 
useradd  www

在www用戶下測試
[www@nfsnobody blog]$ whoami                    檢查當前用戶
www
[www@nfsnobody blog]$ ll                        查看 可以查看
total 4
-rw-r--r-- 1 root root    0 Aug  7 11:38 dao.mp4
-rw-r--r-- 1 root root    0 Aug  7 11:38 ndd.torrent
-rw-r--r-- 1 root root    0 Aug  7 11:38 tao.avi
drwxr-xr-x 2 root root 4096 Aug  7 11:38 upload 
試驗  上傳文件到upload目錄
[www@nfsnobody blog]$ touch /app/blog/movie.avi           無法寫入  報錯
touch: cannot touch `/app/blog/movie.avi': Permission denied
[www@nfsnobody blog]$ chown www.www /app/blog/upload/     解決方法  給www權限

隱藏權限

隱藏權限的作用

lsattr 查看隱藏權限
chattr 授予文件或目錄隱藏的權限  如 +a -a
a (append只能追加)如果設置了這個權限 只能追加 不能刪除 不能修改
i (immutable無敵) 無法刪除 無法修改

重要的文件或命令加上隱藏權限

主要命令+i

重要的配置文件+a

/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow

測試a權限

只能向文件中追加內容,不能刪除
a (append只能追加)如果設置了這個權限 只能追加 不能刪除 不能修改

[root@nfsnobody /nfsnobody]# chattr +a test.sh          給文件加上a權限
[root@nfsnobody /nfsnobody]# lsattr  test.sh            檢查
-----a-------e- test.sh 
[root@nfsnobody /nfsnobody]# #a  append                 只能追加 
[root@nfsnobody /nfsnobody]# >test.sh                   無法清空
-bash: test.sh: Operation not permitted
[root@nfsnobody /nfsnobody]# echo pwd >>test.sh         可以追加
[root@nfsnobody /nfsnobody]# \rm -f test.sh             無法刪除
rm: cannot remove `test.sh': Operation not permitted

測試i權限

i (immutable無敵) 無法刪除 無法修改
不能對文件進行任何操作,root用戶也不能操作。

[root@nfsnobody ~]# chattr +i nfsnobody.txt
[root@nfsnobody ~]# lsattr nfsnobody.txt
----i--------e- nfsnobody.txt


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM