單純提供一個相對的解答,並不是標準答案!
單純就是個解答的參考,寫完之後再來這邊查查看答案跟你想的一樣不一樣!?
操作動作 | /dir1 | /dir1/file1 | /dir2 | 重點 |
讀取 file1 內容 | x | r | - | 目錄:因為你已經知道檔案的檔名是 file1,所以不需要使用 ls 去查詢檔名,因此目錄只要具備 x 即可。若不知道檔名,才需要有目錄的 r。 檔案:需要知道內容才能讀取,所以需要 r 的權限 |
修改 file1 內容 | x | rw | - | 目錄:目錄的權限如同上面。 檔案:由於我們需要『修改』該檔案內容,因此,file1 最好具備 r 的權限,否則會看不到之前的資料喔! |
執行 file1 內容 | x | rx (x) | - | 目錄:你需要進入該目錄才能夠去執行在該目錄內的檔案啊!所以需要 x 即可。 檔案:若要執行該檔案至少需要有 x 權限。但是,如果該檔案是腳本檔 (shell script),那得要看到內容後才有辦法執行。 因此答案可能是 x 也可能是 rx。 |
刪除 file1 檔案 | wx | - | - | 目錄:因為你需要刪除該檔名,因此至少得要能夠進入以及更動檔名的權限,所以至少需要 wx 才行。不需要 r 的原因如第一點所示。 檔案:如同前一小節最後一個練習,要刪除檔名與該檔案無關,與該檔案所在的目錄有關喔! |
將 file1 複製到 /dir2 | x | r | wx | 來源目錄與檔案:就跟第一點一樣,要能夠讀到該檔案的權限 目標目錄:建立檔案跟刪除檔案意義差不多,要能進入且修改檔名,所以需要 wx 。 |
將 file1 移動到 /dir2 | wx | -(r) | wx | 同一檔案系統中:假設這兩個目錄在同一個檔案系統上面,那麼移動檔名就跟檔案本身無關,因此只需要兩者目錄均有更改檔名的權限 (wx) 即可。 不同檔案系統中:但是如果這兩個目錄是在不同的檔案系統當中,那麼檔案就是『被複製後刪除』,此時檔案要加上 r 的權限才行! |
[student@station10-101 ~]$ su - 密碼: [root@station10-101 ~]# cd /dev/shm [root@station10-101 shm]# mkdir unit05 [root@station10-101 shm]# chmod 775 unit05 [root@station10-101 shm]# cd unit05 [root@station10-101 unit05]# mkdir dir1 [root@station10-101 unit05]# chmod 754 dir1 [root@station10-101 unit05]# cp /etc/hosts dir1/file1 [root@station10-101 unit05]# chmod 644 dir1/file1 [root@station10-101 unit05]# mkdir dir2 [root@station10-101 unit05]# chmod 751 dir2 [root@station10-101 unit05]# cp /etc/hosts dir2/file2 [root@station10-101 unit05]# chmod 644 dir2/file2 [root@station10-101 unit05]# mkdir dir3 [root@station10-101 unit05]# chmod 755 dir3 [root@station10-101 unit05]# cp /etc/hosts dir3/file3 [root@station10-101 unit05]# chmod 666 dir3/file3 [root@station10-101 unit05]# mkdir dir4 [root@station10-101 unit05]# chmod 777 dir4 [root@station10-101 unit05]# cp /etc/hosts dir4/file4 [root@station10-101 unit05]# chmod 600 dir4/file4 [root@station10-101 unit05]# ll -d . dir* dir*/* drwxrwxr-x. 6 root root 120 Feb 24 00:28 . drwxr-xr--. 2 root root 60 Feb 24 00:30 dir1 -rw-r--r--. 1 root root 158 Feb 24 00:30 dir1/file1 drwx--x--x. 2 root root 60 Feb 24 00:30 dir2 -rw-r--r--. 1 root root 158 Feb 24 00:30 dir2/file2 drwxr-xr-x. 2 root root 60 Feb 24 00:30 dir3 -rw-rw-rw-. 1 root root 158 Feb 24 00:30 dir3/file3 drwxrwxrwx. 2 root root 60 Feb 24 00:31 dir4 -rw-------. 1 root root 158 Feb 24 00:31 dir4/file4
a. 的部份 [student@station10-101 ~]$ cd /dev/shm/unit05/ [student@station10-101 unit05]$ ll dir1 ls: 無法存取 'dir1/file1': 拒絕不符權限的操作 總計 0 -????????? ? ? ? ? ? file1 # 因為有 dir1 的 r 權限,因此可以看到『檔名列表』沒問題。 # 但是,因為沒有 x 的權限,因此無法針對 file1 的詳細屬性進行查閱 # 所以,就像上面這樣,權限與屬性的部份會沒權限!檔名是可以看到的! [student@station10-101 unit05]$ ll dir2 ls: cannot open directory 'dir2': 拒絕不符權限的操作 # 不用講,因為沒有 dir2 的 r 權限,所以看不到任何東西! [student@station10-101 unit05]$ ll dir3 總計 4 -rw-rw-rw-. 1 root root 158 Feb 24 00:30 file3 [student@station10-101 unit05]$ ll dir4 總計 4 -rw-------. 1 root root 158 Feb 24 00:31 file4 # 因為有 dir3, dir4 的 r 與 x 權限,所以可以看到『檔名列表』與權限!至於 c 的部份,請自行使用 vim 去編輯檔案,然後進行強制儲存 (:w!) ,會得到底下的結果:
b. 的部份 [student@station10-101 unit05]$ ll dir1/file1 ls: 無法存取 'dir1/file1': 拒絕不符權限的操作 # 查看檔名資料與目錄的權限有關。因為 student 僅有 dir1 的 r 沒有 x 的權限, # 所以不能將 file1 拿出來看,因此只能看到檔名,無法知道檔案屬性。 [student@station10-101 unit05]$ ll dir2/file2 -rw-r--r--. 1 root root 158 Feb 24 00:30 dir2/file2 # 與上面不同,student 具有 dir2 的 x 權限,而且已經知道 file2 的檔名, # 所以不需要 dir2 的 r 也能得到 file2 的檔名資料,也能直接看到 file2 的權限屬性! [student@station10-101 unit05]$ ll dir3/file3 -rw-rw-rw-. 1 root root 158 Feb 24 00:30 dir3/file3 [student@station10-101 unit05]$ ll dir4/file4 -rw-------. 1 root root 158 Feb 24 00:31 dir4/file4 # 因為具有 dir3, dir4 的 rx 權限,所以可以直接查看到 file3, file4 的檔名與權限
a. 部份 [student@station10-101 ~]$ pstree -p | grep '(1)' systemd(1)-+-ModemManager(973)-+-{ModemManager}(991) # 所以得到答案為 systemd 囉! [student@station10-101 ~]$ ps aux | grep ' 1 ' root 1 0.0 0.5 244840 10084 ? Ss 3月16 0:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 18 student 16374 0.0 0.0 12108 1068 pts/0 S+ 15:58 0:00 grep --color=auto 1不論是 pstree 還是 ps aux ,要找 PID 為 1,可以透過找到 (1) 及 1 單獨存在 (1 的兩邊有個空白),就可以找到了。所以答案就是 systemd 這個指令。 至於 b 要找到 crond 的 PID,同樣可以透過這個方式來找到:
[student@station10-101 ~]$ pstree -p | grep crond |-crond(1523) [student@station10-101 ~]$ ps aux | grep crond root 1523 0.0 0.1 36088 3220 ? Ss 3月16 0:00 /usr/sbin/crond -n student 16406 0.0 0.0 12108 972 pts/0 S+ 16:01 0:00 grep --color=auto crond都可以找到 PID 為 1523。另外要注意,每個系統的 PID 都不一樣,所以,在你的系統上面看到的數值不同,也是合理的!
[student@station10-101 ~]$ su - 密碼: [root@station10-101 ~]# su - student [student@station10-101 ~]$ su - Password: [root@station10-101 ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 16424 14132 0 80 0 - 47473 - pts/0 00:00:00 su <==這裡變成 root 4 S 0 16430 16424 0 80 0 - 6639 - pts/0 00:00:00 bash 4 S 0 16460 16430 0 80 0 - 47467 - pts/0 00:00:00 su <==這裡變成 student 4 S 0 16487 16461 0 80 0 - 47470 - pts/0 00:00:00 su <==這裡又變成 root 4 S 0 16491 16487 0 80 0 - 6639 - pts/0 00:00:00 bash 0 R 0 16515 16491 0 80 0 - 11191 - pts/0 00:00:00 ps你可以很輕鬆的查閱到,下一行的 PPID 就是前一行的 PID (幾乎啦!),其實整筆輸出應該還少了一個項目, 那就是 bash 這個程序!畢竟每執行一次 su 後,系統就會給予一個新的權限的 bash,但是上面只輸出 2 個而已啊! 此外,也只有 root 權限才能往前追蹤~也因為已經使用了 3 次 su 啊,所以當然要輸入 3 次 exit 後, 才能回到原本的 bash 喔!
[root@station10-101 ~]# man ps ...... EXAMPLES To see every process on the system using standard syntax: ps -e ps -ef ps -eF ps -ely To see every process on the system using BSD syntax: ps ax ps axu To print a process tree: ps -ejH ps axjf To get info about threads: ps -eLf ps axms To get security info: ps -eo euser,ruser,suser,fuser,f,comm,label ps axZ ps -eM To see every process running as root (real & effective ID) in user format: ps -U root -u root u To see every process with a user-defined format: ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm ps -Ao pid,tt,user,fname,tmout,f,wchan ......題目說,我們只需要 pid, pri, ni 與指令 (可用 comm 或 args),因此,可以這樣處理:
[root@station10-101 ~]# ps -eo pid,pri,ni,args
PID PRI NI COMMAND
1 19 0 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
2 19 0 [kthreadd]
3 39 -20 [rcu_gp]
4 39 -20 [rcu_par_gp]
6 39 -20 [kworker/0:0H-kblockd]
......
16922 19 0 ps -eo pid,pri,ni,args
26698 19 0 [kworker/7:3-cgroup_destroy]
至於排序部份,當你 man ps ,並且搜尋 --sort 之後,可以找到這一段:
[root@station10-101 ~]# man ps
--sort spec
Specify sorting order. Sorting syntax is [+|-]key[,[+|-]key[,...]]. Choose a multi-letter key from
the STANDARD FORMAT SPECIFIERS section. The "+" is optional since default direction is increasing
numerical or lexicographic order. Identical to k. For example: ps jax --sort=uid,-ppid,+pid
因此,要使用指令名稱來排序,基本上可以這樣做:
[student@station10-101 ~]$ ps -eo pid,pri,ni,comm --sort=comm
PID PRI NI COMMAND
2041 19 0 (sd-pam)
2425 19 0 (sd-pam)
14117 19 0 (sd-pam)
973 19 0 ModemManager
1104 19 0 NetworkManager
......
1002 19 0 avahi-daemon
2432 19 0 bash
14132 19 0 bash
15381 19 0 bash
15316 19 0 boltd
2304 19 0 colord
......
[student@station10-101 ~]$ man top TOP(1) User Commands TOP(1) NAME top - display Linux processes SYNOPSIS top -hv|-bcEHiOSs1 -d secs -n max -u|U user -p pid -o fld -w [cols] The traditional switches `-' and whitespace are optional. ......因此,只要『 top -d 2 』即可每兩秒更新一次畫面了。另外,如果需要查詢 top 裡面資料的排序,可以使用 man top 之後, 搜尋 sorting 這個關鍵字,就能得到底下的畫面:
[student@station10-101 ~]$ man top ...... SORTING of task window For compatibility, this top supports most of the former top sort keys. Since this is primarily a service to former top users, these commands do not appear on any help screen. command sorted-field supported A start time (non-display) No M %MEM Yes N PID Yes P %CPU Yes T TIME+ Yes ......所以,你只要輸入『 top -d 2 』之後,在活動的視窗中,直接輸入大寫字元的『 M 』以及『 P 』以及『 T 』, 就可以知道排序的差異了!預設是使用 P 這個 CPU 使用率排序的!
a. 使用 man ps 找到 exapmle 之後,知道如下的動作可以查詢 ps 的輸出: [roott@station10-101 ~]# ps -eo pid,pri,ni,comm PID PRI NI COMMAND 1 19 0 systemd 2 19 0 kthreadd ...... b. 搭配 grep 來抓關鍵字: [root@station10-101 ~]# ps -eo pid,pri,ni,comm | grep crond 1523 19 0 crond c. 將上面的 1523 PID 的 ni 值改掉: [root@station10-101 ~]# renice -n -15 -p 1523 1523 (process ID) old priority 0, new priority -15 [root@station10-101 ~]# ps -eo pid,pri,ni,comm | grep crond 1523 34 -15 crond最終的 NI 從 0 變成了 -15 了,至於 PRI 則從原本的 19 變成了 34 了!(19 - (-15) = 19+15 = 34)
[root@station10-101 ~]# man nice NICE(1) User Commands NICE(1) NAME nice - run a program with modified scheduling priority SYNOPSIS nice [OPTION] [COMMAND [ARG]...] DESCRIPTION Run COMMAND with an adjusted niceness, which affects process scheduling. With no COMMAND, print the current niceness. Niceness values range from -20 (most favorable to the process) to 19 (least favorable to the process). Mandatory arguments to long options are mandatory for short options too. -n, --adjustment=N add integer N to the niceness (default 10)知道指令下達的方式之後,就可以開始處理了:
[root@station10-101 ~]# nice -n 10 su - student [student@station10-101 ~]$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 20131 20124 0 80 0 - 6859 - pts/0 00:00:00 bash 4 S 1000 20200 20199 0 90 10 - 6108 - pts/0 00:00:00 bash 0 R 1000 20226 20200 0 90 10 - 11191 - pts/0 00:00:00 ps可以很清楚的看到, nice 值是會向後繼承的,因此,在上面的 20200 這個 PID 之後衍生出來的程序, 他的 Nice 都會預設是 10 喔!這個部份也得注意!
[student@station10-101 ~]$ top -d 2 -p 20200 top - 22:11:30 up 6 days, 7:24, 3 users, load average: 0.00, 0.00, 0.00 Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.1 hi, 0.0 si, 0.0 st MiB Mem : 1828.4 total, 152.5 free, 1139.6 used, 536.3 buff/cache MiB Swap: 2048.0 total, 1999.7 free, 48.2 used. 507.9 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 20200 student 30 10 24432 5116 3268 S 0.0 0.3 0:00.02 bash現在,當你 man top 然後搜尋 renice 時,就會看到有個 r 的指令可以應用~此時,請在 top 的視窗內, 按下『 r 』,然後將 ni 值改為 0 與 15 看看。你會發現 0 不能改, 15 則可以更改成功!
[student@station10-101 ~]$ top -d 2 -p 20200 PID to renice [default pid = 20200] 20200 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 20200 student 30 10 24432 5116 3268 S 0.0 0.3 0:00.02 bash Renice PID 20200 to value 0 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 20200 student 30 10 24432 5116 3268 S 0.0 0.3 0:00.02 bash Failed renice of PID 20200 to 0: Permission denied PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 20200 student 30 10 24432 5116 3268 S 0.0 0.3 0:00.02 bash # 上面依序輸入 r, 20200, 0 的結果會是這樣~如果依序輸入 r, 20200, 15 的結果,會變這樣: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 20200 student 35 15 24432 5116 3268 S 0.0 0.3 0:00.02 bash
[student@station10-101 ~]$ find / / /boot /boot/initramfs-4.18.0-147.el8.x86_64kdump.img ...... /proc/37/task/37/oom_score /proc/37/task/37/oom_adj /proc/37/task/37/oom_score_adj^Z <==按下 [ctrl]+z 喔! [1]+ Stopped find /如上所示,系統會告訴你,有一個編號 [1] 號的工作在系統內暫停 (stopped),指令內容為 find / 這樣!相當清楚!
[student@station10-101 ~]$ jobs [1]+ Stopped find / [student@station10-101 ~]$ jobs -l [1]+ 20380 Stopped find /jobs -l 可以多出一個數字,那個數字就是 PID 囉!這樣觀察比較清楚!
[student@station10-101 ~]$ bg %1
......
[student@station10-101 ~]$ find / &> /tmp/findroot.txt & [1] 20850 [student@station10-101 ~]$ jobs -l [1]+ 20850 退出 1 find / &> /tmp/findroot.txt確實是可以看到 jobs 喔!不過因為執行過一次以後,Linux 會將搜尋到的資料快取在記憶體,因此再次使用 find 時, 速度會快的跟在飛一樣!所以,如果第二個指令執行不夠快速,你就看不到執行過程了。另外,使用資料流重導向,可以讓輸出訊息導向到檔案, 所以螢幕就不會被檔名搞亂了!
[student@station10-101 ~]$ sleep 10s ^Z <==其實這裡是按下 [ctrl]+z 喔! [1]+ 已停止 sleep 10s [student@station10-101 ~]$ jobs -l [1]+ 20886 停止 sleep 10s所以,確認結果後, sleep 10s 現在正在『暫停』中沒錯!沒有持續倒數喔!
[student@station10-101 ~]$ bg %1 [1]+ sleep 10s & [1]+ 20886 已完成 sleep 10s靜待一段時間後,bash 畫面會丟出 sleep 已經完成的訊息給妳看喔!
[student@station10-101 ~]$ vim <==在 vim 當中按下 [ctrl]+z 的結果! [1]+ 已停止 vim [student@station10-101 ~]$ jobs -l [1]+ 20959 停止 vim確定 vim 在背景中暫停喔!
[student@station10-101 ~]$ bg %1 [1]+ vim & [1]+ 已停止 vim [student@station10-101 ~]$ jobs -l [1]+ 20959 停止 (tty 輸出) vimvim 依舊是暫停的狀態,這是因為 vim 一定要與人互動 (輸入) 才能執行,不能自己亂動。因此,vim 在背景底下無法變成 run 的模式! 所以在背景下, vim 將永遠是暫停的嚕!
[student@station10-101 ~]$ passwd 更改使用者 student 的密碼。 Current password: <==這裡先輸入原本的密碼,就是 mystdgo 新 密碼: <==這裡輸入 123456 不良的密碼:密碼短於 8 個字元 passwd: 驗證記號處理錯誤因為密碼短之外,又太爛,所以無法通過系統的密碼強度驗證,就直接給妳丟出來,因此密碼沒有更改喔!
[student@station10-101 ~]$ openssl rand -base64 8 nGGpkK4Kjkk= [student@station10-101 ~]$ openssl rand -base64 8 4Rmi5usNDJg=相同的指令,但是每次都會產生不同的密碼!我們將第二個密碼拿出來,並且不要輸入 = 號,亦即以『 4Rmi5usNDJg 』 作為我們的新密碼看看。
[student@station10-101 ~]$ passwd 更改使用者 student 的密碼。 Current password: <==這裡先輸入原本的密碼,就是 mystdgo 新 密碼: <==輸入新密碼 4Rmi5usNDJg 再次輸入新的 密碼: <==再輸入一次! passwd:所有核對代符都已成功更新。
[student@station10-101 ~]$ date Thu Feb 23 05:04:23 PM CST 2023 [student@station10-101 ~]$ ll /etc/shadow ----------. 1 root root 1845 Feb 23 17:02 /etc/shadow檔案確實在幾分鐘前被更新過!所以,使用者確實可以更改自己的密碼喔!
[student@station10-101 ~]$ su - 密碼: [root@station10-101 ~]# echo mystdgo | passwd --stdin student Changing password for user student. passwd: all authentication tokens updated successfully. [root@station10-101 ~]# exit logout
[student@station10-101 ~]$ passwd
更改使用者 student 的密碼。
Current password:
Current password:
[1]+ 已停止 passwd
[student@station10-101 ~]$ jobs -l
[1]+ 21350 停止 passwd
[student@station10-101 ~]$ pstree -pu | grep -A1 -B1 passwd |-gnome-terminal-(15372)-+-bash(15381)-+-grep(21446) | | |-passwd(21423,root) | | `-pstree(21445)所以 passwd 執行期間,確實就是 root 的身份啊!
[student@station10-101 ~]$ locate passwd locate: 無法執行 stat()「/var/lib/mlocate/mlocate.db」: 沒有此一檔案或目錄 [student@station10-101 ~]$ su - 密碼: [root@station10-101 ~]# updatedb [root@station10-101 ~]# exit logout [student@station10-101 ~]$ locate passwd /etc/passwd /etc/passwd- /etc/pam.d/passwd ......這個指令可以透過資料庫環境,直接找到檔名列表!速度很快喔!
[student@station10-101 ~]$ ll -d /var/lib/mlocate/ drwxr-x---. 2 root slocate 24 Feb 24 2023 /var/lib/mlocate/
[student@station10-101 ~]$ which locate /usr/bin/locate [student@station10-101 ~]$ type -a locate locate 是 /usr/bin/locate基本上有兩個指令可以查詢『指令的絕對路徑檔名』,那就是 which 以及 type -a 這兩個!
[student@station10-101 ~]$ ll /usr/bin/locate -rwx--s--x. 1 root slocate 41048 May 16 2022 /usr/bin/locate搭配前幾點來看, locate 具有 SGID,亦即 student 執行 locate 時,其所屬的『有效群組』將會暫時切換成為 locate 這個指令的群組, 亦即 student 的有效群組將會轉成 slocate 這個群組名稱。然後, /var/lib/mlocate 是屬於 slocate 群組的, 而群組具有 r-x 的群線,因此,就在 student 操作 locate 時,就能夠取得 r-x 的權限來讀取 /var/lib/mlocate 的資料了!
[root@station10-101 ~]# ll -d /run/log/journal/ drwxr-sr-x+ 3 root systemd-journal 60 Feb 24 2023 /run/log/journal/屬於 systemd-journal 這個群組之外,權限設定為 SGID 喔!
[root@station10-101 ~]# touch /tmp/fromroot [root@station10-101 ~]# ll /tmp/fromroot -rw-r--r--. 1 root root 0 Feb 23 17:11 /tmp/fromroot既然是 root 處理的,當然帳號與群組都是屬於 root 的!大致上就是這樣!
[root@station10-101 ~]# touch /run/log/journal/fromroot [root@station10-101 ~]# ll /run/log/journal/fromroot -rw-r--r--+ 1 root systemd-journal 0 Feb 23 17:12 /run/log/journal/fromroot群組會變這樣!這就是 SGID 的能力!
[student@station10-101 ~]$ ll -d /tmp drwxrwxrwt. 16 root root 4096 Feb 23 17:11 /tmp可以看到其他人 (others) 在 x 權限的位置上,變成了 t 這個旗標了!
[student@station10-101 ~]$ su - 密碼: [root@station10-101 ~]# cd /tmp
[root@station10-101 tmp]# cp /etc/hosts myhosts [root@station10-101 tmp]# chmod 777 myhosts [root@station10-101 tmp]# ll myhosts -rwxrwxrwx. 1 root root 158 Feb 23 17:14 myhosts所以變成任何人都可以對這個檔案進行變更的情況喔!
[student@station10-101 ~]$ cd /tmp [student@station10-101 tmp]$ ll myhosts -rwxrwxrwx. 1 root root 158 3月 23 13:51 myhosts
[student@station10-101 tmp]$ vim myhosts
編輯完可以按下 :w 儲存沒問題!
[student@station10-101 tmp]$ rm myhosts
rm: 無法移除 'myhosts': 此項操作並不被允許
因為雖然 /tmp 權限有包含 777 在內,但是因為有 SBIT 的功能,因此 myhost 僅有 root 及檔案擁有者 (也恰巧是 root) 才能刪除。
所以 student 是沒有權限可以刪除的喔![student@station10-101 tmp]$ su - 密碼: [root@station10-101 ~]# cd /usr/local/bin [root@station10-101 bin]# cp /usr/bin/cat mycat2 [root@station10-101 bin]# chmod u+s mycat2 [root@station10-101 bin]# ll mycat2 -rwsr-xr-x. 1 root root 37464 Feb 23 17:19 mycat2 [root@station10-101 bin]# exit logout [student@station10-101 tmp]$ cat /etc/shadow cat: /etc/shadow: 拒絕不符權限的操作 [student@station10-101 tmp]$ mycat2 /etc/shadow root:$6$1sR2WQzGzLtoqnKA$gJXeZEYh5tOwZyhhzQgWPbhXvtCQhibDdlUbEo8nQEdaf5CZJ1b44OZpVPE1b7ZVTuynIT303BxNKi.XcEinW.::0:99999:7::: ......所以,一般帳號執行兩個相同功能的指令, cat 與 mycat2 時,其產生的效果就有顯著的不一樣啊!
[student@station10-101 ~]$ su - 密碼: [root@station10-101 ~]# cd /srv [root@station10-101 srv]# ll -d project1/ drwxrwx---. 2 root progroup 6 Feb 22 10:26 project1 [root@station10-101 srv]# chmod g+s project1/ [root@station10-101 srv]# ll -d project1 drwxrws---. 2 root progroup 6 Feb 22 10:26 project1 [root@station10-101 srv]# su - prouser1 [prouser1@station10-101 ~]$ cd /srv/project1/ [prouser1@station10-101 project1]$ touch fromme [prouser1@station10-101 project1]$ ll fromme -rw-r--r--. 1 prouser1 progroup 0 Feb 23 17:22 fromme [prouser1@station10-101 project1]$ exit logout這樣,任何『新建』的資料,其群組會與該目錄的群組相同!
[root@station10-101 ~]# cd ~prouser1 [root@station10-101 prouser1]# mkdir for_student [root@station10-101 prouser1]# chown prouser1:student for_student/ [root@station10-101 prouser1]# chmod 770 for_student/ [root@station10-101 prouser1]# chmod o+x ~prouser1 [root@station10-101 prouser1]# ll -d ~prouser1 ~prouser1/for_student/ drwx-----x. 5 prouser1 prouser1 132 Feb 23 17:24 /home/prouser1 drwxrwx---. 2 prouser1 student 6 Feb 23 17:24 /home/prouser1/for_student/ [student@station10-101 ~]$ ll /home/prouser1 ls: cannot open directory '/home/prouser1': 拒絕不符權限的操作 <==只有 x 權限,不能瀏覽也是正常的 [student@station10-101 ~]$ cd /home/prouser1/for_student <==沒有 r ,所以不能用 [tab] 補齊! [student@station10-101 for_student]$ pwd /home/prouser1/for_student [student@station10-101 for_student]$ touch abcd [student@station10-101 for_student]$ ll -rw-r--r--. 1 student student 0 Feb 23 17:26 abcd
[root@station10-101 ~]# cd ~prouser1 [root@station10-101 prouser1]# mkdir for_read [root@station10-101 prouser1]# chown prouser1 for_read [root@station10-101 prouser1]# chmod 755 for_read/ [root@station10-101 prouser1]# ll -d ~prouser1 ~prouser1/for_read/ drwx-----x. 5 prouser1 prouser1 134 Mar 23 14:55 /home/prouser1 drwxr-xr-x. 2 prouser1 root 6 Mar 23 14:55 /home/prouser1/for_read/
[student@station10-101 ~]$ nice -n 15 sh -c "sleep 60s; head -n 1 /etc/passwd"
[root@station10-101 ~]# ps -eo pid,pri,ni,comm | grep gdm 1520 19 0 gdm 2032 19 0 gdm-session-wor 2048 19 0 gdm-x-session 14712 19 0 gdm-session-wor 14743 19 0 gdm-x-session [root@station10-101 ~]# renice -n -20 -p 1520 1520 (process ID) old priority 0, new priority -20 [root@station10-101 ~]# ps -eo pid,pri,ni,comm | grep gdm 1520 39 -20 gdm 2032 19 0 gdm-session-wor 2048 19 0 gdm-x-session 14712 19 0 gdm-session-wor 14743 19 0 gdm-x-session