linux隨筆-06

来源:https://www.cnblogs.com/lijinhui-blog/archive/2019/07/19/linux-06.html
-Advertisement-
Play Games

用戶身份與文件許可權 用戶身份與能力 Linux系統的管理員之所以是root,並不是因為它的名字叫root,而是因為該用戶的身份號碼即UID(User IDentification)的數值為0。 在Linux系統中,UID就相當於我們的身份證號碼一樣具有唯一性,因此可通過用戶的UID值來判斷用戶身份。 ...


用戶身份與文件許可權


 

用戶身份與能力

Linux系統的管理員之所以是root,並不是因為它的名字叫root,而是因為該用戶的身份號碼即UID(User IDentification)的數值為0。

在Linux系統中,UID就相當於我們的身份證號碼一樣具有唯一性,因此可通過用戶的UID值來判斷用戶身份。在RHEL 7系統中,用戶身份有下麵這些:

管理員UID為0:系統的管理員用戶。

系統用戶UID為1~999: Linux系統為了避免因某個服務程式出現漏洞而被黑客提權至整台伺服器,預設服務程式會有獨立的系統用戶負責運行,進而有效控制被破壞範圍。(RHEL5/6 UID:1-499)

普通用戶UID從1000開始:是由管理員創建的用於日常工作的用戶。(RHEL5/6 UID:500-65535)

需要註意的是,UID是不能衝突的,而且管理員創建的普通用戶的UID預設是從1000開始的(即使前面有閑置的號碼)

在Linux系統中創建每個用戶時,將自動創建一個與其同名的基本用戶組,而且這個基本用戶組只有該用戶一個人。如果該用戶以後被歸納入其他用戶組,則這個其他用戶組稱之為擴展用戶組。一個用戶只有一個基本用戶組,但是可以有多個擴展用戶組。

1.  useradd命令

useradd命令用於創建新的用戶,格式為“useradd [選項] 用戶名”。

使用該命令創建用戶賬戶時,預設的用戶家目錄會被存放在/home目錄中,預設的Shell解釋器為/bin/bash,而且預設會創建一個與該用戶同名的基本用戶組。

shell解釋器(/bin/bash和/sbin/nologin)

創建一個普通用戶並指定家目錄的路徑、用戶的UID以及Shell解釋器。一旦用戶的解釋器被設置為nologin,則代表該用戶不能登錄到系統中(-d:指定用戶的家目錄(預設為/home/username);-u:指定該用戶的預設UID;-s:指定該用戶的預設Shell解釋器)

[root@linuxprobe ~]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
[root@linuxprobe ~]# id linuxprobe
uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)

2.  groupadd命令

groupadd命令用於創建用戶組,格式為“groupadd [選項] 群組名”。

為了能夠更加高效地指派系統中各個用戶的許可權,在工作中常常會把幾個用戶加入到同一個組裡面,這樣便可以針對一類用戶統一安排許可權。

[root@linuxprobe ~]# groupadd ronny

3.  usermod命令

usermod命令用於修改用戶的屬性,格式為“usermod [選項] 用戶名”。

用戶的信息保存在/etc/passwd文件中,可以直接用文本編輯器來修改其中的用戶參數項目,也可以用usermod命令修改已經創建的用戶信息,諸如用戶的UID、基本/擴展用戶組、預設終端等。

將用戶linuxprobe加入到root用戶組中:

[root@linuxprobe ~]# usermod -G root linuxprobe
[root@linuxprobe ~]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)

用-u參數修改linuxprobe用戶的UID號碼值

[root@linuxprobe ~]# usermod -u 8888 linuxprobe
[root@linuxprobe ~]# id linuxprobe
uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)

4.  passwd命令

passwd命令用於修改用戶密碼、過期時間、認證信息等,格式為“passwd [選項] [用戶名]”。

普通用戶只能使用passwd命令修改自身的系統密碼,而root管理員則有許可權修改其他所有人的密碼。

5.  userdel命令

userdel命令用於刪除用戶,格式為“userdel [選項] 用戶名”。

如果我們確認某位用戶後續不再會登錄到系統中,則可以通過userdel命令刪除該用戶的所有信息。在執行刪除操作時,該用戶的家目錄預設會保留下來,此時可以使用-r參數將其刪除。

 userdel命令的參數以及作用

參數 作用
-f 強制刪除用戶
-r 同時刪除用戶及用戶家目錄

使用userdel命令將linuxprobe用戶刪除,其操作如下:

[root@linuxprobe ~]# id linuxprobe
uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
[root@linuxprobe ~]# userdel -r linuxprobe
[root@linuxprobe ~]# id linuxprobe
id: linuxprobe: no such user

文件許可權與歸屬

儘管在Linux系統中一切都是文件,但是每個文件的類型不盡相同,因此Linux系統使用了不同的字元來加以區分,常見的字元如下所示:

 -:普通文件。

d:目錄文件。

l:鏈接文件。

b:塊設備文件。

c:字元設備文件。

p:管道文件。

在Linux系統中,每個文件都有所屬的所有者和所有組,並且規定了文件的所有者、所有組以及其他人對文件所擁有的read可讀(r)、write可寫(w)、execute可執行(x)等許可權。

對於一般文件來說:

“可讀”表示能夠讀取文件的實際內容;

“可寫”表示能夠編輯、新增、修改、刪除文件的實際內容;

“可執行”則表示能夠運行一個腳本程式。

對於目錄文件來說:

“可讀”表示能夠讀取目錄內的文件列表;

“可寫”表示能夠在目錄內新增、刪除、重命名文件;

而“可執行”則表示能夠進入該目錄。

文件的讀、寫、執行許可權可以簡寫為rwx,亦可分別用數字4、2、1來表示,文件所有者,所屬組及其他用戶許可權之間無關聯。

文件的特殊許可權

在複雜多變的生產環境中,單純設置文件的rwx許可權無法滿足我們對安全和靈活性的需求,因此便有了SUID、SGID與SBIT的特殊許可權位。這是一種對文件許可權進行設置的特殊功能,可以與一般許可權同時使用,以彌補一般許可權不能實現的功能。

1.  SUID

SUID是一種對二進位程式進行設置的特殊許可權,可以讓二進位程式的執行者臨時擁有屬主的許可權(僅對擁有執行許可權的二進位程式有效)。

如果原先許可權位上沒有x執行許可權,那麼被賦予特殊許可權後將變成大寫的S,否則為小寫s。

[root@linuxprobe ~]# ls -l /etc/shadow
----------. 1 root root 1004 Jan 3 06:23 /etc/shadow
[root@linuxprobe ~]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 29 2017 /bin/passwd

2.  SGID

SGID主要實現如下兩種功能:

讓執行者臨時擁有屬組的許可權(對擁有執行許可權的二進位程式進行設置);

在某個目錄中創建的文件自動繼承該目錄的用戶組(只可以對目錄進行設置)。

SGID與SUID不同點在於執行程式的用戶獲取的不再是文件所有者的臨時許可權,而是獲取到文件所屬組的許可權。

chmod和chown(chmod許可權  chown屬性)

chmod命令能夠用來設置文件或目錄的許可權,格式為“chmod [參數] 許可權 文件或目錄名稱”。

chown命令可以設置文件或目錄的所有者和所屬組,其格式為“chown [參數] 所有者:所屬組 文件或目錄名稱”。

chmod和chown命令是用於修改文件屬性和許可權的最常用命令,它們還有一個特別的共性,就是針對目錄進行操作時需要加上大寫參數-R來表示遞歸操作,即對目錄內所有的文件進行整體操作

3.  SBIT

SBIT特殊許可權位可確保用戶只能刪除自己的文件,而不能刪除其他用戶的文件。換句話說,當對某個目錄設置了SBIT粘滯位許可權後,那麼該目錄中的文件就只能被其所有者執行刪除操作了。

當目錄被設置SBIT特殊許可權位後,文件的其他人許可權部分的x執行許可權就會被替換成t或者T,原本有x執行許可權則會寫成t,原本沒有x執行許可權則會被寫成T。

文件的隱藏屬性

Linux系統中的文件除了具備一般許可權和特殊許可權之外,還有一種隱藏許可權,即被隱藏起來的許可權,預設情況下不能直接被用戶發覺。

1.  chattr命令

chattr命令用於設置文件的隱藏許可權,格式為“chattr [參數] 文件”。

如果想要把某個隱藏功能添加到文件上,則需要在命令後面追加“+參數”,如果想要把某個隱藏功能移出文件,則需要追加“-參數”。

chattr命令中用於隱藏許可權的參數及其作用

參數 作用
i 無法對文件進行修改;若對目錄設置了該參數,則僅能修改其中的子文件內容而不能新建或刪除文件
a 僅允許補充(追加)內容,無法覆蓋/刪除內容(Append Only)
S 文件內容在變更後立即同步到硬碟(sync)
s 徹底從硬碟中刪除,不可恢復(用0填充原文件所在硬碟區域)
A 不再修改這個文件或目錄的最後訪問時間(atime)
b 不再修改文件或目錄的存取時間
D 檢查壓縮文件中的錯誤
d 使用dump命令備份時忽略本文件/目錄
c 預設將文件或目錄進行壓縮
u 當刪除該文件後依然保留其在硬碟中的數據,方便日後恢復
t 讓文件系統支持尾部合併(tail-merging)
x 可以直接訪問壓縮文件中的內容

2.  lsattr命令

lsattr命令用於顯示文件的隱藏許可權,格式為“lsattr [參數] 文件”。

[root@linuxprobe ~]# lsattr linuxprobe
-----a---------- linuxprobe
[root@linuxprobe ~]# chattr -a linuxprobe
[root@linuxprobe ~]# lsattr linuxprobe 
---------------- linuxprobe
[root@linuxprobe ~]# rm linuxprobe 
rm: remove regular file ‘linuxprobe’? y

文件訪問控制列表

如果希望對某個指定的用戶進行單獨的許可權控制,就需要用到文件的訪問控制列表(ACL)了。

通俗來講,基於普通文件或目錄設置ACL其實就是針對指定的用戶或用戶組設置文件或目錄的操作許可權。

另外,如果針對某個目錄設置了ACL,則目錄中的文件會繼承其ACL;若針對文件設置了ACL,則文件不再繼承其所在目錄的ACL。

1.  setfacl命令

setfacl命令用於管理文件的ACL規則,格式為“setfacl [參數] 文件名稱”。

文件的ACL提供的是在所有者、所屬組、其他人的讀/寫/執行許可權之外的特殊許可權控制,使用setfacl命令可以針對單一用戶或用戶組、單一文件或目錄來進行讀/寫/執行許可權的控制。

其中,針對目錄文件需要使用-R遞歸參數;針對普通文件則使用-m參數;如果想要刪除某個文件的ACL,則可以使用-b參數

[root@linuxprobe ~]# setfacl -Rm u:linuxprobe:rwx /root
[root@linuxprobe ~]# su - linuxprobe
Last login: Sat Mar 21 15:45:03 CST 2017 on pts/1
[linuxprobe@linuxprobe ~]$ cd /root
[linuxprobe@linuxprobe root]$ ls
anaconda-ks.cfg Downloads Pictures Public
[linuxprobe@linuxprobe root]$ cat anaconda-ks.cfg
[linuxprobe@linuxprobe root]$ exit

怎麼查看文件上有哪些ACL呢?常用的ls命令是看不到ACL表信息的,但是卻可以看到文件的許可權最後一個點(.)變成了加號(+),這就意味著該文件已經設置了ACL了。

[root@linuxprobe ~]# ls -ld /root
dr-xrwx---+ 14 root root 4096 May 4 2017 /root

2.  getfacl命令

getfacl命令用於顯示文件上設置的ACL信息,格式為“getfacl 文件名稱”。

想要設置ACL,用的是setfacl命令;要想查看ACL,則用的是getfacl命令。

[root@linuxprobe ~]# getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:linuxprobe:rwx
group::r-x
mask::rwx
other::---

su命令與sudo服務

su命令可以解決切換用戶身份的需求,使得當前用戶在不退出登錄的情況下,順暢地切換到其他用戶,比如從root管理員切換至普通用戶:

[root@linuxprobe ~]# id 
uid=0(root) gid=0(root) groups=0(root)
[root@linuxprobe ~]# su - linuxprobe
Last login: Wed Jan 4 01:17:25 EST 2017 on pts/0
[linuxprobe@linuxprobe ~]$ id 
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

上面的su命令與用戶名之間有一個減號(-),這意味著完全切換到新的用戶,即把環境變數信息也變更為新用戶的相應信息,而不是保留原始的信息。強烈建議在切換用戶身份時添加這個減號(-)。

sudo服務中的可用參數以及作用

參數 作用
-h 列出幫助信息
-l 列出當前用戶可執行的命令
-u 用戶名或UID值 以指定的用戶身份執行命令
-k 清空密碼的有效時間,下次執行sudo時需要再次進行密碼驗證
-b 在後臺執行指定的命令
-p 更改詢問密碼的提示語

總結來說,sudo命令具有如下功能:

限制用戶執行指定的命令:

記錄用戶執行的每一條命令;

配置文件(/etc/sudoers)提供集中的用戶管理、許可權與主機等參數;

驗證密碼的後5分鐘內(預設值)無須再讓用戶再次驗證密碼。

可以使用sudo命令提供的visudo命令來配置用戶許可權。這條命令在配置用戶許可權時將禁止多個用戶同時修改sudoers配置文件,還可以對配置文件內的參數進行語法檢查,併在發現參數錯誤時進行報錯。

只有root管理員才可以使用visudo命令編輯sudo服務的配置文件。

visudo: >>> /etc/sudoers: syntax error near line 111 <<<
What now?
Options are:
(e)dit sudoers file again
(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)

在sudo命令的配置文件中,按照下麵的格式將第99行(大約)填寫上指定的信息:

誰可以使用  允許使用的主機=(以誰的身份)  可執行命令的列表

[root@linuxprobe ~]# visudo
 96 ##
 97 ## Allow root to run any commands anywhere
 98 root ALL=(ALL) ALL
 99 linuxprobe ALL=(ALL) ALL

在填寫完畢後記得要先保存再退出,然後切換至指定的普通用戶身份,此時就可以用sudo -l命令查看到所有可執行的命令了。



 

 

 

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本來計劃是五篇文章的,每章發個半小時隨便翻翻就能懂,但是第一篇發了之後,我發現.NET環境下很多人對IoC和DI都很排斥,搞得評論區異常熱鬧。 同一個東西,在Java下和在.NET下能有這麼大的差異,也是挺有意思的一件事情。 所以我就把剩下四篇內容精簡再精簡,合成一篇了,權當是寫給自己的一個備忘記錄... ...
  • public void FreshDateTime() { string strWeek = string.Empty; #region 格式化星期 switch (DateTime.Now.DayOfWeek) { case DayOfWeek.Sunday: strWeek = "星期日"; b ...
  • SSM框架- S-Spring S-Spring mvc M-mybatis 就需要以下幾個配置文件,放在resources文件夾下麵: db.properties 放的是資料庫連接池的配置文件,有資料庫jdbc的連接信息: mybatis-config.xml 放置的是mybatis相關的配置文件 ...
  • Ubuntu Dock 為應用程式啟用最小化操作,立即生效。 pip3 ipython3 ...
  • 問題描述: xshell遠程連接伺服器連接不上,如下圖所示: 故障排除: Port 22# Use these options to restrict which interfaces/protocols sshd will bind to#ListenAddress ::#ListenAddres ...
  • LinuxShell腳本——選擇結構 摘要:本文主要學習了Shell腳本中的選擇結構。 if-else語句 基本語法 最簡單的用法就是只使用if語句,它的語法格式為: 如果將if和then寫在一行,則需要在then前面添加“;”: 如果有兩個分支,就可以使用if-else語句,它的格式為: Shel ...
  • 環境準備系統: 主機兩台,分別是docker私有庫伺服器(IP 192.168.121.121)和用戶開發機(IP 192.168.121.122),開發機從私有庫伺服器拉取鏡像。 1、配置軟體源並安裝安裝docker兩台主機安裝docker 2、搭建私有鏡像倉庫登陸私有庫伺服器 創建docker管 ...
  • LinuxShell腳本——變數和數據類型 摘要:本文主要學習了Shell腳本中的變數和數據類型。 變數 定義變數的語法 定義變數時,變數名和變數值之間使用“=”分隔,並且等號兩邊不能有空格: 變數名規則 變數名的定義必須遵循以下規則: 使用變數 使用一個定義過的變數,只要在變數名前面加美元符號即可 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...