Linux 的權限管理
開一個 Nginx web server

看一下 config

換成自己的資料夾


2. SELinux (Security-Enhanced Linux)
↖在 Linux 原來的檔案權限機制外
加一層權限控管的規則
1. Linux 檔案目錄權限
Linux 的檔案目錄權限
每個檔案跟目錄都有設定權限

Linux 的檔案目錄權限

- rw- rw- r-- 1 luyunghsien luyunghsien ...
是檔案還是目錄
目錄: d
檔案: -
擁有者
的權限
群組
的權限
其他使用者
的權限
擁有者
群組
Linux 的檔案目錄權限

r, w, x 分別代表讀、寫、執行的權限
目錄的 r 表示可以讀取目錄下的內容 (第一層)
w表示可以修改目錄下的內容 (第一層)
x 表示可以進去這個目錄 (cd)
(不能進去的話其實也就不能修改內容了)
Linux 的檔案目錄權限
擁有者可以修改權限
r w x 分別對應 4 2 1
可以用相加起來的數字表示權限
例如
rwx -> 4 + 2 + 1 = 7
r-x -> 4 + 0 + 1 = 5
r-- -> 4 + 0 + 0 = 4
Linux 的檔案目錄權限

6
6
4
chmod 777 test.txt

Linux 的檔案目錄權限
chmod 000 test.txt


sudo
基本的權限控管:看使用者有沒有某個檔案的 (讀、寫、執行) 權限
運行的程式會繼承使用者的權限:cat test.txt
有的時候會需要使用者能夠用程式擁有者的權限,
用比較高的權限來做一些工作
例如 passwd 就是這樣做的
sudo


s???
sudo

s???
這個 s 表示使用者執行的時候
會使用程式執行檔擁有者的權限
要為執行檔設定這個,就在 chmod 的 3 碼前面加 '4'
chmod 4711 test.sh
chmod 711 test.sh
sudo

SELinux
在 Linux 原來的檔案權限機制之前
加一層權限控管的規則
(要先過 SELinux 這關才會繼續原本的檔案權限確認)
SELinux
Linux 幾個大家族中最知名的兩個
Debian
Ubuntu
Red Hat
RHEL
CentOS
fedora
預設沒裝相關工具
預設開啟
SELinux
原本 Linux 權限管理方式的缺點:
1. 檔案擁有者不一定會把權限設好
2. 使用程式的人可能會有過大的權限,如果程式有 bug 就
例如:
有些程式需要 root 權限才能順利執行的話,使用的人就有 root 的權限
如果不是 root 權限,可能也是擁有者的權限,有機會存取擁有者的其他檔案
SELinux
為每個程式跟資源標記類型
根據規則決定某個類型的程式有沒有存取某個類型資源的權限


SELinux

加一個參數 Z 來看 nginx 程式的 "context"
user
role
type
level
SELinux


SELinux 根據資料夾位置跟名稱給預設的 context
移動檔案不會改變 context
SELinux


getsebool -a | grep httpd
查規則可以用 getsebool
所以 Nginx 的問題
首先是 nginx 這個使用者沒辦法讀取我設的資料夾 /home/luyunghsien/www


解決辦法:
1. 把 user 改成 root
2. chmod 701 /home/luyunghsien
或
所以 Nginx 的問題
再來是根據 SELinux 規則 Nginx 沒有權限
1. 把 SELinux 暫時關閉
2. 讓 httpd 可以用家目錄 setsebool -P httpd_enable_homedirs on
3. 把檔案的 context 改為 httpd_sys_content_t
setsebool -P httpd_enable_homedirs on
setenforce 0
chcon -Rt httpd_sys_content_t /home/luyunghsien/www
解決辦法:
或
或

如果要把 nginx 用作 Reverse proxy
server
Nginx
reverse proxy
serverA
127.0.0.1:8000
serverB
127.0.0.1:8001
serverC
127.0.0.1:8002
request
需要開啟 httpd_can_network_connect 這個規則
setsebool -P httpd_can_network_connect on
參考資料
Stack Overflow
CentOS 官網
鳥哥的 Linux 私房菜
permissions in Linux
By luyunghsien
permissions in Linux
- 445