linux系統是多任務、多用戶的系統。linux
每一個文件和進程,都須要對應一個用戶和用戶組。面試
linux系統是經過UID和GID來是識別用戶和組的。正則表達式
其中用戶名等同於人名(人類識別),UID和GID等同於身份證號(系統識別)。shell
linux管理員:root安全
一對一,一對多,多對一,多對多bash
超級用戶:UID=0 root服務器
普通用戶:UID>=500 由超級用戶或者具備超級用戶權限的用戶建立的用戶運維
虛擬用戶:UID={1,499}存在知足文件或者服務啓動的須要,通常不能登陸。工具
每一個文件和進程,都須要對應一個用戶和用戶組。學習
/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow.
useeradd 添加用戶
userdel 刪除用戶
passwd 設置或修改密碼 更改/etc/shadow
chage 修改用戶密碼屬性 管理/etc/shadow
usermod 修改用戶信息
id 查看用戶信息
su 用戶角色切換工具
sudo 普通用戶不須要root密碼就能夠執行只有root才能執行相應的命令或具有的目錄權限
visudo 配置sudo權限的編輯命令,能夠直接vi來編輯/etc/sudoers實現。推薦使用,能夠自動檢查語法。
groupadd 添加組
groupdel 刪除組
groups 查看組信息
whoami 查看當前用戶
/etc/skel 目錄是用來存放新用戶環境變量的目錄,當咱們添加新用戶時,這個目錄下的全部文件會自動被複制到新添加的用戶家目錄下(cp -a /etc/skel/* /home/新用戶名/),默認狀況下,/etc/skel 目錄下的全部文件都是隱藏文件,經過修改添加、刪除/etc/skel 目錄下的文件,咱們可爲新用戶提供統一的、標準的、初始化用戶環境。
/etc/skel 的企業場景做用:
一、能夠把通知內容放到skel,讓登陸人員看
二、統一初始化新用戶的環境變量
三、面試題:出現「-bash-4.1$」問題緣由及解決方法
緣由:家目錄環境變量文件丟失。
解決方法:
su - a(a爲前面出現問題的用戶)
-bash-4.1$ cp /etc/skel/.bash* .
-bash-4.1$ logout
su -
su - a(a爲前面出現問題的用戶)
/etc/login.defs文件是用來定義建立用戶時須要的一些用戶的配置信息。例如建立用戶時,是否須要家目錄,UID和GID的範圍,用戶及密碼的有效期限等等。
/etc/default/useradd文件是在使用useradd添加用戶時的一個須要調用的默認配置文件,可使用 user -D 參數 這樣的命令格式來修改文件裏面的內容。能夠經過vi 命令直接編輯。
用戶密碼管理
一、密碼要複雜8位以上(字母數字特殊字符)
二、大的企業用戶和密碼統一管理(至關於活動目錄,openldap)
三、動態密碼:動態口令,第三方提供,或本身開發
用戶刪除管理
通常不能確認用戶相關目錄有沒有重要數據,就不能用-r。
一、vi /etc/passwd而後註釋掉用戶,觀察一個月,這樣出問題能夠還原,至關於操做前備份。
二、把登陸shell改爲/sbin/nologin。
三、openldap(相似活動目錄)帳號統一管理的,ldap庫裏幹掉用戶,全部服務器所有都沒了。
提示:修改刪除必須當心謹慎!
-c comenment 新帳號passwd的說明欄
-d home_dir 新帳號每次登入是所使用的home_dir。預設值爲default_home內login名稱,並當成登入時目錄名稱。
-e expire_date 帳號終止日期。日期格式爲MM/DD/YY。重點
-f inactive_days帳號過時幾往後永久中止權限。當值爲0時帳號則被當即停用。當值爲-1時則關閉此功能。
-g initial_group group名稱或以數字來作爲用戶登入起始用戶組。用戶組名須爲系統現有存在的名稱。用戶組數字也須爲系統現有存在的名稱。用戶組數字也須爲系統現有存在的用戶組。預設數字爲1.
-G group,[...] 定義此用戶爲不一樣groups的成員。每一個用戶組使用「,」分隔。用戶組名同-g選項的限制。默認值爲用戶的起始用戶組。重點
-m 用戶目錄如不存在則自動創建。如使用-k選項,skeleton——dir內的檔案將複製至用戶目錄下,然而在/etc/skel目錄下的檔案也會複製過去取代。任何在skeleton_dir /etc/skel的目錄也相同會在用戶目錄下意義創建。The-k 同-m不創建目錄以及不復制任何檔案爲預設值。
-M 不創建用戶家目錄,優先於/etc/login.defs文件的設定。通常建立虛擬用戶時不創建家目錄,部署服務時須要建立虛擬用戶。重點
-n 默認狀況用戶的用戶組與用戶的名稱會相同。若是命令加了-n參數,就不會生成和用戶同名的用戶組了。
-r 此參數是用來創建系統帳號。系統帳號的UID會比定義在系統檔上/etc/login.defs.的UID_MIN來的小。注意useradd此用法所創建的帳號不會創建用戶家目錄,也不會在意記錄在/etc/login,defs.的定義值。若是你想要擁有用戶家目錄須額外指定-m參數來創建系統帳號。這是Red HAT額外增設的選項。
-s shell 用戶登入後使用的shell名稱。默認值爲不填寫,這樣系統會幫你指定預設的登入shell。
-u uid 用戶的ID值。這個值必須是惟一的,除非用-o選項。數字不可爲負值。
-f , --force force operation #強制操做;僅root權限才能操做
-x,--maximum=DAYS #兩次密碼修改的最大天數,後面接數字;僅root權限操做
-n,--minimum=DAYS #兩次密碼修改的最小天數,後面接數字;僅root權限操做
-w,--warning=DAYS #在距多少天體系用戶修改密碼;僅root權限才能操做
-i,--inactive=DAYS #在密碼過時後多少天,用戶被禁掉;僅root權限才能操做
-d,--lastday 最近日期 #將最近一次密碼設置時間設爲「最近日期」。
-E,--expiredate 過時日期 #將帳戶過時時間設爲「過時日期」,日期寫法:MM/DD/YY。
-h,--help #顯示此幫助信息並退出
-i,-inactive 失效密碼 #在密碼過時後多少天,用戶被禁掉;僅root權限才能操做
-l,--list #顯示帳戶年齡信息
-m,-mindays 最小天數 #將兩次改變密碼之間相距的最小天數設爲「最小天數」
-M,--maxdays 最大天數 #將兩次改變密碼之間相距的最大天數設爲「最大天數」
-W,warndays 警告天數 #將過時警告天數設爲「警告天數」
-c comment #增長用戶帳號/etc/passwd中的註釋說明欄(第五欄)。-c參數功能也可以使用功能chfn
命令來修改,固然也能夠手工修改/etc/passwd文件來實現。
-d home_dir #更新用戶新的家目錄,若是給定-m選項,用戶舊的家目錄會搬到新的家目錄去,
如舊的家目錄不存在則建立新的。
-e expire_date #加上用戶帳戶中止日期。日期格式:MM/DD/YY。
-f inactive_days #帳號過時幾往後永久停權。當值爲0時帳號則當即被停權。當值爲-1時則關閉此功能,預 設值爲-1.
-g initial_group #更新用戶新的起始登入用戶組。用戶組名須已存在。用戶組ID必須參照既有的用戶組。用 戶組ID預設值爲1.
-G group ,[...] #定義用戶爲一堆groups的成員。每一個用戶使用「,」隔開。用戶在名同-g選項的限制。
-l login_name 變動用戶login時名稱爲login_name,其他信息不變。
-s shell 指定新用戶登入shell。如此欄留白,系統將選用系統預設shell。這個-s參數功能也可使用chsh命令來修改。固然也能夠手工修改/etc/passwd文件來實現。
-u uid 指定用戶的ID值。這個值必須是惟一的,除非用-o選項。數字不可爲負值。
-L 凍結用戶的密碼,使之沒法登陸,實際就是間接修改/etc/shadow的密碼欄。在密碼欄的開頭加上「!」號,即表示凍結。這個功能和usermod -e , chage -E或passwd -l等命令有相似功效,就是讓用戶沒法正常登陸。
-U 取消凍結用戶的密碼,使之恢復登陸,實際一樣是修改/etc/shadow的密碼欄,在密碼欄的開頭取消「!」號,即表示恢復。
用戶及日誌查詢:w who
查看用戶登陸信息:當前last 歷史lastlog
查看用戶所屬:所有id 組groups主屬和附加組users
-,-l,-login make the shell a login shell 是一個shell成爲登陸的shell,如執行su - oldboy時,表示該用戶想改變身份爲oldboy,而且使用oldboy用戶的環境配置,如:/home/oldboy/.bash_profile等。
-c,--command=COMMAND pass a single COMMAND to the with -c
切換到一個shell下,執行一個命令,而後退出所切換的用戶環境。
-m, --preserve-environment do not reset environment variables,same as -p
切換用戶時,不重置用戶環境變量,-p的功能同-m,這個參數爲su的默認值, 通常較少使用
不加「-」的話,家目錄還是root。
su - oldboy -c pwd 切到oldboy下執行pwd命令 切到用戶下執行命令,但當前用戶不變
由su和su -的區別談學習linux運維方法 http://oldboy.blog.51cto.com/2561410/1053606
env|grep -i 用戶名 查看用戶環境變量
su切換用戶方便,但有一些致命的缺點:
1)普通用戶必須知道root密碼才能夠切換到root,這樣root密碼就泄露了。至關於把「刀把」交給了別人。
2)使用su命令切換身份,沒法對切換後的身份作精細的控制,拿到別人超級權限的人能夠隨心所欲。甚至能夠更改root密碼,讓真正的管理員沒法擁有root權限。
爲了既不泄露密碼,又讓普通用戶擁有必定的超級權限,推出sudo命令。
經過sudo命令,咱們能夠把某些超級用戶權限分類,有針對性受權給指定的普通用戶,而且普通用戶不須要知道root密碼就能夠獲得root權限。
sudo的配置文件:/etc/sudoers
a)當用sudo執行命令時,系統首先會查找/var/run/sudo/%HOME(新用戶會先生成此目錄)目錄中是否有用戶時間戳文件,若是時間戳文件過時,則提示用戶輸入自身密碼(注意:這裏須要輸入當前執行命令用戶的密碼,不是root後其餘要切換的用戶的密碼)。
b)當密碼驗證成功後,系統查找/etc/sudoers配置文件,判斷用戶是否有執行相應sudo命令權限。
c)若是具有執行相應sudo權限,就會自動由當前用戶切到root(或其餘指定切換到的用戶),而後以root(或其餘指定的切換到的用戶)身份角色執行該命令。
d)執行完成後,又會自動的直接退回到當前用戶shell下(以root等身份執行任務)。
1)執行visudo命令自動編輯/etc/sudoers文件(推薦)
visudo 在98行,爲普通用戶提權
sudo命令配置時環境配置必定是全路徑。
2)直接修改/etc/sudoers文件方法(不推薦)
echo "oldboy ALL=(ALL) ALL" >> /etc/sudoers
visudo -c #檢查語法
-l 列出用戶在主機上可用和被禁止的命令;配置好sudo受權規則後,可用此參數查看受權狀況
-v 驗證用戶時間戳;可跟蹤最新時間戳
-u 指定以某個用戶身份執行特定命令
-k 刪除時間戳,下一個sudo命令要求提供密碼
echo "%oldboy ALL=(ALL) ALL" >> /etc/sudoers #配置oldboy組的受權,也能夠經過visudo來更改。
tail -l /etc/sudoers #查看受權配置
visudo -c #檢查語法
ls -l /etc/sudoers #檢查/etc/sudoers權限
usermod -g oldboy ett #更改ett屬於oldboy組
id ett #查看更改結果
1)Host_Alias 定義主機別名
1.在生產場景中,通常不須要設置主機別名,在定義受權規則時能夠經過ALL來匹配全部主機。
2.注意定義規範(Host_Alias FILESERVERS = fs1, fs2 #等號兩邊有空格逗號後面有空格),雖然不是必須的,但咱們仍是要求可以按照系統的標準來配置,這樣能夠避免意外的問題發生。
3.以上Host_Aliases內容截取自/etc/sudoers文件,並取消了註釋。
4.其實就是邏輯上的主機組,當多臺服務器共享一個/etc/sudoers時候會用到主機別名。
5.%oldboy ALL=(ALL) ALL #第一個ALL就是主機別名的應用位置。
6.%oldboy FILESERVERS=(ALL) ALL #至關於裏面有兩臺機器
2)User_Alias定義用戶別名
1.設置用戶別名也不是必須的,能夠經過%groupname的方式來做爲成員。
2.#User_Alias ADMINS = jsmith, mikem, %groupname
給ADMINS受權至關於同時受權給jsmith, mikem, %groupname
oldboy ALL=(ALL) ALL #oldboy就是主機別名的應用位置。
3)Runas_Alias 定義runas身份別名
1.這個別名指定的是「用戶身份」,即sudo容許切換到的用戶身份。
2.Runas_Alias定義的是用戶能夠執行sudo切換身份到Runas_Alias下包含的成員身份。
3.實際語法 Runas_Alias OP = root
4.oldboy ALL=(ALL) ALL #小括號中的第二個ALL的位置就是Runas_Alias別名的應用位置。
4)Cmnd_Alias定義命令別名
1.命令別名就是設置能夠執行哪些命令。
2.oldboy ALL=(ALL) ALL #第三個ALL的位置就是命令別名的位置。
3.全部的命令別名下的成員必須是文件或目錄的絕對路徑。
4.命令別名超過一行,可用「\」換行。
5.在定義時,可使用正則表達式,如/usr/bin/passwd [A-Za-z]*。
sudo受權,別名和具體受權配置的關係
用戶和組 |
主機 |
能夠切換的用戶角色 |
命令 |
root |
ALL= |
(ALL) |
ALL |
User_Alias ADMINS = jsmith, mikem, %groupname |
Host_Alias FILESERVERS = fs1, fs2 |
Runas_Alias OP = root |
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig |
什麼狀況下使用上述別名?
工做中通常有多個系統用戶,須要分類,分層次管理用戶時。
別名應用
最小化原則對Linux系統安全來講極其重要:即多一事不如少一事。
具體包括:
▲安裝Linux系統最小化,即選包最小化,yum安裝軟件包也要最小化,無用的包不裝
▲開機自啓動服務最小化,即無用的服務不開啓。
▲操做命令最小化。例:能「rm -f a.txt」就不用「rm -fr a.txt」。
▲登陸Linux用戶最小化。平時沒有特殊需求就不登陸root,用普通用戶登陸便可。
▲普通用戶受權最小化,即只給用戶必須管理系統的命令,不能啥均可以幹。
▲Linux系統文件及目錄的權限設置最小化,禁止隨意建立、更改、刪除文件。
說明:所謂sudo命令日誌審計,並不記錄普通用戶的普通操做。而是記錄執行sudo命令的用戶操做。
服務器日誌審計項目提出與實施
1.權限方案實施後,權限獲得了細化控制,接下來進一步實施對全部用戶日誌記錄方案。
2.經過sudo和syslog(rsyslog)配合實現對全部用戶進行日誌審計並將記錄集中管理(發送到中心日誌服務器)。
3.實施後讓全部運維和開發的全部執行的sudo管理命令都有記錄可查,杜絕了內部人員的操做安全隱患。
生產環境企業日誌審計解決方案:
所謂日誌審計,就是全部系統及相關用戶行爲的信息,而且能夠自動分析、處理、展現(包括文本或錄像)
1)經過環境變量命令及rsyslog服務進行所有日誌審計(信息太大)。
2)sudo配合rsyslog服務,進行日誌審計(審計信息較少)
3)在bash解釋器程序裏嵌入一個監視器,讓全部被審計的系統用戶使用修改過的增長了監視器的特殊bash程序做爲解釋程序。
4)齊治的堡壘機(齊治科技堡壘主機系統):商業產品
https://wenku.baidu.com/view/76b3b3e6f18583d0486459 (齊治科技堡壘主機系統技術白皮書)
5)Python開發的開源產品
開源跳板機(堡壘機)Jumpserver部署詳解
開源堡壘機CrazyEye
http://3060674.blog.51cto.com/3050674/1700814
1)安裝sudo命令,syslog服務(Centoa6.4爲rsyslog服務)
2)配置/var/sudoers(其實只要一行就可搞定sudo審計)
下面3,4能夠不執行,直接切換到普通操做,而後查看/var/log/sudo.log有無記錄。
3)配置文件系統日誌/etc/rsyslog.conf(能夠不配)
4)重啓rsyslog內核日誌記錄器
1)rsync+inotify或定時任務+rsync,推到日誌管理器上,10.0.0.7_2013.0303.sudo.log
2)rsylog服務來處理。
echo "10.0.2.164 logserver" >> /etc/hosts #日誌服務器地址
echo "*.info @logserver" >> /etc/syslog.conf #時候全部日誌推送
3)日誌收集解決方案scribe,Flume,stom,logstash ELK