單純提供一個相對的解答,並不是標準答案!
單純就是個解答的參考,寫完之後再來這邊查查看答案跟你想的一樣不一樣!?
[student@station10-101 shm]$ su - 密碼: [root@station10-101 ~]# cd /dev/shm [root@station10-101 shm]# pwd /dev/shm
[root@station10-101 shm]# cp /etc/fstab . [root@station10-101 shm]# ll fstab -rw-r--r--. 1 root root 655 Feb 22 09:06 fstab
[root@station10-101 shm]# mv fstab newfs [root@station10-101 shm]# ll newfs -rw-r--r--. 1 root root 655 Feb 22 09:06 newfs # 如上所示,要注意的是,檔名改變了,其他則不變!
[root@station10-101 shm]# man chown CHOWN(1) User Commands CHOWN(1) NAME chown - change file owner and group SYNOPSIS chown [OPTION]... [OWNER][:[GROUP]] FILE... chown [OPTION]... --reference=RFILE FILE... DESCRIPTION ......事實上,常用的就有兩種語法,一種是透過『 owner:group 』來處理,一種則是透過參考其他檔案的資料來處理, 相當有趣!因此,如果想要直接一口氣就修改,也能這樣做:
[root@station10-101 shm]# id sshd uid=74(sshd) gid=74(sshd) groups=74(sshd) # 確認有此帳號 [root@station10-101 shm]# grep wheel /etc/group wheel:x:10: # 確認有此群組 [root@station10-101 shm]# chown sshd:wheel newfs [root@station10-101 shm]# ll newfs -rw-r--r--. 1 sshd wheel 655 Feb 22 09:06 newfs
[root@station10-101 shm]# chmod 640 newfs [root@station10-101 shm]# ll newfs -rw-r-----. 1 sshd wheel 655 Feb 22 09:06 newfs
[root@station10-101 shm]# date -d "yesterday 13:30" +%m%d%H%M 02211330 # 顯示出昨天時間的方式,所以上面的時間就是 2/21 13:30 的意思! [root@station10-101 shm]# ll newfs -rw-r-----. 1 sshd wheel 655 Feb 22 09:06 newfs <==修改前的時間 [root@station10-101 shm]# touch -t 02211330 newfs [root@station10-101 shm]# ll newfs -rw-r-----. 1 sshd wheel 655 Feb 21 13:30 newfs <==修改後的時間
[root@station10-101 shm]# ll newfs -rw-r-----. 1 sshd wheel 655 Feb 21 13:30 newfs [root@station10-101 shm]# chmod a+x newfs [root@station10-101 shm]# ll newfs -rwxr-x--x. 1 sshd wheel 655 Feb 21 13:30 newfs這樣就搞定了!同理,如果要讓這個檔案變成唯讀?則可以是『 chmod a-w filename 』這樣最快又方便!
[student@station10-101 ~]$ passwd student passwd: Only root can specify a user name. # 這種指令下達方式只有 root 可以使用,因此 student 下達這種指令方式,就會失敗! # 也就是說,這個指令根本沒有被執行啦! [student@station10-101 ~]$ passwd Changing password for user student. Current password: <==這裡則是按下 [ctrl]+c 結束! [student@station10-101 ~]$所以,只有 root 才能使用『 passwd 帳號 』的格式,其他用戶只能修改自己的密碼!直接輸入 passwd 即可!
[student@station10-101 ~]$ passwd 更改使用者 student 的密碼。 Current password: <==這裡輸入原本的 mystdgo 密碼 新 密碼: <==這裡輸入 123456 這個爛密碼 不良的密碼:密碼短於 8 個字元 <==還好,結果密碼不被接受! passwd: 驗證記號處理錯誤 [student@station10-101 ~]$ passwd 更改使用者 student 的密碼。 Current password: <==這裡輸入原本的 mystdgo 密碼 新 密碼: <==這裡輸入 password 這個爛密碼 不良的密碼:密碼無法通過字典比對檢查 - 根據辭典單字 passwd: 驗證記號處理錯誤 <==因為密碼是在字典單字內,所以不被接受也就是說,如果你的密碼設定的太爛,就不會被系統所接受,那就不能改密碼!所以,鳥哥一般的作法, 會讓使用者自己設定能接受的密碼,這樣密碼強度比較強,管理員自己也不用去幫使用者傷腦筋! 上面都是錯誤的!都沒有能夠修改密碼!
[student@station10-101 ~]$ passwd 更改使用者 student 的密碼。 Current password: <==這裡輸入原本的 mystdgo 密碼 新 密碼: <==這裡猜一個強密碼! 再次輸入新的 密碼: <==終於被接受!再次輸入剛剛的密碼 passwd:所有核對代符都已成功更新。
[student@station10-101 ~]$ passwd 更改使用者 student 的密碼。 Current password: <==這裡輸入剛剛設定的強密碼 新 密碼: <==這裡輸入 mystdgo 不良的密碼:密碼短於 8 個字元 passwd: 驗證記號處理錯誤因為 mystdgo 也並不是強密碼,至少密碼長度沒有超過 8 個字元,因此不被接受...所以,請用 root 的身份幫 student 修改回來才行!
[root@station10-101 ~]# passwd student Changing password for user student. New password: <==直接輸入 mystdgo 即可! BAD PASSWORD: The password is shorter than 8 characters Retype new password: <==再次輸入 mystdgo passwd: all authentication tokens updated successfully.看吧! root 很萬能,所以,如果耳根子太軟,幫人家設計比較不良的密碼,很容易出狀況!
[root@station10-101 ~]# useradd myuser2 [root@station10-101 ~]# passwd myuser2 Changing password for user myuser2. New password: BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word Retype new password: passwd: all authentication tokens updated successfully.
[root@station10-101 ~]# useradd myuser3 [root@station10-101 ~]# passwd myuser3 Changing password for user myuser3. New password: BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word Retype new password: passwd: all authentication tokens updated successfully.
[root@station10-101 ~]# id myuser2 uid=1001(myuser2) gid=1001(myuser2) groups=1001(myuser2) [root@station10-101 ~]# id myuser3 uid=1002(myuser3) gid=1002(myuser3) groups=1002(myuser3)可以看到 UID 數字從 1001 到 1002,都會增加一個號碼,同時 gid 也是一樣的情況。看起來的趨勢就是, 系統會自動的幫新的用戶的 uid 增加一個號碼的樣子。
[root@station10-101 ~]# ll -d /home/myuser* /var/spool/mail/myuser*
drwx------. 3 myuser2 myuser2 78 Feb 22 10:00 /home/myuser2
drwx------. 3 myuser3 myuser3 78 Feb 22 10:00 /home/myuser3
-rw-rw----. 1 myuser2 mail 0 Feb 22 10:00 /var/spool/mail/myuser2
-rw-rw----. 1 myuser3 mail 0 Feb 22 10:00 /var/spool/mail/myuser3
意思是,當建立新的用戶時:『系統會主動幫用戶在 /home 底下建立一個相同名稱的家目錄』,同時『在 /var/spool/mail/
底下,建立一個同名的新郵件檔案』的意思。同時注意權限喔!家目錄僅有使用者自己可以完整操作,其他人完全沒有權限。
新郵件檔案則是除了使用者自己與 mail 相關群組用戶之號,其他人也是不能亂看的!
[root@station10-101 ~]# userdel myuser2
[root@station10-101 ~]# ll -d /home/myuser* /var/spool/mail/myuser* drwx------. 3 1001 1001 78 Feb 22 10:00 /home/myuser2 drwx------. 3 myuser3 myuser3 78 Feb 22 10:00 /home/myuser3 -rw-rw----. 1 1001 mail 0 Feb 22 10:00 /var/spool/mail/myuser2 -rw-rw----. 1 myuser3 mail 0 Feb 22 10:00 /var/spool/mail/myuser3很明顯的可以發現,沒有加上 -r 的選項,會導致新建的檔案不會被刪除!此現象會讓舊的檔案存下來之後, 對照不到原本的帳號名稱,因此擁有者與擁有群組的欄位,就會顯示出之前該擁有帳號的 UID 與 GID 了!
[root@station10-101 ~]# useradd myuser2 useradd: warning: the home directory already exists. Not copying any file from skel directory into it. Creating mailbox file: File exists [root@station10-101 ~]# passwd myuser2 Changing password for user myuser2. New password: BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word Retype new password: passwd: all authentication tokens updated successfully. [root@station10-101 ~]# ll -d /home/myuser* /var/spool/mail/myuser* drwx------. 3 1001 1001 78 Feb 22 10:00 /home/myuser2 drwx------. 3 myuser3 myuser3 78 Feb 22 10:00 /home/myuser3 -rw-rw----. 1 1001 mail 0 Feb 22 10:00 /var/spool/mail/myuser2 -rw-rw----. 1 myuser3 mail 0 Feb 22 10:00 /var/spool/mail/myuser3 # 檔案並沒有正常的恢復!看起來 UID/GID 的部份有問題!來查看看: [root@station10-101 ~]# id myuser2 uid=1003(myuser2) gid=1003(myuser2) groups=1003(myuser2)
[root@station10-101 ~]# userdel -r myuser3 <==確實可以刪除 myuser3 [root@station10-101 ~]# userdel -r myuser2 userdel: user myuser2 is currently used by process 20486 # 因為剛剛在 tty4 登入 myuser2,尚未登出!趕緊去登出! [root@station10-101 ~]# userdel -r myuser2 userdel: /var/spool/mail/myuser2 not owned by myuser2, not removing userdel: /home/myuser2 not owned by myuser2, not removing # 意思是說,上面的兩個檔名並不屬於 myuser2,所以自然不能隨意刪除! [root@station10-101 ~]# ll -d /home/myuser* /var/spool/mail/myuser* drwx------. 3 1001 1001 78 Feb 22 10:00 /home/myuser2 -rw-rw----. 1 1001 mail 0 Feb 22 10:00 /var/spool/mail/myuser2 # 確實存在不同的 UID 之故! [root@station10-101 ~]# id myuser3 id: ‘myuser3’: no such user [root@station10-101 ~]# id myuser2 id: ‘myuser2’: no such user # 但是,事實上,這兩個帳號確實刪除了!
[root@station10-101 ~]# rm -rfv /home/myuser2 /var/spool/mail/myuser2 [root@station10-101 ~]# ll -d /home/myuser* /var/spool/mail/myuser* ls: cannot access '/home/myuser*': No such file or directory ls: cannot access '/var/spool/mail/myuser*': No such file or directory
[root@station10-101 ~]# id prouser1 uid=1001(prouser1) gid=1002(prouser1) groups=1002(prouser1),1001(progroup) [root@station10-101 ~]# usermod -G student prouser1 [root@station10-101 ~]# id prouser1 uid=1001(prouser1) gid=1002(prouser1) groups=1002(prouser1),1000(student)可以明顯的發現,原有的次要群組支援,從 progroup 變成 student 了!而不是預想的,兩者都會存在啊!
[root@station10-101 ~]# usermod --help
Usage: usermod [options] LOGIN
Options:
......
-G, --groups GROUPS new list of supplementary GROUPS
-a, --append append the user to the supplemental GROUPS
mentioned by the -G option without removing
the user from other groups
......
看起來,說是使用 -a 搭配 -G 的話,會有效的達成我們想要的需求!就是『累加額外的次要群組支援』之意![root@station10-101 ~]# id prouser1 uid=1001(prouser1) gid=1002(prouser1) groups=1002(prouser1),1000(student) [root@station10-101 ~]# usermod -a -G progroup prouser1 [root@station10-101 ~]# id prouser1 uid=1001(prouser1) gid=1002(prouser1) groups=1002(prouser1),1000(student),1001(progroup)所以,使用『 -a -G 次要群組 』這種選項模式,也是很重要的喔!
[student@station10-101 ~]$ cp /bin/more ~/bin/mymore [student@station10-101 ~]$ file ~/bin/mymore /home/student/bin/mymore: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=ce58f0a7ae8f98943b5177143936b17db72f6410, for GNU/Linux 3.2.0, stripped [student@station10-101 ~]$ mymore /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6主要就是將指令檔案放置到自己的家目錄底下的 bin 即可!
[student@station10-101 ~]$ id student uid=1000(student) gid=1000(student) groups=1000(student) [student@station10-101 ~]$ grep student /etc/group student:x:1000:prouser1確定這個群組是對的!
[student@station10-101 ~]$ su - 密碼: [root@station10-101 ~]# cd /srv [root@station10-101 srv]# mkdir mystudent [root@station10-101 srv]# ll -d mystudent/ drwxr-xr-x. 2 root root 6 Feb 22 10:32 mystudent/建立成功,但是權限不太對勁!
[root@station10-101 srv]# chown .student mystudent/ [root@station10-101 srv]# ll -d mystudent/ drwxr-xr-x. 2 root student 6 Feb 22 10:32 mystudent/除了 chgrp 之外,其實 chown 也能改群組的!相當有趣!
[root@station10-101 srv]# chmod 775 mystudent/ [root@station10-101 srv]# ll -d mystudent/ drwxrwxr-x. 2 root student 6 Feb 22 10:32 mystudent/
[root@station10-101 srv]# ll -d /etc/chrony.keys
-rw-r-----. 1 root chrony 540 Dec 16 2021 /etc/chrony.keys
(1)擁有者為 root,(2)擁有群組為 chrony,權限是 640 喔!
[root@station10-101 srv]# id chrony
uid=986(chrony) gid=981(chrony) groups=981(chrony)
看起來 chrony 確實加入了 chrony 群組,因此對於這個檔案具有可讀的權限,但是不能寫入與不能執行![root@station10-101 srv]# groupadd thegroup [root@station10-101 srv]# useradd -G thegroup theuser1 [root@station10-101 srv]# useradd -G thegroup theuser2 [root@station10-101 srv]# useradd -G thegroup theuser3 [root@station10-101 srv]# echo "thisgroup" | passwd --stdin theuser1 Changing password for user theuser1. passwd: all authentication tokens updated successfully. [root@station10-101 srv]# echo "thisgroup" | passwd --stdin theuser2 Changing password for user theuser2. passwd: all authentication tokens updated successfully. [root@station10-101 srv]# echo "thisgroup" | passwd --stdin theuser3 Changing password for user theuser3. passwd: all authentication tokens updated successfully. [root@station10-101 srv]# id theuser1 uid=1004(theuser1) gid=1006(theuser1) groups=1006(theuser1),1005(thegroup) [root@station10-101 srv]# id theuser2 uid=1005(theuser2) gid=1007(theuser2) groups=1007(theuser2),1005(thegroup) [root@station10-101 srv]# id theuser3 uid=1006(theuser3) gid=1008(theuser3) groups=1008(theuser3),1005(thegroup)最後用 id 去確認一下每個帳號是否順利支援了 thegroup 群組!
[root@station10-101 srv]# id theuser1
uid=1004(theuser1) gid=1006(theuser1) groups=1006(theuser1),1005(thegroup)
注意,有多了 theuser1 這個群組,群組 gid 為 1006 喔![root@station10-101 srv]# userdel theuser1 [root@station10-101 srv]# ll -d /home/theuser1 drwx------. 3 1004 1006 78 Feb 22 10:37 /home/theuser1確定只有剩下 UID 與 GID 而已!
[root@station10-101 srv]# groupadd -g 1006 theuser1 [root@station10-101 srv]# useradd -u 1004 -g theuser1 -G thegroup theuser1 useradd: warning: the home directory already exists. Not copying any file from skel directory into it. Creating mailbox file: File exists # 使用剛剛紀錄的 uid 與 gid 重建群組與帳號!但是目錄並沒有重新建立,因為舊的檔案已經存在! [root@station10-101 srv]# ll -d /home/theuser1 drwx------. 3 theuser1 theuser1 78 Feb 22 10:37 /home/theuser1所以,看到正確的權限了!這代表這個帳號又回復了!
[root@station10-101 srv]# mkdir /srv/thegroup [root@station10-101 srv]# chgrp thegroup /srv/thegroup [root@station10-101 srv]# chmod 775 /srv/thegroup/ [root@station10-101 srv]# ll -d /srv/thegroup/ drwxrwxr-x. 2 root thegroup 6 Feb 22 10:41 /srv/thegroup/
[root@station10-101 srv]# cp /sbin/ifconfig /usr/local/sbin/myif [root@station10-101 srv]# chgrp thegroup /usr/local/sbin/myif [root@station10-101 srv]# chmod 550 /usr/local/sbin/myif [root@station10-101 srv]# ll /usr/local/sbin/myif -r-xr-x---. 1 root thegroup 81384 Feb 22 10:42 /usr/local/sbin/myif