第 10 堂課:使用者管理與 ACL 權限設定

10.1.1:Linux 帳號之 UID 與 GID

密碼的過期狀態分析:

  1. 建立一個名為 check 的帳號,密碼設定為 check123
  2. 請使用『 chage -d 0 check 』讓這個帳號的密碼建置日期強迫歸零,亦即強迫該帳號密碼過期。
  3. 當密碼過期後,check 這個帳號登入系統會有什麼應該要進行的任務?
要重新設定check這個user的密碼

查詢 find 的選項,嘗試找出系統中『不屬於任何人』的檔案檔名(不見得存在)

find -nouser / 2> /dev/null

有一個 /etc/shadow 內的資料如下,嘗試回答下列問題:
student:$6$3iq4VYrt$Hg62ID...RVbE/:16849:5:180:7:::

  1. 這個帳號的密碼最近一次被修改的日期為何 (查詢 date 的 example 用法)
  2. 這個帳號的密碼在那一個日期以前不可以被修改?
  3. 這個帳號的密碼在那一個日期以內最好能夠被修改?
  4. 這個帳號是否會失效?
#1
date -d "1970-01-01 16489 days" +"%Y-%m-%d"

-------------------------------------------
2015-02-23

#2
五日內不能修改,所以是228吧

#3
date -d "1970-01-01 16494 days" +"%Y-%m-%d"

-------------------------------------------
2015-02-28

date -d "1970-01-01 16669 days" +"%Y-%m-%d"
-------------------------------------------
2015-08-22

2015-02-28 到 2015-08-22 能修改

#4
不會,沒有失效日期

10.1.2:帳號與群組管理

例題:嘗試使用 passwd 這個指令完成如下的任務:

  1. 使用 passwd 這個指令觀察 testuser1 的密碼狀態
  2. 設定密碼存活時間從 99999 改為 180 天
  3. 設定警告期限從 7 天改為 14 天
  4. 暫時將這個帳號的密碼鎖定,讓這個帳號無法登入系統
#1
passwd -S testuser1

#2
passwd -x 180 testuser1

#3
passwd -w 14 testuser1

#4
passwd -l testuser1

例題:嘗試使用 chage 以及 usermod 完成如下任務 (不要使用 passwd 喔!)

  1. 使用 chage 這個指令觀察 testuser1 的密碼狀態
  2. 使用 chage 設定密碼存活時間從 180 改為 365 天
  3. 使用 chage 設定警告期限從 14 天改為 30 天
  4. 使用 usermod 將這個帳號的密碼放行,讓這個帳號可以登入系統
#1
chage -l testuser1

#2
chage -M 365 testuser1

#3
chage -W 30 testuser1

#4
usermod -U testuser1

10.1.3:bash shell script 的迴圈控制

例題:使用下列的功能建置名為 account.sh 的指令來大量建置帳號

  1. 建立一個名為 users.txt 的檔案,內容填寫三行,每行一個帳號名稱 (假設帳號為 linuxuser1~linuxuser3)
  2. 在 account.sh 當中,依序處理如下的行為:
    1. 建立名為 users 的變數,這個變數的內容為取出 users.txt 的內容
    2. 建立 for 迴圈,建立名為 username 的變數,此變數取用 ${users} 的內容
    3. 在迴圈內,針對每個用戶進行 (1)建立帳號 (2)使用 passwd --stdin 建立同帳號名稱的密碼 (3)使用 chage -d 0 ${username} 強制使用者第一次登入時需要修改自己的密碼。
#1
vi ~/temp/users.txt

-------------------------------
linuxuser1
linuxuser2
linuxuser3

#2
vi ~/temp/account.sh

------------------------------------------------------
#!/bin/bash

users=$(cat ~/temp/users.txt)
for username in ${users}
do
    echo "useradd ${username}"
    useradd ${username}
    echo "passwd --stdin ${username}"
    passwd --stdin ${username}
    echo "chage -d 0 ${username}"
    chage -d 0 ${username}
done
------------------------------------------------------

chmod a+x ~/temp/users.txt
sh ~/temp/users.txt

10.1.4:預設權限 umask

嘗試說明為何 root 在新建資料時,預設權限會是 755(目錄) 與 644(檔案)?

目錄會給5的原因,是要給其他人瀏覽目錄跟進入目錄的權限,但是不給修改的權限。
檔案會給4的原因,是要給其他人瀏覽檔案內容的權限,但是不給修改,因為不確定檔案是否可以執行,所以都不先給x權限

10.2:多人共管系統的環境:用 sudo

  1. 如何讓 student 這個帳號可以執行 sudo 來轉換身份成為 root 進行系統管理?
  2. 利用 student 身份操作 sudo ,進行 grep student /etc/shadow 的行為
  3. 讓 student 操作 su - 時,輸入的是自己的密碼而非 root 密碼
vi /etc/sudoers


-----------加上這行---------------
student    ALL=(ALL)       ALL

  1. 測試一下 linuxuser1 能否操作 sudo 指令達成 tail /etc/shadow 任務?
  2. 將 linuxuser1 加入 wheel 群組
  3. 再重新測試第 1 點任務。
#1
不行

#2
usermod -aG wheel linuxuser1

#3
可以

10.3.1:什麼是 ACL 與如何支援啟動 ACL

例題:(請注意,因為 xfs 預設已經啟動 ACL,且掛載參數不支援 acl,故使用 ext4 檔案系統解釋)

  • 建立一個新的大約有 500M 容量的 ext4 檔案系統,開機後預設掛載到 /data/ext4 目錄內
  • 同時強迫這個 ext4 檔案系統加上 ACL 的參數掛載。
  • 測試完畢後,請刪除此檔案系統喔!
//TODO 牽扯到硬體 暫時掠過

10.3.2:ACL 的設定技巧

例題:

  1. 有兩個群組需要建立,一個是老師的 myteacher 一個是學生的 mystudent,兩個群組建立時,請使用系統帳號的群組 GID 號碼範圍
  2. 兩個群組各有三個人,分別是 myteacher1 ~ myteacher3 以及 mystudent1 ~ mystudent3,請使用預設的情況建立好這六個帳號,同時注意, 六個人都需要有個別的次要群組支援
  3. 六個人的密碼均是 password 喔!
#1
groupadd -r myteacher
groupadd -r mystudent

#2
useradd -p password -G myteacher myteacher1
useradd -p password -G myteacher myteacher2
useradd -p password -G myteacher myteacher3

useradd -p password -G mystudent mystudent1
useradd -p password -G mystudent mystudent2
useradd -p password -G mystudent mystudent3

例題:

  1. mystudent1 ~ mystudent3 需要有共享目錄,該目錄名稱 /srv/myshare ,同時,除了 mystudent 具有完整的權限之外,其他人不可有任何權限。
  2. 由於 myteacher 的群組是老師,老師們需要進入 /srv/myshare 查閱學生的進度,但是不可干擾學生的作業,因此應該要給予 rx 的權限才對
  3. 但由於 myteacher3 並不是這個班級的老師,因此這個老師帳號不可以進入該目錄。
#1
mkdir /srv/myshare
setfacl -m g:mystudent:rwx /srv/myshare

#2
setfacl -m g:myteacher:rx /srv/myshare

#3
setfacl -x u:myteacher3 /srv/myshare

10.4:課後練習操作

請回答底下問答題,答案請寫入 /root/ans10.txt 當中:

  1. 一般我們在建立 linux 帳號時,哪三個檔案會記錄這個帳號的 UID, GID, 支援群組, 密碼等資訊?
  2. 一般帳號被建立後(假設帳號名稱為 myusername),基本上會有哪一個目錄與哪一個檔案會被建立?
  3. 若設定 umask 033 後,新建的檔案與目錄權限各為幾分?
  4. 在 /etc /var 與 /usr 裡面,各有一個不屬於任何人的檔案,請將檔案的完整檔名找出來,並寫下來
#1
UID: /etc/passwd
GID: /etc/passwd 與 /etc/group
Group: /etc/group
Password: /etc/shadow

#2
家目錄跟Email目錄

#3
目錄權限為777 扣掉 033 => 744
檔案權限為666 扣掉 033 => 633

#4
find /etc /var /usr -nouser

建立一個名為 /root/myaccount.sh 的大量建立帳號的腳本,這個腳本執行後,可以完成底下的事件:

  1. 會建立一個名為 mygroup 的群組
  2. 會依據預設環境建立 30 個帳號,帳號名稱為 myuser01 ~ myuser30 共 30 個帳號,且這些帳號會支援 mygroup 為次要群組
  3. 每個人的密碼會使用【 openssl rand -base64 6 】隨機取得一個 8 個字元的密碼, 並且這個密碼會被記錄到 /root/account.password 檔案中,每一行一個,且每一行的格式有點像【myuser01:AABBCCDD】
vi /root/myaccount.sh

--------------------------------------------------------------------------------------

#!/bin/bash
groupadd mygroup
for user in $(seq 1 30)
do
    username="myuser${user}"
    userpass=$(openssl rand -base64 6)
    useradd -s /sbin/nologin -p ${userpass} -G mygroup ${username}
    echo "$username : $userpass" >> /root/account.password
done
--------------------------------------------------------------------------------------

chmod a+x /root/myaccount.sh
sh /root/myaccount.sh

有個名為 gooduser 的帳號不小心被刪除了,還好,這個帳號的家目錄還存在。 請依據這個提示,重建這個帳號 (記住,UID與GID應該要回復到原本尚未被刪除前的狀態),且該用戶的密碼設定為 mypassword, 同時,這個帳號請重新設定為可以使用 sudo 的!

adduser -u ${原先的UID} -g ${原先的gid}  -p mypassword gooduser

vi /etc/sudoers

-----------加上這行---------------
gooduser    ALL=(ALL)       ALL

由於你管理的系統需要有專題群組的夥伴共同使用系統,因此你將這些專題夥伴加入同一個次要群組支援!

  1. 專題群組的名稱設為: myproject
  2. 專題組員的名稱分別為: mypro1, mypro2, mypro3,且這三個帳號都加入了 myproject 群組的次要支援
  3. 這三個帳號的密碼均為 MyPassWord
  4. 這個專題組員可共用 /srv/mydir 目錄,其他人則沒有任何權限
#1 #2 #3
groupadd myproject
useradd -G myproject -p MyPassWord mypro1
useradd -G myproject -p MyPassWord mypro2
useradd -G myproject -p MyPassWord mypro3

#4
mkdir /srv/mydir
chmod 000 /srv/mydir
setfacl -m g:myproject:rwx /srv/mydir

由於你幫學校老師管理 FTP 伺服器,這個伺服器的使用者不能提供可登入系統的 shell,但是可以使用 FTP 與 email 等網路服務:

  1. 帳號名稱為: ftpuser1, ftpuser2, ftpuser3,這三個帳號可以使用 ftp 網路功能,但是不能在系統前登入 tty 或使用終端機登入系統;
  2. 這三個帳號的密碼均為 MyPassWord
useradd -s /sbin/nologin -p MyPassWord ftpuser1
useradd -s /sbin/nologin -p MyPassWord ftpuser2
useradd -s /sbin/nologin -p MyPassWord ftpuser3

:建立一個名為 mysys1 的系統帳號,且這個系統帳號 (1)不需要家目錄 (2)給予 /sbin/nologin 的 shell (3)也不需要密碼

useradd -s /sbin/nologin -M mysys1

sudo passwd -d mysys1

修改新建帳號的預設資訊

  1. 讓未來新建的用戶,其家目錄預設都會有一個名為 web 的子目錄存在?
  2. 讓新建用戶的 history 預設可以記憶 5000 筆記錄(已存在帳號不受影響)
  3. 讓新建帳號的 shell 將使用 /sbin/nologin
cd /etc/skel 
mkdir bin
vim /bin/.bashrc

-----------加上這幾行-------------

HISTSIZE=5000
HISTFILESIZE=5000
SHELL=/sbin/login

#應該不能新建web子目錄

特別目錄的權限應用:

  1. 剛剛建立的 /srv/mydir 目錄,在不更改原有的權限設定下 (因為原本就是給 myproject 群組用的), 現在,要讓加入 users 群組的帳號們,也能夠進入該目錄查閱資料 (只能進入與查閱,不能寫入),該如何處置?
  2. 那個 gooduser 的帳號,其實是老師的帳號,在不更改既有權限的情況下, gooduser 也需要能夠進入該目錄做任何事情, 且未來在 /srv/mydir 所新建立的任何檔案(或目錄)資料,gooduser 也能夠進行任何動作。(hint:就是有預設值的意思)
#1
setfacl -m g:users:rx /srv/mydir

#2
setfacl -m u:goodusr:rwx /srv/mydir

results matching ""

    No results matching ""