Linux系列04:用戶和權限管理

Linux系列04:用戶和權限管理

用戶和組

用戶分為系統用戶和普通用戶,系統用戶uid較小,普通用戶uid在CentOS6中500開始,CentOS7中是1000開始。

用戶配置文件/etc/passwd,密碼文件/ets/shadow,組配置文件/etc/group,組密碼文件/etc/gshadow。

用戶配置文件中,各列依次是用戶名,密碼佔位符,用戶id,組id,註釋,家目錄,登陸shell

如果刪除密碼佔位符,無需密碼即可本地登陸。

用戶密碼配置文件中,各列依次是:用戶名,密碼,最後一次修改時間(1970-01-01至今的天數),最小修改時間間隔,有效期,警告天數,寬限天數,保留

密碼字符串有三部分組成,用$分割,第一部分是加密方式,目前使用的6是sha-512,5是sha-256,1是md5,第二部分是salt,避免彩虹表攻擊,使密碼更安全,第三部分是crypt形式的哈希值

man 5 shadow可以查看配置文件的幫助信息,發現密碼是由crypt函數生成的,yum install man-pages安裝完整man手冊,man 3 crypt可以查看該函數的詳細信息。

密文使用了base64類似的編碼方式,除26個字母大小寫加數字,外加點和斜線,將base64中加號換成點,去掉等號,就是這個編碼。URL中傳輸可以採用base58,比特幣錢包就是這個編碼。

手動生成一樣的密碼,各大編程語言都有crypt類庫,下面以PHP為例手動生成

php -r 'echo crypt("111111","$6$3MkRYm8bvE9CS1t4$")."\\n";'

python -c 'import crypt; print crypt.crypt("111111","$6$3MkRYm8bvE9CS1t4$")'

$6$3MkRYm8bvE9CS1t4$YBvXOJlBWNa.Gnu5QT//tvleIgkIchPFV0A1J.dSwJtyCrG7mCLg2i08v4icJz9SvHB8zOra9DSEBmqDH4mIN0

與/etc/shadow中密碼字段完全相同,換言之把上面的字符串複製到shadow文件密碼字段,用111111就可以登陸了。

MD5編碼也是可以的,使用openssl passwd -1 -salt salt password,只能使用MD5,Apache特有的MD5加密方式也是支持的。

默認的有效期是99999,即永久有效。最小修改密碼天數是最後一次修改密碼天數開始不能修改密碼天數,三個密碼事件時間順序是警告天數,過期天數,過期後寬限天數

組配置文件中,依次是組名,密碼佔位符(用於指定組管理員),組id,附加用戶

組密碼文件中,依次是組名,密碼,組管理員,附加用戶

useradd創建一個用戶,c用於註釋,d指定家目錄,e過期日期(Y-m-d),f寬限天數,也叫非活動天數,g指定用戶組,G附加組,可用逗號分割,M不創建家目錄,n不自動生成同名用戶組,r系統用戶,同時使用m創建家目錄,否則不創建家目錄,s指定shell,u用戶id

D修改預設值/etc/default/useradd

usermod,c,d,e,f,g,G,m,r,s,u選項與useradd相同,a追加到用戶組,l修改用戶名,L鎖定用戶,密碼前有歎號,無法登陸,U解除鎖定

userdel,刪除用戶,f強制刪除,r刪除家目錄和mail目錄

groupadd,創建用戶組,g指定gid,f強制創建,即使已經有組賬號

groupdel,刪除用戶組

passwd,修改密碼文件,k更新有效期,l鎖定用戶,u解除鎖定,--stdin從標準輸入讀取密碼,d刪除密碼,e使密碼過期,n最短天數,即最小修改天數,x最長天數,即有效期,w警告天數,i寬限天數,S顯示註釋

chage,修改用戶密碼有效期,d更改最後一次修改密碼時間(1970-01-01至今的天數),E過期日期(Y-m-d),I寬限天數,l顯示有效期,m最短可更改密碼天數,M最大有效天數,W警告天數

chpasswd,批量修改密碼,較少使用,e使用加密的密碼

chgrp,修改文件屬組

su,切換用戶,c執行命令,-更新環境變量

visudo,修改sudo文件,c檢查語法,格式:用戶名,機器=(角色),命令。命令前加NOPASSWD:無需輸入密碼

sudo,以另一個用戶身份執行,l列出可用命令,h幫助,H指定家目錄,V版本,v第一次和5分鐘後需要輸入密碼,u指定用戶,k清除緩存密碼,K同k,同時刪除時間戳文件,b後臺執行,p更改詢問密碼提示語,e修改文件。

很多守護程序,shell被設置為/sbin/nologin,該用戶無法執行命令。

一種是:sudo -u mysql touch /tmp/mysql.txt

一種是指定shell:su mysql -s /bin/bash -c 'touch /tmp/mysql2.txt'

id,顯示用戶信息,g用戶組,G附加組,n顯示用戶名而不是數字,r顯示實際id,rn需配合ugG使用,u用戶ID

last顯示用戶最近登陸信息,lastb最近登陸失敗記錄,lastlog最近登陸記錄

權限

分為讀寫執行權限,對應的字符是rwx,對應的數字是4,2,1,加起來就是7,還區分屬主屬組和其他用戶權限,目錄默認權限是755,屬主可進入可以添加文件,其他用戶只能查看不能添加文件。默認的文件權限是644,屬主可以修改查看,其他用戶只能查看,這意味著Linux中沒有秘密,但家目錄裡,其他用戶是沒有任何權限的。

權限需要特別注意的,刪除文件的權限是父目錄的寫權限,因為文件名在父目錄的數據區中;沒有執行權限並不意味著文件沒法用,可以使用source,sh,php,python等命令加載文件,這時是不需要文件有執行權限的。source只要有一般文本文件後綴就可以加載執行。對於目錄沒有執行權限,只能查看文件名,無法cd進入目錄,但root除外。

umask,默認值是0022,對文件而言,默認權限是使用666-umask,如果有執行權限則加1,對目錄而言,默認權限是777-umask。使用時可以在小括號中,防止修改全局umask,(umask 0002;touch umaskfile),umaskfile權限為664。

chown,修改屬主,R遞歸

chmod,修改權限,可使用的簡稱augo,符號+-=,權限7421或rwx,tTsSX

setfacl,設定ACL權限,ext系列文件系統要開啟才行,xfs,btrfs默認開啟,d設置新建文件和目錄的默認權限,等同於-m d:u:root:rwx,h查看幫助,例如`-m u:root:rwx file`,b刪除所有ACL權限,k刪除所有默認ACL權限,R遞歸。

getfacl,查看ACL權限

特殊權限

SUID,執行程序時,使用屬主身份和權限而不是實際用戶的身份執行,典型就是passwd程序,屬主有s權限,沒有執行權限時是大寫的S,數字表示是4xxx,對目錄沒有意義。

SGID,目錄屬組的用戶有創建文件權限,創建的文件屬組為目錄的屬組,數字表示是2xxx,對文件而言類似SUID,典型應用是locate命令,任何人都可以執行,執行期間擁有slocate組的權限。yum provides locate,yum install mlocate,updatedb(僅測試時執行,非常耗資源)

-rwx--s--x 1 root slocate 40520 Apr 11 2018 /usr/bin/locate

-rw-r----- 1 root slocate 2777252 Apr 16 23:25 /var/lib/mlocate/mlocate.db

屬組可以讀取該數據庫文件

SBIT,粘滯位,對於多人可寫目錄,只能刪除自己創建的文件。典型應用是/tmp目錄。數字表示是1xxx,字符表示是t。

chattr,設定擴展權限,R遞歸

lsattr列出特殊權限,a只能以追加形式打開文件,A不修改atime,c自動壓縮,C不使用寫時複製(btrfs),d不允許dump,D同步寫入到磁盤,e開啟了數據塊的範圍映射,E壓縮文件有錯誤,i鎖定文件。。。

常用的擴展權限是i鎖定關鍵文件,a使日誌文件不允許清空

摘自某挖礦程序末尾

echo 0>/var/spool/mail/root

echo 0>/var/log/wtmp

echo 0>/var/log/secure

echo 0>/var/log/cron

下一篇:Linux系列05:網絡和進程管理(完)


分享到:


相關文章: