用戶身份
? ? ? ??root用戶是存在于所有類UNIX操作系統中的超級用戶,它擁有最高的系統所有權。root用戶的用戶身份號碼UID為0,UID相當于用戶的身份證號碼一樣,具有唯一性。管理員用戶(超級用戶)UID為0;系統用戶UID為1~999(不同的系統不一樣),Linux系統為了避免因某個服務程序出現漏洞而被黑客提權至整個服務器,默認服務會有獨立的系統用戶負責運行,進而有效控制被破壞的范圍(windows是單用戶操作系統,一旦該用戶被入侵,則有權限對整個環境進行操作),系統用戶只是用來管理某一項具體的服務,因此不需要登陸該系統服務器中,其終端解釋器為/sbin/nologin,因此該用戶被入侵時,并不能提權至整臺服務器;普通用戶的UID從1000開始(即使前面有閑置的號碼),是由管理員創建的日常工作的用戶。
? ? ? ? 用戶組分為基本用戶組(-g)和擴展用戶組(-G)。用戶組身份號碼GID可以把多個用戶加入到同一個組中,從而方便為組中的用戶統一規劃權限或指定任務。創建每個用戶時,將自動創建一個與其同名的基本用戶組,而且這個基本用戶組只有該用戶一個人。如果該用戶被納入其它用戶組,則這個其它用戶組稱之為擴展用戶組。一個用戶只能擁有一個基本用戶組,可以擁有多個擴展用戶組。 用id命令可以查看:用戶的用戶身份號碼(用戶名);基本用戶組身份號碼(基本用戶組名);擴展用戶組身份號碼(擴展用戶組名)。在默認情況下,基本用戶組名與用戶名一樣,除非自己指定。
? ? ? ? ?useradd命令 ?用于創建新的普通用戶,該命令創建的用戶目錄默認會存放在/home目錄中,默認的shell解釋器為/bin/bash,而且會默認創建一個與其同名的基本用戶組。 ?-d 指定家目錄 ?-u指定用戶的UID ?-g指定一個基本用戶組(必須是存在的組,沒有就要創建) ?-G指定擴展用戶組 ? -N不創建與用戶同名的基本用戶組 ?-s指定用戶的shell解釋器 ? useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe ?創建了一個名為linuxprobe的用戶 ? # id linuxprobe ?輸出為:uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe) ?此時用戶只有基本用戶組(名字為linuxprobe),沒有擴展用戶組 ? ?
? ? ? ? ?groupadd命令 ?用于創建組(基本或者擴展) ? ?groupadd zsx ? ? 創建一個名為zsx的組
? ? ? ? ?usermod命令 ?修改用戶的屬性 ?用戶的信息保存在/etc/passwd文件中,可以直接用文本編輯器來修改其中的用戶參數項目,也可以用usermod命令來修改已經創建的用戶信息,如用戶的UID、基本/擴展用戶組、默認終端等。-g 變更基本用戶組 ? -G 變更擴展用戶組 ? -s變更默認終端? ?-u修改用戶的UID? ? ?usermod -G root linuxprobe 增加擴展用戶組root, 則id查看信息為: uid = 8888 (linuxprobe)? gid=8888? (linuxprobe)? groups=8888(linuxprobe),0(root) ? 可見其擴展用戶組名為root,擴展用戶組身份號碼為0。這里在次變更: usermod -G zsx linuxprobe ?變為: ?uid=8888(linuxprobe)? gid= 8888 (linuxprobe)??? groups = 8888(linuxprobe) ,1001(zsx)
? ? ? ? passwd命令? ? passwd命令用于修改用戶的密碼,格式:passwd ?用戶名 ?僅僅只有passwd,則為修改自己的密碼。? ?-l 鎖定用戶,禁止其登陸 ? -u解除鎖定,允許其登陸 ? passwd -l luciusvorenus ? ?--stdin 允許通過管道符方式來設定用戶密碼 ? ? echo "zsx" | passwd --stdin luciusvorenus?
? ? ? ? userdel命令 刪除用戶 ? userdel linuxprobe 刪除該用戶,但是家目錄/home/linuxprobe會保留下來,可添加-r參數,連同家目錄一起刪除 ? ?-f 強制刪除用戶
文件權限與歸屬
? ? ? ? -為普通文件(一般文件、文本文件);d為目錄文件;l為軟鏈接文件;b為塊設備文件;c為字符設備文件(設備文件為硬件映射形成的文件,如硬盤等);p為管道文件;s為socket文件。
? ? ? ? 文件的所有者(所屬主)、所屬組和其它用戶對該文件所擁有的可讀(r,4)、可寫(w,2)和可執行(x,1)等權限。對目錄文件來說,可讀表示能夠讀取目錄內的文件列表;可寫表示能夠在目錄內新增、刪除和重命名 文件;可執行表示能夠進入該目錄。 文件的權限表示:rwxrw-r-- ?用數字表示則為: 764? ? ?-rwxr--r--. 1 root root 206 Sep 29 21:24 ex.sh? ? 該文件為普通文件,所屬主(所有者)為root用戶,擁有7權限;所屬組為root,擁有4權限;其他用戶擁有權限4。所屬主前面的數字1代表該文件的硬鏈接數(即實際指針的文件個數,軟鏈接不算)為1個。該文件的磁盤占用大小為206個字節,最后一次修改的時間為9月29日的21:24分,文件的名稱為ex.sh。
SUID特殊權限位(u+s)
? ? ? ? SUID、SGID和SBIT的特殊權限位,是一種對文件進行設置的特殊功能,可以與一般權限同時使用,以彌補一般權限不能實現的功能。SUID擁有權限4,SGID擁有權限2,SBIT擁有權限1。rwsrwSrw-用數字表示為:其一般權限為rwxrw-rw-,即為766,載加上特殊權限,則為6766。第一個6為4+2。SUDI特殊權限位僅對擁有執行權限的二進制程序有效,即當用戶執行該二進制程序時,可以臨時擁有該二進制程序所屬主(所有者)的身份。對于/etc/passwd ?-rw-r--r--. 1 root root 1926 Sep 29 21:50 /etc/passwd? ? ?除了root管理員之外,其余所有用戶都只能讀取該文件信息,不能修改;對于/etc/shadow(保存了用戶的密碼)
----------. 1 root root 1990 Sep 29 18:48 /etc/shadow ?除了root用戶外,其余任何用戶都不能讀取、修改該文件; 對于passwd命令文件:-rwsr-xr-x. 1 root root 27832 Jan 29 ?2014 /bin/passwd ?該文件是二進制程序文件,所有用戶都可以執行該文件,因此任何一個用戶執行該文件時,都會臨時獲得該文件所屬主的身份,即root身份,進一步利用該身份可以取修改/etc/shadow和/etc/passwd文件的信息了(把變更的密碼信息寫到/etc/shadow文件中)。 rwx變為rws ?rw-變為rwS ?后面一樣 rwt ?rwT
SGID特殊權限位(g+s)
? ? ? ? SGID特殊權限位實現兩種功能:1.讓執行者臨時擁有屬組的權限(身份)(僅對擁有執行權限的二進制程序有效);2.對目錄文件進行設置時,在該目錄文件中創建的文件自動繼承該目錄的用戶組(只可以對目錄設置)。對于/dev/kmem文件(早期的linux系統才會有):cr--r----- 1 root system 2, 1 Feb 11 2017 kmem ?該文件為字符設備文件,只有root用戶和system組內的用戶才可以讀取該文件,其余用戶不能訪問。ps命令文件: ? ?-rwxr-sr-x. 1 bin system 100120 Feb 27 ?2014 /usr/bin/ps ?該文件為二進制程序,當任何一個用戶執行該文件時,可以臨時獲得所屬組的身份(system),從而可以讀取kmem文件中的信息,獲得系統中所有進程的狀態信息。利用SGID特殊權限位,可以為一個部門內部所有用戶設置一個共享目錄,即首先將所有用戶劃分為一個組,然后設置這個目錄的用戶組就為該部門成員所在的那個組:# mkdir /tmp/haha ? ? ? drwxrwxr-x. 2 root root 6? Mar ?5 15:46 haha? 可以看出該目錄文件的用戶組為root,則root組內的用戶都可以該目錄讀、寫和執行。賦予該目錄SGID特殊權限位: chmod g+s /tmp/haha ? 則:drwxrwsr-x. 2 root root 6 Mar ?5 15:46 haha ?則root組內任何一個用戶在該目錄內部創建文件時,創建的文件的所屬組都為root,從而該文件能夠被組內所有用戶訪問,即實現了組內用戶的共享目錄。 ? 注意:在對目錄設置SGID權限之前目錄內的所有文件的所屬組在設置SGID權限后不會發生變化。比如:chown root:bin /tmp/haha ? 此后,創建的文件的所屬組為bin ?之前的文件依然為root ? ?在默認情況下,一個用戶創建的文件的所屬主為該用戶,所屬組為該用戶的基本用戶組。一個用戶的基本用戶組只有該用戶一個成員,且默認情況下組名與用戶名相同。 ?當創建或傳送一個文件,這個文件的所屬主就為執行這個操作的用戶。
chmod和chown命令
? ? ? ? chmod命令用于設置一個文件的權限位,包括一般權限和特殊權限。對于文件zs,所有者可讀可寫可執行,對于所屬組可讀可寫,對于其它用戶沒有任何權限,即rwxrw----,其對應的數字為760,則:chmod 760 zs ?要設置為:rwsrw----,則: chmod 4760 zs chown命令用于設置文件的所有者和所屬組。其格式為:chown ?所有者:所屬組 文件或目錄名稱? ?chown bin:root zs ?設置zs文件的所有者為bin,所屬組為root ?
? ? ? ? SUID特殊權限位的設置: chmod ?u+s 文件名稱(僅對可執行的二進制程序文件有效)
? ? ? ? SGID特殊權限位的設置: chmod ?g+s 文件名稱(僅對可執行的二進制程序文件有效)
? ? ? ? ? ? ? ? ? ? ? ?chmod ?g+s 目錄名稱(僅對目錄文件有效)
? ? ? ? SBIT特殊權限位的設置: chmod ?o+t 目錄名稱
共性:chmod與chown命令在對目錄文件進行操作時,加上-R參數表示遞歸操作,即對目錄內所有的文件進行整體操作。不加-R參數,只是對目錄進行設置。
u 代表所屬主 ?g代表所屬組 ?o代表其它用戶 a代表全部用戶, 如 chmod u+x ex.sh 表示對ex.sh文件的所屬主增加執行權限(x)。 ?r w x s t 也可以用字母指明,可以不用數字 ? chmod +x file 和 chmod a+x file等價。
SBIT特殊權限位(o+t) ?僅對目錄設置
? ? ? ? 對于一個共享目錄,在設置了SGID特殊權限位后,該目錄及目錄內部創建的所有文件的用戶組都為該部門成員。為了防止一個人的文件被其他用戶刪除,則可以設置SBIT特殊權限位。SBIT特殊權限位可以確保用戶只能刪除自己的文件,不能刪除他人的文件(root用戶除外),即只能被文件的所有者執行刪除操作。?如RHEL7系統中的/tmp為一個共享目錄,默認已經設置好了SBIT特殊權限位:?drwxrwxrwt. 61 root root 4096 Oct ?6 22:35 /tmp? ? ?則,在該目錄中創建的文件只能夠被該文件的所有者和root用戶刪除,其余人都沒有權限刪除。 即使該文件的權限最大(777),且目錄允許進行讀、寫和執行,但還是無法刪除該文件。
? ? ? ? 另外需要注意,一個文件能否被刪除不取決于自身的權限,而取決于其所在目錄是否有寫入權限。如 /tmp/haha目錄: drwxr-sr-x. 2 root root 16 Mar ?5 16:18 haha ?可見對與該文件,只有root用戶有寫入權限,即新增、重命名和刪除目錄內的文件,其它任何用戶都不能在該目錄內部創建、刪除或者重命名文件,只能進入該目錄和讀取該目錄內部的文件列表。 ?chmod 775 haha ? 則:drwxrwsr-x. 2 root root 6 Mar ?5 16:43 haha ? 則此時root組內成員增加了寫權限,而賬戶zsx為root組內成員,此時zsx用戶可以在目錄內部新增、重命名和刪除文件。 ? 綜上,對文件的刪除、新增和重命名并不取決于文件本身,而是取決于文件所在的目錄。? ? ?chmod o+t /tmp/zsx
文件的隱藏權限
? ? ? ? 文件被隱藏起來的權限,默認情況下不能被用戶察覺。
? ? ? ? chattr命令用于設置(增加或刪除)文件的隱藏權限: chattr +參數 filename 增加隱藏權限 ?chattr -參數? filename 刪除隱藏權限 ? ?i 無法對文件進行修改(本身無法刪除,內容無法修改),對于目錄文件,僅能修改其中的子文件內容,不能新建或刪除文件。 ?a 僅允許補充(追加)內容,不能覆蓋/刪除內容,也不能刪除該文件或對文件重命名。 ? ? chattr +a zs 此時zs文件所在的目錄即使開放了用戶可以刪除文件的權限,但是該文件依然不能刪除,因為設置了隱藏權限。 移出: chattr -a zs? ? ? lsattr filename 用于查看文件的隱藏權限 ?ls命令是無法查看文件的隱藏權限的。
文件訪問控制列表ACL
? ? ? ? 用于對某個指定的用戶(u)或用戶組(g)進行單獨的權限設置,基于普通文件或者目錄文件設置ACL其實就是針對指定的用戶或用戶組設置文件或目錄的操作權限。如果針對目錄設置了ACL且采用了-R參數,則目錄中的文件會繼承其ACL;若針對文件設置了ACL,則文件不再繼承其所在目錄的ACL。
? ? ? ? setfacl命令 用于設置文件的ACL(文件訪問控制列表),對于普通文件采用-m參數即可;對于目錄文件若采用-m參數,則僅僅只是對目錄文件進行ACL的設置,對目錄內的其余文件沒有影響(注意,必須清晰目錄權限與目錄內部文件的權限之間的區別與聯系,嚴格遵守),若采用-Rm參數,則對目錄和目錄內部所有文件都設置ACL,即對于某個特定的用戶或用戶組有哪些權限,如果目錄內部已經有文件設置了ACL,則該文件不再繼承目錄的ACL。setfacl -b filename 用于刪除對文件已經設置好了的ACL。下面示例:
setfacl -m u:zsx:rx /root?
setfacl -Rm u:zsx:rwx /root/work/ ? ? ?對/root/work目錄設置ACL u指定用戶 g指定用戶組?
getfacl guess.sh ? ? ? ? guess.h文件是該目錄內部的文件,可見該文件繼承了目錄的ACL
# file: guess.sh ? 文件名
# owner: root ? ? 所屬主
# group: root ? ?所屬組
user::rw- ? ?
user:zsx:rwx
group::r--
mask::rwx ? 有效權限
other::r--
注意:zsx用戶要能進入到/root/work目錄,還必須對/root目錄也要設置ACL(上面第一條),若只是
對/root/work目錄進行設置,仍然進入不了該目錄。
getfacl /root/
# file: root/
# owner: root
# group: root
user::r-x
user:zsx:r-x
group::r-x
mask::r-x ??
other::---
getfacl /root/Desktop/
# file: root/Desktop/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x ? 可見目錄Desktop/并沒有繼承目錄/root的ACL,因為上面沒有使用-R參數
setfacl -b /root/
getfacl /root/
# file: root/
# owner: root
# group: root
user::r-x
group::r-x
other::--- ? 可見已經刪除了ACL
setfacl -m g:wheel:rwx work/ ? 針對wheel用戶組設置權限
getfacl work/
# file: work/
# owner: root
# group: root
user::rwx
group::r-x
group:wheel:rwx
mask::rwx
other::r-x
? ? getfacl命令 可以查看文件的所屬主、所屬組、各種權限和ACL權限。如查看/root目錄:
getfacl /root/
# file: root/
# owner: root
# group: root
user::r-x ?所屬主權限
group::r-x ?所屬組權限
other::--- ? 其它用戶權限
如查看/root/work/:
getfacl work/
# file: work/
# owner: root
# group: root
user::rwx
group::r-x
group:wheel:rwx?
mask::rwx ? ?有效權限 ?
other::r-x
dr-xr-x---+ 17 root root 4096 Mar ?5 15:12 /root 采用ls命令可以查看文件是否設置了ACL,.號會變為+號。但是這也不是絕對的,如果文件的ACL是繼承了目錄的,那么用ls命令查看其屬性依然為.號,因此查看一個文件是否設置ACL,最準確的方法是使用getfacl命令。注意:某個用戶或用戶組的權限并不是只根據ACL配置來決定的,它是由該用戶或用戶組基本權限與配置的ACL權
限的“與”運算決定的,即other:r-x 與 wheel:rwx = wheel:r-x ?即實質上wheel組內的用戶對該目錄(上面的/root/work/目錄)只有讀和執行權限。對于有效權限mask:用戶或組所設置的權限必須要存在于mask的權限設置范圍內才會生效,否則無效。設置mask
的方法: setfacl -m m:w ?filenanme ?即設置文件filename的有效權限mask為w(寫)。
su命令與sudo服務(visudo)
? ? ? ? su命令可以解決切換用戶身份的要求。 su與su -是有區別的,前者只是切換了身份,但Shell環境仍然是原來用戶的Shell(環境不變);而后者連用戶和Shell環境一起切換成新用戶身份了。只有切換了Shell環境才不會出現PATH環境變量錯誤。
? ? ? ? sudo命令可以把特定命令的執行權限賦予給指定用戶,這樣既可以保證普通用戶完成特定的工作,又可以避免密碼的泄漏。sudo服務的配置原則:在保證普通用戶完成工作的前提下,應當盡量少賦予額外的權限。格式:sudo ?命令名稱 ?
? ? ? ? sudo命令具有如下功能:限制用戶執行指定的命令;記錄用戶執行的每一條命令;配置文件/etc/sudoers提供集中的用戶管理、權限與主機等參數;驗證密碼的后5分鐘內(默認值)無需再讓用戶再次驗證密碼。
? ? ? ? 對于/etc/sudoers文件:-r--r-----. 1 root root 4000 Jan 15 ?2014 /etc/sudoers ?可以看出,只有只有管理員用戶才可以對該配置文件進行修改,管理員和root組用戶可以對該文件查看。 ? ? ? ?sudo命令文件:---s--x--x. 1 root root 130712 Feb 26 ?2014 /usr/bin/sudo 該文件具有SUID特殊權限位,即任何用戶利用sudo命令都可以臨時獲得root管理員的身份,從而可以讀取和修改配置文件/etc/sudoers。如果擔心直接修改配置文件/etc/sudoers會出現問題,也可以使用sudo命令提供的visudo命令來配置用戶權
限,該命令在配置用戶權限時將禁止多個用戶同時修改sudoers配置文件,還可以對配置文件內參數進行語法檢查,并在發現參數錯誤時進行報錯。只有root管理員才可以使用visudo命令編輯sudo服務的配置文件。visudo命令配置sudo命令的配置文件/etc/sudoers時,其操作方法與Vim編輯器中用到的方法相同。綜上,sudo命令文件的服務配置文件為/etc/sudoers,可以直接進行編輯,也可以使用visudo命令進入編輯。
? ? sudo -h 列出幫助信息 ? ?sudo -l列出當前用戶可以執行的命令? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ?? # visudo
? ? (大約第99行:)
? ? root ? ? ? ? ? ? ? ALL=(ALL) ? ? ? ? ALL ? ? ? //可以再下面接著添加(配置)某個用戶的限制命令
誰可以使用 ?允許使用的主機=(以誰的身份) 可以執行的命令(必須用絕對路徑)
? ?luciusvorenus ? ? ?ALL=(ALL) ? ? ? /usr/bin/ls? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 允許使用的主機: 外部網絡或者內部網絡登陸進入系統,當采用ALL時,無論是本地還是遠程登陸的主機都可以允許使用規定的服務。
以誰的身份:ALL代表可以以任何用戶的身份,相當于root。 (ALL)=(root)
如果有多個命令,則命令之間用逗號進行間隔。在進行了以上配置以后,luciusvorenus用戶使用:sudo ls命令就相當于root用戶使用ls命令了,可以查看/root目錄內的內容等(初次使用sudo需要luciusvorenus用戶的密碼,默認時間為5分鐘,5分鐘內無需再讓用戶再次驗證密碼),如下:
# ls /root
ls: cannot open directory /root: Permission denied
# sudo ls /root
[sudo] password for luciusvorenus:?
anaconda-ks.cfg ?Desktop ?Documents ?Downloads?? ?gongxiang ?initial-setup-ks.cfg ?Music?? ?Pictures ?
Public ?Templates ?Videos ?work? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 為了避免用戶在輸入 sudo 命令 時頻繁的驗證用戶的密碼,可以將上面那一行內容改為如下內容:
luciusvorenus ? ? ?ALL=(ALL) ? ?NOPASSWD: ? ?/usr/bin/ls
?