Linux之使用者和許可權

2022-01-09 21:29:59 字數 4344 閱讀 2408

自從我大微軟終於放下身段,決定給開源社群乙個遲來的擁抱,追隨多年的擁躉們像是突然得到了女神的垂青,各種茫然失措、痛哭流涕、歡欣鼓舞,紛紛唱了起來:「等了好久終於等到今天,夢了好久終於把夢實現……」唱完之後才想起來好像說的什麼開源、跨平台啥的和自己沒太大關係,最基本的,linux、ios會麼?被.net細心呵護了這許多年,現在跟我說開源跨平台,你是玩我呢?不說了,拖了幾個月的專案,老闆還等著今天上線呢!

呵呵,開個玩笑,其實微軟的開放姿態是受多數方肯定和歡迎的,it行業各方面也多少有點影響,對於我來說,最大的影響莫過於打算好好研究下linux,這玩意一直都想系統學習,奈何沒有充足的動力,如今沒有藉口了,希望能盡快入門。

按照本人部落格一貫的風格,本文並非系統的講解,而是側重於方便以後的複習回顧做筆記。本文綠字為個人見解,需驗證。本系列參考書籍是《linux就是這個範兒》,趙鑫磊和張潔著。

學習linux第乙個要面對的問題是版本選擇,尼瑪當時我一看就傻眼了,瞬間就有打道回府的衝動。大夥來瞅瞅,下面這還是07年時候的分支圖(摘自網路),想想現在android的景象,嘖嘖,這圖還能裝下麼。

要從中選乙個合適的,對門外漢來說確實不是件容易的事。開源就是這點不好,大家各行其是,說好聽點百花齊放,卻分流了本就不多的使用者群,若如此眾多的版本開發可以合力一處,windows還有笑傲江湖的資格麼。雖說在伺服器端因為開源的原因闖出了一片天地,但仍然無法迴避佔市場大頭的桌面客戶端的失利。博主認為凡事都不可走極端,純開放和純封閉都不可取,兩者相互借鑑,給予自由,但又有機構按規則統一版本控制,才是軟體發展的正確方式(maybe有某類開源協議支援博主的觀點,除了gpl,博主對其它開源協議不甚清楚)。

所幸對於我們這群碼農來說,各發行版都大同小異,一通百通。目前服務端用的比較多的免費版本非centos莫屬,很多書籍也採用centos講解,如今已到了7.1版本。

作為.neter,雖然勾搭上了linux,但是正房還是windows,不可拋棄。那麼如何在同台電腦上另外安裝linux呢,要知道linux和windows的檔案系統都不一樣,網上有此雙系統的教程,但是為了安全計,我還是選擇了虛擬機器的方式。虛擬機器的缺點是軟體環境是模擬出來的,比如剛說的檔案系統,虛擬機器裡linux的檔案系統都是由windows檔案系統經虛擬機器轉換而來,效率上絕壁比原生安裝的低下很多。

虛擬機器我選擇的是vmware workstation,最新版11.1,註冊碼網上搜便是。在vmware介面上選擇centos映象檔案,然後靜靜等待安裝完畢即可,在此期間會讓你輸入使用者名稱密碼作為安裝後的登入使用者,然後是語言和輸入法選擇,完了就進入桌面了,如下:

也沒什麼特別的感覺,完全沒有各類書籍裡說的驚豔,maybe centos偏向於服務效能,對圖形介面不care,maybe ubuntu就不一樣了。不管怎麼說,我終於向前邁出了歷史性的一步!

使用者和使用者組

linux使用者中除了root天生就很牛逼,其他使用者都是屌絲。乙個使用者至少屬於乙個使用者組,/etc/passwd檔案中每行即表示乙個使用者,其中第4列即gid表示使用者的「初始使用者組」,使用者所屬的所有使用者組稱為「支援使用者組」。還有個概念是「有效使用者組」,所謂有效使用者組表示使用者當前所在的使用者組,即使用者在同一時刻只能以乙個使用者組成員的身份參與系統互動,至於為什麼這麼設計,目前未知。

前者說了,root很牛逼,幾乎無所不能,很極端的對立,廣大屌絲一般除了自己的一畝三分地,幾乎不能幹任何「有技術含量的」事(比如新增使用者),所以有點什麼事都要麻煩root。root為了不累死,決定傳授一句咒語給屌絲們,讓他們能在一段時間內具備自己(root)的能力,或者說「變身」為root,這個咒語就是sudo。比如/etc/shadow 這個檔案是儲存密碼的,普通使用者沒有許可權檢視,一定要看的話可以執行「$ sudo cat /etc/shadow」,這時系統會要求輸入當前使用者密碼,輸密碼雖然麻煩,但安全性高了,至少各類後台程式不能偷偷地搞小動作了(後來微軟也學了這招,windows vista開始,右鍵就加入了新的選單項——「以管理員身份執行」)。要給某個使用者賦予sudo特權,就需要更改/etc/sudoers 檔案中的內容,該檔案能設定使用者或使用者組行使sudo權利的命令範圍,甚至可以設定sudo時不用輸入密碼,不過這自然是不安全的,不推薦。

su命令,用來切換當前使用者。所以如果嫌sudo太麻煩,就可以使用su臨時切換到root使用者,切換使用者時須輸入目標使用者的密碼。root使用者使用su命令切換到任何使用者都不需要輸入密碼,所以我們要在/etc/sudoers中明確禁止su被sudo特權執行。

和使用者組類似,使用者也有實際使用者和有效使用者(即上文說的當前使用者)的概念,分別可用who am i 和 whoami 檢視。

檔案[屬性和許可權]

linux環境大小寫敏感,檔名也是,在檔名前加上「.」則該檔案[夾]將隱藏。和windows不同,檔案基本上沒有副檔名,因為linux不根據副檔名判斷檔案型別,而是根據檔案的內容來判斷。。

。建立連線用ln,如果是複製cp命令,那麼產生的是乙個內容一樣的新檔案。

檔案許可權:r、w、x、s、t。前三者分表表示讀、寫、執行。由於許可權可自由組合,所以以標誌位的形式設計是最合理的。用數字表示,r為4,w為2,x為1,那麼5就是r-x,rwx就是7。檔案按順序規定了擁有者、所屬組和其他無關者的許可權許可權,如777即表示所有使用者都對檔案有讀寫執行許可權,600表示只有擁有者有對該檔案的許可權,且該許可權為讀寫許可權即rw-。

我們可以使用chmod命令改變檔案許可權,如 chmod 700 testtext,這是數字許可權法,還可以使用文字表示許可權更改,如 chmod u+w testtext,表示給擁有者加上寫許可權。u、g、o、a分別表示擁有者、所屬組、其他無關者和全部,+、-、=分別表示增加、減去、設定。

還有s、t,這兩個許可權代表什麼呢?先說s,將檔案的擁有者和使用者組許可權的執行位設定成s,分別稱之為suid和sgid,對二進位制程式有效,sgid還能用在目錄上。乙個檔案本身具有uid和gid的屬性,表示擁有者和所屬組,在檔案被執行時,還會多出兩個屬性——euid和egid——分別表示執行檔案的有效(當前)使用者id和有效(當前)使用者組id,linux核心主要是根據euid和egid來確定程序對資源的訪問許可權。下面舉個例子就清楚了:

假設檔案myfile是屬於foo使用者的,是可執行的,現在沒設suid位,許可權位是rwxr-xr-x,foo使用者的uid和gid分別為200和201。另有一使用者kevin,他的uid和gid分別為204和202。那麼kevin執行myfile程式形成的程序的 euid=uid=204,egid=gid=202,核心根據這些值來判斷程序對資源訪問的限制,其實就是kevin使用者對資源訪問的許可權,和foo沒關係。然後我們將myfile設為suid,則euid和egid變成被執行的程式的所有者的uid和gid,即現在kevin使用者執行myfile,euid=200,egid=201,則這個程序具有它的屬主foo的資源訪問許可權。

不知道執行suid檔案過程中,之前提到的系統的有效使用者和有效使用者組是否也對應於執行檔案時的euid和egid, 即上例後半部,kevin執行myfile時,此時的系統有效使用者是kevin還是foo呢?這個問題留待日後驗證。

suid的作用就是這樣:讓本來沒有相應許可權的使用者執行這個程式時,可以訪問他沒有許可權訪問的資源。

sgid在二進位制程式上的功效和suid類似,在目錄上能產生如下效果:假設該目錄的所屬組為ga,那麼有效使用者組為gb的使用者進入此目錄後,該使用者的有效使用者組就變成ga了,那麼建立新檔案,新檔案的使用者組就是ga。sgid如此,那麼是否上述紅字描述的問題也是一般答案呢?

t,將檔案的其他無關者許可權執行位設為t,稱為sbit,僅對目錄有效。功效:使用者在設定了sbit目錄下建立的檔案,只有自己和root才有權利刪除此檔案。

其它

$path環境變數,決定了shell將到哪些目錄中尋找命令或程式,path的值是一系列目錄,當您執行乙個程式時,linux在這些目錄下進行搜尋編譯鏈結。

cpio命令:顧名思義,即輸入輸出的copy,現代電腦的標準輸入就是鍵盤,標準輸出是螢幕,我們可以通過重定向(|、>、

fork:拷貝乙個子程序。如果乙個程序fork之後,此時連同該程序是3個程序(該程序、fork後的父程序、fork後的子程序)呢,還是2個程序(該程序即fork後的父程序、fork後的子程序)呢?日後再解。

小結

接觸到現在,概念倒還罷了,linux的命令也忒多了,目前簡單了解的有:man、cd、cp、kill、mkdir、mv、rm、nohup、cpio、ls、ln、jobs、find、whereis、which、type、tar、chmod、chown、su、sudo、gzip、cat、tail、bg、fg、at、crontab、echo、fork、ps、top……且不說每個命令各自的命令引數,尼瑪,只能說用多如牛毛來形容了。

Oracle之使用者和許可權

dba使用create user語句建立使用者 create user 使用者名稱 identified by 密碼 grant 許可權,許可權 to 使用者 許可權包括 建立角色 create role manager 為角色賦予許可權 grant create table create view...

Linux系統之使用者 群組和許可權

一 使用者管理 系統規定 uid 0 特權使用者 uid 1 499 系統使用者 uid 500 普通使用者 使用者資訊 etc passwd 密碼最後修改時間,從unix元年到現在多少天 使用者名稱 密碼點位符 uid gid 描述 家目錄 使用者的shell 使用者密碼 etc shadow 密...

linux之使用者以及檔案許可權

終端 終端本質上是對應著 linux 上的 dev tty 裝置,linux 的多使用者登陸就是通過不同的 dev tty 裝置完成的,linux 預設提供了 6 個純命 令行介面的 terminal 準確的說這裡應該是 6 個 virtual consoles 來讓使用者登入。在物理機系統上你可以...