用戶和組
用戶分為系統用戶和普通用戶,系統用戶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:網絡和進程管理(完)
閱讀更多 開發之源來如此 的文章