第 5 堂課:權限應用、程序之觀察與基本管理

http://linux.vbird.org/linux_basic_train/unit05.php

5.1:權限在目錄與檔案應用上的意義

5.1.2:使用者操作功能

根據上述的權限意義,假如用戶想在 /dir1/file1 與 /dir2 之間進行如下的動作時,用戶應該具有哪些『最小權限』才能運作?

操作動作 /dir1 /dir1/file1 /dir2 重點
讀取 file1 內容 x r 要能夠進入 /dir1 才能讀到裡面的文件資料!
修改 file1 內容 x w 能夠進入 /dir1 且修改 file1 才行!
執行 file1 內容 x x 能夠進入 /dir1 且 file1 能運作才行!
刪除 file1 檔案 w跟x 能夠進入 /dir1 具有目錄修改的權限即可!
將 file1 複製到 /dir2 w r跟w w 要能夠讀 file1 且能夠修改 /dir2 內的資料
將 file1 移動到 /dir2 w w 兩個目錄均需要被更改

請使用 root 的身份建立底下的檔案與權限:

drwxrwxr-x root root /dev/shm/unit05/

[root@mail ~]# cd /dev/shm
[root@mail shm]# mkdir -m 775 unit05
[root@mail shm]# ll -d unit05
drwxrwxr-x. 2 root root 40 May  1 00:15 unit05

drwxr-xr-- root root /dev/shm/unit05/dir1/

[root@mail shm]# cd /dev/shm/unit05/
[root@mail unit05]# mkdir -m 766 dir1
[root@mail unit05]# ll -d dir1
drwxrw-rw-. 2 root root 40 May  1 00:16 dir1

-rw-r--r-- root root /dev/shm/unit05/dir1/file1 (複製來自 /etc/hosts)

[root@mail unit05]# cd /dev/shm/unit05/dir1/
[root@mail dir1]# cp /etc/hosts file1
[root@mail dir1]# chmod 644 file1
[root@mail dir1]# ll file1
-rw-r--r--. 1 root root 191 May  1 00:17 file1

drwxr-x--x root root /dev/shm/unit05/dir2/

[root@mail dir1]# cd /dev/shm/unit05/
[root@mail unit05]# mkdir -m 751 dir2
[root@mail unit05]# ll -d dir2
drwxr-x--x. 2 root root 40 May  1 00:19 dir2

-rw-r--r-- root root /dev/shm/unit05/dir2/file2 (複製來自 /etc/hosts)

[root@mail unit05]# cd /dev/shm/unit05/dir2/
[root@mail dir2]# cp /etc/hosts file2
[root@mail dir2]# chmod 644 file2
[root@mail dir2]# ll file2
-rw-r--r--. 1 root root 191 May  1 00:30 file2

drwxr-xr-x root root /dev/shm/unit05/dir3/

[root@mail unit05]# mkdir -m 755 dir3
[root@mail unit05]# ll -d dir3
drwxr-xr-x. 2 root root 40 May  1 00:42 dir3

-rw-rw-rw- root root /dev/shm/unit05/dir3/file3 (複製來自 /etc/hosts)

[root@mail unit05]# cd /dev/shm/unit05/dir3
[root@mail dir3]# cp /etc/hosts file3
[root@mail dir3]# chmod 666 file3
[root@mail dir3]# ll file3
-rw-rw-rw-. 1 root root 191 May  1 00:42 file3

drwxrwxrwx root root /dev/shm/unit05/dir4/

[root@mail dir3]# cd /dev/shm/unit05/
[root@mail unit05]# mkdir -m 777 dir4
[root@mail unit05]# ll -d dir4
drwxrwxrwx. 2 root root 40 May  1 00:43 dir4

-rw------- root root /dev/shm/unit05/dir4/file4 (複製來自 /etc/hosts)

[root@mail unit05]# cd /dev/shm/unit05/dir4
[root@mail dir4]# cp /etc/hosts file4
[root@mail dir4]# chmod 600 file4
[root@mail dir4]# ll file4
-rw-------. 1 root root 191 May  1 00:44 file4

底下請使用 student 的身份進行各個工作

[root@mail dir4]# su - student

請使用 ls -l /dev/shm/unit05/dir[1-4] 依據輸出的結果說明為何會產生這些問題?

ls: 無法存取 /dev/shm/unit05/dir1/file1: 拒絕不符權限的操作
總計 0
-????????? ? ? ? ?             ? file1
ls: cannot open directory /dev/shm/unit05/dir2: 拒絕不符權限的操作

/dev/shm/unit05/dir3:
總計 4
-rw-rw-rw-. 1 root root 191  5月  1 00:42 file3

/dev/shm/unit05/dir4:
總計 4
-rw-------. 1 root root 191  5月  1 00:44 file4

#dir1沒有x權限
#dir2沒有r權限

請使用 ls -l /dev/shm/unit05/dir1/file1 ,依序將上述的檔名由 dir1/file1 ~ dir4/file4 執行,依據產生的結果說明為何會如此?

[student@mail ~]$ ls -l /dev/shm/unit05/dir1/file1
ls: 無法存取 /dev/shm/unit05/dir1/file1: 拒絕不符權限的操作

#沒有dir1 x權限

[student@mail ~]$ ls -l /dev/shm/unit05/dir2/file2
-rw-r--r--. 1 root root 191  5月  1 00:30 /dev/shm/unit05/dir2/file2

-rw-r--r--. 1 root root 191  5月  1 00:30 /dev/shm/unit05/dir2/file2
[student@mail ~]$ ls -l /dev/shm/unit05/dir3/file3

[student@mail ~]$ ls -l /dev/shm/unit05/dir4/file4
-rw-------. 1 root root 191  5月  1 00:44 /dev/shm/unit05/dir4/file4

請使用 vim /dev/shm/unit05/dir1/file1 ~ vim /dev/shm/unit05/dir4/file4,嘗試儲存 (或強制儲存),說明為何可以/不可以儲存?

[student@mail ~]$ vim /dev/shm/unit05/dir1/file1
不能儲存,因為沒有file1的w權限

[student@mail ~]$ vim /dev/shm/unit05/dir2/file2
不能儲存,因為沒有file2的w權限

[student@mail ~]$ vim /dev/shm/unit05/dir3/file3
不能儲存,因為有file3的w權限

[student@mail ~]$ vim /dev/shm/unit05/dir4/file4
不能儲存,因為沒有file4的w權限

5.2:程序管理初探

5.2.2:觀察程序的工具指令

透過各種方法,找到 PID 為 1 的那隻程序的指令名稱為何?

[root@mail ~]# ps -p 1
  PID TTY          TIME CMD
    1 ?        00:03:56 systemd

使用 student 身份登入系統後,(1)使用 su - 切換身份,再 (2)使用 su - student,再 (3) su - 切換成 root,此時再以 ps -l 觀察目前相關的程序情況

[root@mail ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0 20698 20692  0  80   0 - 29027 do_wai pts/0    00:00:00 bash
4 S     0 21124 20698  0  80   0 - 57942 do_wai pts/0    00:00:00 su
4 S     0 21170 21125  0  80   0 - 57952 do_wai pts/0    00:00:00 su
4 S     0 21178 21170  0  80   0 - 28993 do_wai pts/0    00:00:00 bash
4 S     0 21220 21178  0  80   0 - 57952 do_wai pts/0    00:00:00 su
4 S     0 21262 21221  0  80   0 - 57952 do_wai pts/0    00:00:00 su
4 S     0 21268 21262  0  80   0 - 28993 do_wai pts/0    00:00:00 bash
0 R     0 21305 21268  0  80   0 - 38300 -      pts/0    00:00:00 ps

根據分析上述的程序相依性,你需要使用幾次 exit 才能回到原本的 student 帳號?

三次

寫出至少兩種方法,找出名為 crond 的程序的 PID 號碼。

#1
[root@mail ~]# ps aux | grep crond
root     10774  0.0  0.0 126284  1696 ?        Ss   Apr09   0:08 /usr/sbin/crond -n
root     21381  0.0  0.0 112676   728 pts/0    R+   14:07   0:00 grep --color=auto crond


#2
[root@mail ~]# pgrep crond
10774

由於管理員僅需要知道 PID, PRI, NI 及指令名稱四個欄位,請使用 man ps 找到 example 的範例,透過 ps 搭配適當的選項來列出這四個欄位的程序輸出。

ps -o pid,pri,ni -ef

使用 man ps 找到 sort 排序的選項,然後以指令 (comm) 為排序的標準來排序輸出 PID, PRI, NI 與指令。

[root@mail ~]# ps -o pid,pri,ni -ef
  PID PRI  NI
20698  19   0
21598  19   0
  919  19   0

如何以 top 每兩秒鐘更新一次畫面。

[root@mail ~]# top -d 2

進入 top 的觀察界面後,可以按下哪兩個按鍵,在 CPU 排序與記憶體使用量排序間切換?

https://www.booleanworld.com/guide-linux-top-command/

‘M’ to sort by memory usage
‘P’ to sort by CPU usage
‘N’ to sort by process ID
‘T’ to sort by the running time

5.2.3:程序的優先序 PRI 與 NI

使用 ps 搭配適當的選項,輸出 PID, PRI, NI 與 COMMAND 等欄位

[root@mail ~]# ps -o pid,pri,ni,command -ef
  PID PRI  NI COMMAND
20698  19   0 -bash LC_CTYPE=UTF-8 USER=root LOGNAME=root HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin MAIL=/var/mail/root SHELL=/bin/bash SSH_CLIENT=10.231.5
24019  19   0  \_ ps -o pid,pri,ni,command -ef XDG_SESSION_ID=4836 HOSTNAME=mail.want-want.com SELINUX_ROLE_REQUESTED= TERM=xterm-256color SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT
  919  19   0 /sbin/agetty --noclear tty1 linux LANG= PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin TERM=linux LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MON

承上,找到 crond 這個程序的 PID 號碼

[root@mail ~]# ps -o pid,pri,ni,command -ef | grep crond
24043  19   0  \_ grep --color=auto crond XDG_SESSION_ID=4836 HOSTNAME=mail.want-want.com SELINUX_ROLE_REQUESTED= TERM=xterm-256color SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=10.231.51.174 54588 22 SELINUX_USE_CURRENT_RANGE= SSH_TTY=/dev/pts/0 USER=root LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45: MAIL=/var/spool/mail/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin PWD=/root LANG=zh_TW.UTF-8 SELINUX_LEVEL_REQUESTED= HISTCONTROL=ignoredups SHLVL=1 HOME=/root LOGNAME=root SSH_CONNECTION=10.231.51.174 54588 10.231.8.147 22 LC_CTYPE=UTF-8 LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/0 _=/usr/bin/grep

承上,透過 renice 指令,將 crond 的 NI 改成 -15 ,並重新觀察是否順利更改了?

[root@mail ~]# renice -15 19

使用 nice 值搭配 NI 成為 10 來執行 su - student 這個指令

[root@mail ~]# nice -n 10 su - student

使用 ps -l 查詢屬於 student 這次執行的程序中,每一隻程序的 NI 值,並討論 NI 有沒有繼承?

[student@mail ~]$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S  1000  1672  1671  0  90  10 - 28995 do_wai pts/0    00:00:00 bash
0 R  1000  1753  1672  0  90  10 - 38300 -      pts/0    00:00:00 ps

有繼承

使用 top 搭配 -p PID (自行 man top 找到說明),其中 PID 使用 student 的 bash 來處理。

[student@mail ~]$ top -p 1672

top - 12:15:38 up 27 days, 21:55,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1883148 total,  1063460 free,   147732 used,   671956 buff/cache
KiB Swap:  1679356 total,  1679356 free,        0 used.  1440920 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                        
 1672 student   30  10  116112   2712   1752 S  0.0  0.1   0:00.03 bash

承上,在 top 畫面中按下『 r 』,依據螢幕的顯示說明逐一輸入正確的資料,最後請確認 student 能否將 NI 更改為 0 以及 15 ?

可以r,但是NI改不了

5.2.4:bash 的工作管理

執行『 find / 』,然後快速的按下『 [ctrl]+z 』讓該指令丟到背景中,使用 jobs -l 觀察該背景的工作號碼與 PID 號碼

[root@mail ~]# jobs -l
[1]+  3537 停止                  find /

讓該工作在背景中執行,此時你能否中斷 (ctrl+c) 或暫停 (ctrl+z) 該工作?為什麼?

在背景沒辦法中斷或暫停

使用『 find / & 』指令,此時快速按下『 ctrl+z 』有沒有作用?為什麼?

沒有作用,因為find / &就是只讓find /在背景執行的意思

若使用『 find / &> /tmp/findroot.txt & 』,然後快速的按下 jobs -l ,能否觀察到該工作是否在運作中?

[root@mail ~]# find / &> /tmp/findroot.txt &
[1] 3671
[root@mail ~]# jobs -l
[1]+  3671 Done                    find / &>/tmp/findroot.txt

//TODO find /跑太快了,每次按完jobs -l看到State就是Done了

輸入『 sleep 60s 』,讓螢幕停止 60 秒。在結束前按下『 ctrl+z 』,之後按下 jobs -l 觀察 sleep 這個工作是否運作中?

[root@mail ~]# sleep 60s
^Z
[1]+  Stopped                 sleep 60s
[root@mail ~]# jobs -l
[1]+  3702 停止                  sleep 60s

讓 sleep 工作在背景中開始執行

#Sleep的Job Id是1

[root@mail ~]# bg 1
[1]+ sleep 60s &

輸入 vim 之後,按下『 ctrl + z 』並查看 vim 的運作狀態

[root@mail ~]# vim

[1]+  Stopped                 vim
[root@mail ~]# jobs -l
[1]+  3766 停止                  vim

讓 vim 在背景中執行,觀察 vim 能否更改狀態成為執行?說明為什麼。

[root@mail ~]# bg %1
[1]+ vim &
[root@mail ~]# jobs -l
[1]+  3766 停止 (tty 輸出)     vim

因為背景執行的程式不能tty output

將 vim 挪到前景中,並將它正常的結束工作。

[root@mail ~]# fg %1
vim

在背景運作的 sleep 運作結束後,螢幕上會出現什麼訊息?

沒有訊息 要打jobs -l才會看到工作結束

5.3:特殊權限 SUID/SGID/SBIT 的功能

5.3.1:SUID/SGID/SBIT 的觀察與功能說明

例題:請用 student 身份處理底下的例題

先嘗試使用 passwd 修改自己的密碼,假設要改成student

[root@mail ~]# su - student
Last login: Sat May  7 12:08:59 CST 2016 on pts/0
[student@mail ~]$ passwd student
passwd:只有 root 可指定用戶名稱。

先使用『 openssl rand -base64 8 』這個指令來猜測一個較為嚴格的密碼

[student@mail ~]$ openssl rand -base64 8
0bu9JpxxTt8=

直接輸入『 passwd 』這個指令來修改 student 的密碼,更改密碼時,先輸入原本的密碼,再輸入兩次上一個指令提供的密碼

[student@mail ~]$ passwd
更改使用者 student 的密碼。
正在更改 student 的 STRESS 密碼。
(目前的)UNIX 密碼:
新 密碼:
再次輸入新的 密碼:
passwd:所有驗證 token 都已成功更新。

使用『 ls -l /etc/shadow 』查看一下該檔案是否有被更動到目前的日期與時間。

[student@mail ~]$ ls -l /etc/shadow
----------. 1 root root 1409  5月  7 12:56 /etc/shadow

檢查一下 /etc/shadow 的權限,student 是否有權限可以更動該檔案?

沒有

最後請用 root 的身份將 student 的密碼改回來

[root@mail ~]# passwd student
Changing password for user student.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

以 student 的身份執行 passwd

#先安裝psmisc,等等用的到
[root@mail ~]# yum install psmisc

[root@mail ~]# su - student
Last login: Sat May  7 12:58:50 CST 2016 on pts/0
[student@mail ~]$ passwd
更改使用者 student 的密碼。
正在更改 student 的 STRESS 密碼。
(目前的)UNIX 密碼:

將該指令丟進背景中暫停 (輸入組合按鍵後,可能需要再按一次 enter)

#ctrl + z

[1]+  Stopped                 passwd

使用 pstree -pu 觀察 passwd 與前、後程序的擁有者變化。

pstree -pu

systemd(1)─┬─NetworkManager(920)─┬─{NetworkManager}(938)
           │                     └─{NetworkManager}(941)
           ├─VGAuthService(855)
           ├─abrt-watch-log(865)
           ├─abrtd(861)
           ├─agetty(919)
           ├─atd(913)
           ├─auditd(830)───{auditd}(831)
           ├─chronyd(880,chrony)
           ├─crond(10774)
           ├─dbus-daemon(879,dbus)───{dbus-daemon}(892)
           ├─firewalld(912)───{firewalld}(1091)
           ├─lsmd(870,libstoragemgmt)
           ├─lvmetad(567)
           ├─master(1646)───qmgr(1663,postfix)
           ├─polkitd(856,polkitd)─┬─{polkitd}(882)
           │                      ├─{polkitd}(893)
           │                      ├─{polkitd}(901)
           │                      ├─{polkitd}(904)
           │                      └─{polkitd}(906)
           ├─rngd(871)
           ├─rpcbind(869,rpc)
           ├─rsyslogd(1280)─┬─{rsyslogd}(1286)
           │                └─{rsyslogd}(1287)
           ├─smartd(878)
           ├─sshd(1279)───sshd(1533)───bash(1538)───su(4744)───bash(4745,student)─┬─passwd(4795,root)
           │                                                                      └─pstree(4917)
           ├─systemd-journal(546)
           ├─systemd-logind(859)
           ├─systemd-udevd(573)
           ├─tuned(1283)─┬─{tuned}(1770)
           │             ├─{tuned}(1771)
           │             ├─{tuned}(1777)
           │             └─{tuned}(1813)
           └─vmtoolsd(860) 

#passwd是root

將 passwd 拉到前景中,然後中斷 passwd 。

[student@mail ~]$ fg %1
passwd
passwd: 驗證記號處理錯誤

#拉到前景就會自動中斷了

使用 locate 查詢系統檔名

請使用 student 身份查詢名為 passwd 的檔案有哪些 (使用 locate passwd 即可)

[student@mail ~]$ locate passwd
/etc/passwd
/etc/passwd-
/etc/dovecot/conf.d/auth-passwdfile.conf.ext
/etc/pam.d/passwd
...

locate 所取用的檔名資料庫放置於 /var/lib/mlocate 當中,請使用 ll -d 的方式觀察該目錄的權限

[student@mail ~]$ ll -d /var/lib/mlocate/
drwxr-x---. 2 root slocate 24  5月  7 03:14 /var/lib/mlocate/

承上,請問 student 有沒有權限可以進入該目錄?

Other沒有x權限,所以不能進到該目錄

使用 which locate 查詢 locate 這個指令的完整檔名 (了解 which 的功能為何)

[student@mail ~]$ which locate
/bin/locate

查詢 locate 的權限,是否具有 SGID 的權限旗標?locate 的擁有群組為何?為何 student 操作 locate 可以進入 /var/lib/mlocate 目錄?

[student@mail ~]$ ll -d /bin/locate
-rwx--s--x. 1 root slocate 40520  4月 11  2018 /bin/locate

#因為Other有x權限,在執行時會切換slocate,他s權限

例題:請使用 root 的身份進行如下的動作

觀察 /run/log/journal 這個目錄本身的權限為何?尤其是群組的權限資料

[student@mail ~]$ ll -d /run/log/journal
drwxr-sr-x. 3 root systemd-journal 60  6月 26  2018 /run/log/journal

使用 touch /tmp/fromroot ,觀察 /tmp/fromroot 的權限,尤其是群組的名稱為何?

touch /tmp/fromroot
ll -d /tmp/fromroot

---------------------------------------------------------
-rw-r--r-- 1 root root 0 May 25 01:57 /tmp/fromroot

root有讀寫權,其他只有讀的權限,群組為root

使用 touch /run/log/journal/fromroot,觀察 /run/log/journal/fromroot 的權限,尤其是群組的名稱為何?

[student@mail ~]$ ll -d /run/log/journal
drwxr-sr-x. 3 root systemd-journal 60  6月 26  2018 /run/log/journal

觀察 /tmp 的權限,看其他人的權限當中的 x 變成什麼?

[student@mail ~]$ ll -d /tmp                                   
drwxrwxrwt. 8 root root 192  5月  7 13:02 /tmp

以 root 登入系統,並且進入 /tmp 當中,將 /etc/hosts 複製成為 /tmp/myhosts ,並且更改 /tmp/myhosts 權限成為 777 ;

[root@mail ~]# cd /tmp
[root@mail tmp]# cp /etc/hosts /tmp/myhosts
[root@mail tmp]# chmod 777 myhosts

以 student 登入,並進入 /tmp

su - student
cd /tmp

student 能不能使用 vim 編輯這個檔案?為什麼?

[student@mail ~]$ cd /tmp
[student@mail tmp]$ vim myhosts 
[student@mail tmp]$ cat myhosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.231.8.147 mail.want-want.com
hello

#可以,使用者對於此檔案具有w權限

student 能不能刪除這個檔案?為什麼?

[student@mail tmp]$ rm myhosts
rm: 無法移除 ‘myhosts’: 此項操作並不被允許
[student@mail tmp]$ ll -d /tmp
drwxrwxrwt. 8 root root 207  5月  7 13:23 /tmp

#當使用者在該目錄下建立檔案或目錄時,僅有自己與 root 才有權力刪除該檔案

5.3.2:SUID/SGID/SBIT 權限的設定

一般使用者執行 /usr/local/bin/mycat2 時,可以產生與 /usr/bin/cat 相同的結果。但是一般用戶在執行 mycat2 的時候,可以在運作的過程當中取得 root 的權限, 因此一般使用者執行 mycat2 /etc/shadow 會順利執行成功。

[root@mail tmp]# cp /usr/bin/cat /usr/local/bin/mycat2
[root@mail tmp]# chmod u+s /usr/local/bin/mycat2 
[root@mail tmp]# su - student
Last login: Sat May  7 13:21:22 CST 2016 on pts/0
[student@mail ~]$ mycat2 /etc/shadow

承襲前一堂課的實做成果,請到 /srv/ 目錄下,觀察 project1 這個目錄的權限,若要讓『所有在該目錄底下建立的新檔案,新檔案的所屬群組要跟 project1 相同, 亦即群組預設要成為 progroup 才行。

[root@mail tmp]# cd /srv
[root@mail srv]# mkdir project1
[root@mail srv]# chgrp progroup project1
[root@mail srv]# chmod g+s project1

5.4:課後練習操作

請使用 root 的身份進行如下實做的任務。直接在系統上面操作,操作成功即可,上傳結果的程式會主動找到你的實做結果。

系統上面有個名為 /opt/checking.txt 的檔案,student 能否讀, 寫該檔案?為甚麼?(說明是哪種權限的影響)

沒有這個檔案,不過如果有檔案rw權限就可以讀寫

承上,student 能不能將這個檔案複製到 /tmp 去?為甚麼?(說明是哪種權限的影響)

沒有這個檔案,不過如果有檔案x權限就可以複製

student 能不能刪除 /opt/checking.txt 這個檔案?為甚麼?(說明是哪種權限的影響)

不能,沒有/opt w權限

student 能不能用 ls 去查看 /opt/checkdir/ 這個目錄內的檔名資料?為甚麼?(說明是哪種權限的影響)

沒有這個資料夾,不過如果有r的權限就可以

student 能不能讀取 /opt/checkdir/myfile.txt 檔案?為甚麼?(說明是哪種權限的影響)

沒有這個檔案,不過如果有r的權限就可以

student 能不能刪除他家目錄底下,一個名為 fromme.txt 的檔案?為什麼?(說明是哪種權限的影響)

可以,他有家目錄的w權限

基礎帳號管理,請建立如下的群組與帳號資料:

群組名稱為: mygroup, nogroup
帳號名稱為: myuser1, myuser2, myuser3 ,通通加入 mygroup,且密碼為 MyPassWord
帳號名稱為: nouser1, nouser2, nouser3 ,通通加入 nogroup,且密碼為 MyPassWord

[root@mail srv]# groupadd mygroup
[root@mail srv]# groupadd nogroup

[root@mail srv]# adduser -G mygroup -p MyPassWord myuser1
[root@mail srv]# adduser -G mygroup -p MyPassWord myuser2
[root@mail srv]# adduser -G mygroup -p MyPassWord myuser3
[root@mail srv]# adduser -G nogroup -p MyPassWord nouser1
[root@mail srv]# adduser -G nogroup -p MyPassWord nouser2
[root@mail srv]# adduser -G nogroup -p MyPassWord nouser3

建立一個名為 /srv/myproject 的目錄,這個目錄可以讓 mygroup 群組內的使用者完整使用,且【新建的檔案擁有群組】為 mygroup 。不過其他人不能有任何權限

[root@mail srv]# mkdir /srv/myproject
[root@mail srv]# chgrp mygroup /srv/myproject/
[root@mail srv]# chmod g+s /srv/myproject
[root@mail srv]# chmod 775 /srv/myproject
[root@mail srv]# ll -d /srv/myproject
drwxrwsr-x. 2 root mygroup 6 May  7 13:50 /srv/myproject

暫時切換成為 myuser1 的身分,並前往 /srv/myproject 目錄,嘗試建立一個名為 myuser1.data 的檔案,之後登出 myuser1。

[root@mail srv]# su - myuser1
[myuser1@mail ~]$ cd /srv/myproject/
[myuser1@mail myproject]$ touch myuser1.data
[myuser1@mail myproject]$ exit
logout
[root@mail srv]# ll /srv/myproject/myuser1.data 
-rw-rw-r--. 1 myuser1 mygroup 0 May  7 13:56 /srv/myproject/myuser1.data

雖然 nogroup 群組內的用戶對於 /srv/myproject 應該沒有任何權限,但當 nogroup 內的用戶執行 /usr/local/bin/myls 時,可以產生與 ls 相同的資訊,且暫時擁有 mygroup 群組的權限,因此可以查詢到 /srv/myproject 目錄內的檔名資訊。 也就是說,當你使用 nouser1 的身分執行【myls /srv/myproject】時,應該是能夠查閱到該目錄內的檔名資訊。

讓一般用戶執行 /usr/local/bin/myless 產生與 less 相同的結果。此外,只有 mygroup 的群組內用戶可以執行,其他人不能執行,同時 myuser1 等人執行 myless 時,執行過程中會暫時擁有 root 的權限。

[root@mail srv]# cp /bin/less /usr/local/bin/myless
[root@mail srv]# chgrp mygroup /usr/local/bin/myless 
[root@mail srv]# chmod 4770 /usr/local/bin/myless

建立一個名為 /srv/nogroup 的空白檔案,這個檔案可以讓 nouser1, nouser2, nouser3 讀、寫,但全部的人都不能執行。而 myuser1, myuser2, myuser3 只能讀不能寫入。

[root@mail srv]# touch /srv/nogroup
[root@mail srv]# chgrp nogroup /srv/nogroup
[root@mail srv]# chmod 664 /srv/nogroup

使用程序觀察的指令,搭配 grep 的關鍵字查詢功能,將找到的 rsyslog 相關的程序的 PID, PRI, NI, COMMAND 等資訊轉存到 /root/process_syslog.txt 檔案中;

[root@mail srv]# ps -o pid,pri,ni,command | grep rsyslog > /root/process_syslog.txt

使用任何你知道的程序觀察指令,找到名為 sleep 的程序,找出他的 NI 值是多少?然後寫入 /root/process_sleep.txt 的檔案中

[root@mail ~]# ps -o ni | grep sleep > /root/process_syslog.txt

承上,請將該 NI 值改成 -10 。

[root@mail srv]# top
r
#輸入sleep pid
-10

以 myuser1 登入 tty3 終端機,然後執行『 sleep 5d 』這個指令,請注意,這個指令必須要在『背景以下運作』才行;

[root@mail srv]# sleep 5d&
[1] 8135

承上,在上 tty3 的 myuser1 持續同時運作 vim ~/.bashrc 這個指令在前景運作。保留此環境,然會回到你原本的 tty 中。

vim ~/.bashrc

使用 root 執行『 sleep 4d 』這個指令,且這個指令的 NI 值必須要設定為 -5

[root@mail srv]# sleep 4d&
[2] 8166
[root@mail srv]# renice -15 8166
8166 (process ID) old priority 0, new priority -15

使用 find 找出 /usr/bin 及 /usr/sbin 兩個目錄中,含有 SUID 或/及 SGID 的特殊檔案檔名, 並使用 ls -l 去列出找到的檔案的相關權限後,將螢幕資料轉存到 /root/findsuidsgid.txt 檔案中。

[root@mail ~]# find /usr/bin/ /usr/sbin -perm -4000 > /root/findsuidsgid

[root@mail ~]# find /usr/bin/ /usr/sbin -perm -2000 > /root/findsuidsgid

results matching ""

    No results matching ""