將專案部署在 GCE 遇到 Webserver(Apache) 存取檔案失敗之問題。
Forbidden
You don't have permission to access this resource.
Apache/2.4.29 (Ubuntu) Server at 35.239.64.229 Port 80
- 在 /etc/apache2/sites-enabled/000-default.conf 的 Directory tag 內加
Require all granted
- 目錄開放執行的權限
ErrorException
error_log(../PayPal.log): failed to open stream: Permission denied
http://35.239.64.229/payment/101/website/paypal
web server 不是檔案擁有者或沒有在檔案擁有群組裡面,造成沒有足夠權限拜訪
==於是來研究一下目錄和檔案給擁有者及群組的權限配置==
檔案類型 有七種:
d = directory
- = regular file
l = symbolic link
s = Unix domain socket
p = named pipe
c = character device file(mouse, tty, tape streamer, virtual consoles,
printer, modem)
b = block device file(HD, floppies, CD-ROMs)
位置權限:
r = read
w = write
x = exec (決定是否可以進入該目錄)
chmod 4711 test;
第一個數字先不看,用711解讀
-rws--x--x
7的二進位是111,所以rws都是true,1的二進位是001,所以--x
s 是?(下一節解釋)
chmod u=rwxs,go=x test;
(與上一指令是相等的)
u 代表 user
g 代表 group
o 代表 others
Q:什麼時候的動作被歸類為"執行"?
A:建立檔案或目錄, 進入目錄
ex: sarahcheng 是 projrct 群組的成員之一,如果有執行(x)權限,s會是小寫,可進入目錄。
雖然可以進 vim, 但進去之後無法存檔
那 t 是...?
chmod 1751 test;
-rwxr-x--t
QA
若沒有設定 SBIT 任何 Others 都可以刪除?
為什麼 addfolder 資料夾的 other 權限是 r_x 不是 r_T
預設如此
為什麼 test22 有設定 SBIT 了, 不是擁有者的 sarahcheng 可以刪除 test22 ?
因為他是當前目錄的擁有者,具有全權
為什麼 一直都還是有 SGID?
用 chmod g-s 可以刪SGID
使用者 nono 沒有在 projrct 群組裡, 屬於 others, 當前目錄(.)的 others 沒有寫(w)的權利,所以沒辦法刪除 jenny 建立的目錄(ll)
若當前目錄(.)的 others 有寫的權利,即可刪除
將 nono 加入群組 projrct 後, 也可刪除
當前目錄若設定 SBIT,即使是群組裡的使用者,也無法刪。(saracheng, sasa, jenny 皆在群組裡,ray 代表 others, 不在群組裡)
ray(others) 沒辦法刪, jenny(group) 也沒辦法刪
只有上層才有全權 上上層沒有
group 的 user 能不能刪除目錄是看當前目錄的群組權限, 和該目錄無關
當前目錄 rwx 第一層 r-x 檔案 rwx 這樣檔案還可寫嗎?
用二進位表示特殊權限
將數字加在權限數組的最前面,如:4750。
重修權限
在數組前加0, 再設定
chmod 4711 test;
的 4 代表 SUID
-rws--x--x
chmod 4611 test;
的 4 代表 SUID,但是因為 User 的權限是 6(只能讀、寫,不能執行),所以 S 大寫
-rwS--x--x
chmod 2611 test;
的 2 代表 SGID
-rw---s--x
chmod 6711 test;
的 6 代表 有 SUID 也有 SGID
-rws--s--x
chmod 7666 test;
的 7 代表 有 SUID, SGID, 也有SBIT
-rwSrwSrwT
sudo chown -R sarahcheng.www-data shopping_cart/
sudo chmod -R 755 shopping_cart/
drwx r-x r-x
詳細設定請參考[Day26]平台部署 GCP
www-data 是一個 system user。給 web servers 使用的特定 user/group。 設定某資料夾為 www-data 是希望 web servers 不要有太高的權限,同時讓 web application 適當進行寫入。
下指令 cut -d: -f1 /etc/passwd
可以看到目前的 system users:
root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
proxy
www-data
backup
list
irc
gnats
nobody
systemd-timesync
systemd-network
systemd-resolve
syslog
_apt
lxd
messagebus
uuidd
dnsmasq
sshd
pollinate
ntp
ubuntu
sarahcheng
mysql
若是下指令 getent passwd
or cat /etc/passwd
可以看到以下七欄資訊:
root:x:0:0:root:/root:/bin/bash
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
sarahcheng:x:1001:1002::/home/sarahcheng:/bin/bash
mysql:x:103:117:MySQL Server,,,:/nonexistent:`sudo npm run dev`
/bin/false
.
.
.
看系統群組資訊: cat /etc/group
冒號後面即為有在群組裡的使用者
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,ubuntu,sarahcheng,sarahcheng1231
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:ubuntu,sarahcheng,sarahcheng1231
fax:x:21:
voice:x:22:
cdrom:x:24:ubuntu,sarahcheng,sarahcheng1231
floppy:x:25:ubuntu,sarahcheng,sarahcheng1231
tape:x:26:
sudo:x:27:ubuntu
audio:x:29:ubuntu,sarahcheng,sarahcheng1231
dip:x:30:ubuntu,sarahcheng,sarahcheng1231
www-data:x:33:sarahcheng
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:ubuntu,sarahcheng,sarahcheng1231
sasl:x:45:
plugdev:x:46:ubuntu,sarahcheng,sarahcheng1231
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
systemd-journal:x:101:
systemd-timesync:x:102:
systemd-network:x:103:
systemd-resolve:x:104:
input:x:106:
crontab:x:107:
syslog:x:108:
netdev:x:109:ubuntu,sarahcheng,sarahcheng1231
lxd:x:110:ubuntu,sarahcheng,sarahcheng1231
messagebus:x:111:
uuidd:x:112:
ssh:x:113:
mlocate:x:114:
admin:x:115:
ntp:x:116:
ubuntu:x:1000:sarahcheng,sarahcheng1231
google-sudoers:x:1001:sarahcheng,sarahcheng1231
sarahcheng:x:1002:
ssl-cert:x:105:
mysql:x:117:
taiwan:x:1003:sarahcheng,www-data
sarahcheng1231:x:1004:
groups
列出當前使用者所在的群組
sarahcheng adm dialout cdrom floppy audio dip www-data video plugdev netdev lxd ubuntu google-sudoers taiwan
將使用者加進群組 sudo gpasswd -a sarahcheng taiwan
將使用者移出群組 sudo gpasswd -d user group
groups
列出的第一個群組為有效群組 effective group,使用者建立的檔案會直接被有效群組擁有。
newgrp www-data
,結果使用者 sarahcheng 的 groups
列出來:www-data adm dialout cdrom (第一個變成 www-data)
設定使用者的優先群組 primary group 指令:usermod -g 群組名稱 使用者名稱
, 如下
優先群組不等於有效群組
sudo usermod -a -G secondarygroupname username
-g (primary group assigned to the users)
-G (Other groups the user belongs to)
-a (Add the user to the supplementary group(s))