Linux的基礎知識之用戶、組合權限(一)
權限
權限:定義文件被某一個標識符所擁有。Linux中文件權限共有10位,其含義分別表示如下
對於文件:
R:表示可讀,可以參看文件內容;
W:表示可寫,可以編輯或者刪除該文件;
X:表示可執行
對於目錄:
R:表示可讀,可以列出該目錄內所有的文件;
W:表示可寫,可以在該目錄創建文件;
X:可以使用cd切換進子目錄,也可以使用ls -l 查看內部文件的詳細信息,所以目錄默認有可執行權限。
進程的安全上下文(secure context)。用戶操作計算機時便啓動了一個進程,進程是用戶操作計算機的代理,進程啓動時按照對應用戶的身份運行,所以進程也是有屬主屬組的。權限管理:
chown:改變文件屬主(只有管理員可以改變)
chown USERNAME file,...-R: 遞歸修改目錄及其內部文件的屬主;--reference=DIRECTORY/SOMEFILES FILENAMES:引用參考,將FILENAMES的屬性修改成和DIRECTORY/SOMEFILES一樣的屬性;chown USERNAME:GROUPNAME file,...,同時修改文件的屬主屬組;chown USERNAME.GROUPNAME file,...,同時修改文件的屬主屬組;(":"和“.”是一樣的)chown :GROUPNAME file,...,只修改文件的屬組;
chgrp:改變文件屬組(只有管理員可以改變)
chgrp USERNAME file,...-R: 遞歸修改目錄及其內部文件的屬組;--reference=DIRECTORY/SOMEFILES FILENAMES:引用參考,將FILENAMES的屬性修改成和DIRECTORY/SOMEFILES一樣的屬性;
chmod:修改文件的權限
修改三類用戶的權限:chmod MODE file,...
-R:遞歸修改--reference=DIRECTORY/SOMEFILES FILENAMES:參考照修改例子: chmod 750 FILENAME
修改某類或者某些類權限:u,g,o,a
chmod 用戶類別=MODE file,..例子:chomd u=rwx file,... ; chomd u=r-x file; chmod g=r,o=rw file 或者 chmod go=r file
修改某個用戶的某位或某些位權限:u,g,o,a
chmod 用戶類別=MODE file,..例子: chmod u-x file name; chmod u+wx,g-x file name;chmod a+x file name
umask:查看用戶的遮罩碼,也可以使用umask設定默認的umask
root用戶的遮罩碼爲0022,其創建的文件默認的權限爲666-022=644,Linux創建的文件默認不可執行;創建的目錄默認的權限爲777-022=755;普通用戶的遮罩碼爲0002,其創建的文件默認的權限爲666-002=664;創建的目錄默認權限爲777-002=775;若果文件的計算結果又可執行權限,系統會自動將其權限加1。
用戶
用戶:系統上一個標識符。
每個用戶都有一個UID,在/etc/passwd中存儲了每一個用戶的相關信息,相當於一個用戶數據庫,每個用戶登錄時使用的shell也是在該文件中定義的,而用戶的密碼保存在/etc/shadow文件中(影子口令)。【查看passwd的man文檔,whatis passwd ; man 5 passwd】。
用戶類別:
管理員:管理員的UID是0
普通用戶:UID範圍從1~65535
系統用戶:UID從1~499,運行後臺進程的用戶,如ftp、rsync、mail等,該類用戶不能夠登錄系統。
一般用戶:UID從500~65535。
/etc/passwd文件中各個字段的含義:(man 5 passwd)
account:登錄名
passwd:密碼或者密碼佔位符
UID:用戶ID
GID:用戶基本組ID
GECOS:用戶的註釋信息
HOME Directory:用戶家目錄
shell:用戶登錄時使用的shell,/etc/shells保存系統中所有可以使用的shell。
/etc/shadow文件中各個字段的含義:(man 5 shadow)
login name:登錄名;
passwd:加密後的密碼,格式:$加密算法$標識$加密後的密碼,密碼位顯示"!!"或者"*"表示對應的用戶是被鎖定的,不允許登錄;
date of last password change:上一次修改密碼時的日期;
minimum password age:密碼最短使用期限,0表示不設限定;
添加用戶:maximum password age:密碼最長使用期限;
password warning period:密碼快要過期之前多少天開始提醒用戶;
password inactivity period:用戶被禁用前所經歷的天數;
account expiration date:賬號禁用時間;
reserved field:保留字段;
useradd :添加用戶(adduser,useradd的一個鏈接),useradd USERNAME
-u 指定用戶的ID; -g 設置用戶的基本組;-G 設置用戶的附加組;-c指定用戶註釋信息;-d 指定用戶的家目錄;-s 指定shell的路徑(出現在/etc/shells中出現的shell);-m和-k 創建用戶的家目錄,並將目錄/etc/skel下面的默認文件複製到新的目錄下;-M 添加用戶的時候不創建家目錄;-r 添加一個系統用戶(系統用戶是沒有家目錄的);
文件/etc/login.defs中存放默認的用戶配置信息。
注意:用戶的默認屬性存在文件:/etc/default/useradd中
userdel:刪除用戶, 默認不刪除用戶的家目錄,可以使用 -r 選項刪除信息;
id:查看用戶的屬性信息;
finger:查看用戶賬號屬性信息;
usermod:修改用戶賬號屬性信息,和useradd的參數幾乎相同;
usermod -d Directory -m USERNAME 修改用戶的家目錄;usermod -l LoginName 修改用戶的登錄名;
chsh:修改shell;
chfn:修改用戶指紋,修改用戶的註釋信息;
密碼管理:
passwd [USERNAME] PASSWORD
--stdin,可以從標準輸入中讀取數據;-l, 鎖定用戶;-u,解鎖用戶;
pkck:檢測用戶賬號的完整性
chage:改變用戶密碼過期信息
組
組:權限的集合,用於指派權限,是一個邏輯概念,本質也是一個標識符。用戶不能通過組名登錄計算機。
每個組都有一個GID,在/etc/group中存儲了每一個組的相關信息,相當於組數據庫。每個組也需要密碼,存放在/etc/gshadow文件中。
組類別:
管理組:管理員的GID是0
普通組:GID範圍從1~65535
系統用戶:GID從1~499,運行後臺進程的用戶,如ftp、rsync、mail等,該類用戶不能夠登錄系統。
一般用戶:GID從500~65535。
組類別:(另外一個角度劃分)
基本組:用戶的默認組
私有組:創建一個用戶的時,若沒有指定用戶所述組,則系統自動爲該用戶創建一個與用戶名同名的組,該組稱爲私有組。
附加組:用戶基本組之外的所有組都是附加組。
/etc/group文件中各個字段的含義:(man 5 shadow)
group name:組名;
passwd:密碼佔位符;
GID:組ID
user_list:以該組爲附加組的用戶列表;
date of last password change:上一次修改密碼時的日期;
minimum password age:密碼最短使用期限,0表示不設限定;
添加組:maximum password age:密碼最長使用期限;
password warning period:密碼快要過期之前多少天開始提醒用戶;
password inactivity period:用戶被禁用前所經歷的天數;
account expiration date:賬號禁用時間;
reserved field:保留字段;
添加組:groupadd GROUPNAME
-g 指定組號;-r 指定該組爲系統組;
刪除組:groupdel
修改組:groupmod
-g 修改gid;-n修改組名;
修改組密碼:gpasswd GROUPNAME
登錄到一個新組:newgrp,切換用戶所在的組,如從基本組切換到附加組中。
用戶的登錄
Bash的配置文件:
按照全局和局部性分類:
全局配置文件:/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
個人配置文件:~/bash_profile, ~/bashrc
按照作用分類:
profile類的文件:①用於設定環境變量;②用戶登錄時運行命令或者腳本;
bashrc類文件: ①用於設定本地變量;②定義命令別名;
Shell的類型:
登錄式Shell:
包括:①正常通過某終端登錄的Shell ②使用su -l USERNAME su - USERNAME 切換過去的shell
讀取配置順序:/etc/profile-->/etc/profile.d/*.sh-->~/.bash_profile-->~/.bashrc-->/etc/bashrc;
非登錄式Shell:
包括:①直接使用su USERNAME切換用戶;②圖形終端下打開的命令窗口;③自動執行的shell腳本;
讀取配置順序:~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh,不讀取/etc/profile和~/.bash_profile;