1基本概念
Linux是一個多用戶多任務的分時操作系統,任何一個要使用系統資源的用戶,都必須首先向系統管理員申請一個賬號, 然後以這個賬號的身份進入系統。
爲了實現資源分派(系統管理員的權利)及出於安全的考慮,必須對用戶進行不同權限的分配。用戶組便於更高效地管理用戶權限。
用戶操作Linux需要經過三個步驟的權限認證:
Authentication:認證
Authorization:授權
Audition審計-->權限是否符合條例
操作系統爲了識別每個用戶,會給每個用戶定義一個ID,就是UID。用戶組就相當於多個用戶的容器,有的系統又叫角色(便於更高效地管理用戶權限);在linux系統中,用戶組也有一個ID,GID。
1.1 linux操作系統用戶
在linux中,用戶分爲兩大類:管理員用戶和普通用戶,其中普通用戶有分爲系統用戶和登錄用戶;
系統用戶:爲了能夠讓那些後臺進程或服務類進程以非管理員的身份運行,通常需要爲此創建多個普通用戶,這類用戶從來不用登陸系統。
登錄用戶:就是我們一般使用登錄linux的用戶。
用戶標識:user id,UID
通常使用16bits二進制數字表示(0-65535)
管理員的用戶標識:0
普通用戶:1-65535
系統用戶:1-499(Centos6)、1-999(Centos7)
登錄用戶:500-60000(Centos6)、1000-60000(Centos7)
linux通過名稱解析庫“/etc/passwd”文件解析用戶名與用戶ID之間的對應關係。
`~]# head /etc/passwd | column -ts:` 列按冒號對其查看
/etc/passwd:用戶信息庫
name:password:UID:GID:GECOS:directory:shell
name: 用戶名
password:可以是加密的密碼,也可是佔位符x;
UID:
GID:用戶所屬的主組的ID號;
GECOS:註釋信息
directory:用戶的家目錄;
shell:用戶的默認shell,登錄時默認shell程序;
1.2 linux操作系統用戶組
在Linux中,用戶組分類方式有三種:
1、管理員組、普通用戶組(系統用戶組,登錄用戶組)
2、用戶的基本組、用戶附加組
3、私有組(組名同用戶名,且只包含一個用戶;)、公共組(組內包含了多個用戶;)
用戶組標識:group id,GID
通常使用16bits二進制數字表示(0-65535)
管理員的用戶組標識:0
普通用戶組:1-65535
系統用戶組:1-499(Centos6)、1-999(Centos7)
登錄用戶組:500-60000(Centos6)、1000-60000(Centos7)
linux通過名稱解析庫“/etc/group”文件解析用戶名與用戶ID之間的對應關係。
/etc/group:組的信息庫
group_name:passwd:GID:user_list
user_list:該組用戶的成員;以此組爲附加組的用戶的用戶列表
1.3 linux操作系統密碼
用戶在登錄linux系統時,會對比password與之前保存在“/etc/shadow”、“/etc/gshadow”文件中的密碼是否一致。
密碼的使用策略:
1、使用隨機密碼;
2、最短長度不要低於8位;
3、應該使用大寫字母、小寫字母、數字和標點符號四類字符中至少三類;
4、定期更換;
生成有效密碼的命令:
~]# </dev/urandom tr -dc 0-9-A-Z-a-z-/|head -c ${1:-8};echo
~]# openssl rand -base64 32|tr A-Z a-z|cut -c 1-8
~]# strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 8 | tr -d '\n'; echo
~]# dd if=/dev/urandom bs=1 count=10 2>/dev/null | base64 -w 0 | rev | cut -b 2-9 | rev
加密算法(軍備資源):算法+密碼+salt=祕鑰(使用祕鑰對原文加解密操作):
對稱加密:加密和解密使用同一個密碼
非對稱加密:加密和解密使用的一對密鑰
密鑰對:公鑰(public key)、私鑰(private key)
單向加密:只能加密,不能解密;提取數據特徵碼;
定長輸出: 以16進製表示的輸出
雪崩效應:密碼中某一個字符改變,那麼整個加密後的密鑰都會改變
linux的密碼加密方式使用單向加密算法,並且添加隨機數(salt)計算得出的。
[root@localhost ~]# head -1 /etc/shadow
root:$6$ZNcau0h/$O396hKI/4ZAkVs/YfM82ViyToupcAQ3FMm.iP.7g73BuWoK7VjTnPOtpKA1u/P.8Y/eI.pCgeaBKm8XlPNw5h/:18071:0:99999:7:::
加密密碼:使用$分隔,第一個段表示使用的加密算法,第二個段表示添加的salt。第三段表示加密後的密碼.
系統識別算法ID | 算法名稱 |
---|---|
1 | md5:message digest,128bits |
2 | sha:secure hash algorithm,160bits |
3 | sha224 |
4 | sha256 |
5 | sha384 |
6 | sha512 |
- /etc/shadow:用戶密碼 (man 5 shadow)
用戶名:加密的密碼:最近一次修改密碼的時間(從1970開始的天數):最短使用期限:最長使用期限:警告期段:密碼禁用時間(非活動期限):賬戶過期期限:保留字段
1.4Linux安全上下文:
運行中的程序:進程 (process)
以進程發起者的身份運行:
進程所能夠訪問的所有資源的權限取決於進程的發起者的身份;
2權限管理
linux的文件管理權限分爲讀、寫和執行
]# ll grub.cfg
-rw-rw-r--+ 1 root root 4253 Jun 24 11:44 grub.cfg
共分爲五個部分:
-rwxrwxrwx+:
-:表示文件類型
左三位:定義user(owner)的權限
中三位:定義group的權限;
右三位:定義other的權限
+:是否啓用facl
進程安全上下文:
進程對文件的訪問權限應用模型:
進程的屬主與文件的屬主是否相同;如果相同,則應用屬主權限;
否則,則檢查進程的屬主是否屬於文件的屬組;如果是,則應用屬組權限;
否則,就只能應用other的權限;
權限:
r:readable, 讀
w:writable, 寫
x:excutable,執行
權限對文件的作用:
r:可獲取文件的數據;
w: 可修改文件的數據;
x:可將此文件運行爲進程;
權限對目錄的作用:
r:可使用ls命令獲取其下的所有文件列表;
w: 可修改此目錄下的文件列表;即創建或刪除文件;
x: 可cd至此目錄中,且可使用ls -l來獲取所有文件的詳細屬性信息;
mode:rwxrwxrwx
ownership:user, group
權限組合 | 二進制數 | 十進制數 |
---|---|---|
— | 000 | 0 |
–x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r– | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
3、相關命令
3.1用戶管理命令
useradd命令{非常重要****}:創建用戶
useradd [選項] 登錄名
-u, --uid UID:指定UID;
-g, --gid GROUP:指定基本組ID或組名,此組得事先存在;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用戶所屬的附加組,多個組之間用逗號分隔;
-c, --comment COMMENT:指明註釋信息;
-d, --home HOME_DIR:以指定的路徑爲用戶的家目錄;通過複製/etc/skel此目錄並重命名實現;指定的家目錄路徑如果事先存在,則不會爲用戶複製環境配置文件;
-s, --shell SHELL:指定用戶的默認shell,可用的所有shell列表存儲在/etc/shells文件中;
-r, --system:創建系統用戶;
-m 創建家目錄(沒什麼用)
-M,--no-create-home 不創建家目錄
-f, --inactive 密碼禁用時間
注意:創建用戶時的諸多默認設定配置文件爲/etc/login.defs 操作系統廠家使用
useradd -D:顯示創建用戶的默認配置;
useradd -D 選項: 修改默認選項的值;useradd -D -s /bin/tcsh 修改shell
修改的結果保存於/etc/default/useradd文件中;可用自己使用
usermod命令:修改用戶屬性
usermod [選項] 登錄
-u, --uid UID:修改用戶的ID爲此處指定的新UID;
-g, --gid GROUP:修改用戶所屬的基本組;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用戶所屬的附加組;原來的附加組會被覆蓋;()
-a, --append:與-G一同使用,用於爲用戶追加新的附加組;()
-c, --comment COMMENT:修改註釋信息;
-d, --home HOME_DIR:修改用戶的家目錄;用戶原有的文件不會被轉移至新位置;
-m, --move-home:
-s, --shell SHELL:修改用戶的默認shell;
-L, --lock:鎖定用戶密碼;即在用戶原來的密碼字符串之前添加一個"!";
-U, --unlock:解鎖用戶的密碼;
userdel命令:刪除用戶
userdel [選項] 登錄
-r:刪除用戶時一併刪除其家目錄;
id命令:顯示用戶的真實和有效的UID和GID
id [OPTION]… [USERNAME]
-u:僅顯示有效的UID;
-g:僅顯示用戶的基本組的ID;
-G:僅顯示用戶所屬的所有組的ID;
-n:顯示名字而非ID;一般與g一起使用:-ng
su命令:switch user
登錄式切換:會通過重新讀取目標用戶的配置文件來重新初始化
su - USERNAME
su -l USERNAME
非登錄式切換:不會讀取目標用戶的配置文件進行初始化
su USERNAME
注意:管理員可無密碼切換至其它任何用戶;其它用戶在切換用戶時必須輸入密碼。
-c “COMMAND”:僅以指定用戶的身份運行此處指定的命令
例如:su - USERNAME -c “whoami”
3.2 用戶組管理命令
groupadd命令:添加組
groupadd [選項] group_name
-g GID:指定GID,默認是上一個組的GID+1
-r:創建系統組;
groupmod命令:修改組屬性
groupmod [選項] GROUP
-g GID:修改GID
-n new_name:修改組名
groupdel 命令:刪除組
groupdel [選項] GROUP
3.3 用戶及用戶組練習
練習1:創建用戶gentoo,UID爲4001,基本組爲gentoo,附加組爲distro(GID爲5000)和peguin(GID爲5001);
groupadd -g 5001 peguin
groupadd -g 5000 distro
useradd -u 4001 -G distro,peguin gentoo
練習2:創建用戶fedora,其註釋信息爲"Fedora Core",默認shell爲/bin/tcsh;
useradd -c "Fedora Core" -s /bin/tcsh fedora
練習3:修改gentoo用戶的家目錄爲/var/tmp/gentoo;要求其原有文件仍能被用戶訪問;
usermod -d /var/tmp/gentoo/ gentoo
練習4:爲gentoo新增附加組netadmin;
groupadd netadmin
usermod -aG netadmin gentoo
3.4 密碼管理命令
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
(1) passwd:修改用戶自己的密碼;
(2) passwd USERNAME:修改指定用戶的密碼,但僅root有此權限;
-l, -u:鎖定和解鎖用戶;
-d:清除用戶密碼串;
-e DATE: 賬戶過期期限,日期;
-i DAYS:密碼非活動期限;
-n DAYS:密碼的最短使用期限;
-x DAYS:密碼的最長使用期限;
-w DAYS:警告期限;
--stdin【****批量修改密碼】
echo "PASSWORD" | passwd --stdin USERNAME
gpasswd命令:設置組密碼
組密碼文件:/etc/gshadow
gpasswd [選項] group
-a USERNAME:向組中添加用戶
-d USERNAME:從組中移除用戶
newgrp命令:臨時切換指定的組爲基本組;退出登錄後切換就失效了
newgrp [-] [group]
-: 會模擬用戶重新登錄以實現重新初始化其工作環境;
newgrp a b 切換用戶b的基本組爲a,並登錄,如果組a本來就不是用戶b的附近組,此時可能要求輸入組密碼
chage命令:更改用戶密碼過期信息
chage [選項] 登錄名
-d --lastday set date of last password change to LAST_DAY 最近日期 將最近一次密碼設置時間設爲“最近日期”
-E --expiredate set account expiration date to EXPIRE_DATE 過期日期 將帳戶過期時間設爲“過期日期”
-W --warndays set expiration warning days to WARN_DAYS 警告天數 將過期警告天數設爲“警告天數”
-m --mindays set minimum number of days before password change to MIN_DAYS 最小天數 將兩次改變密碼之間相距的最小天數設爲“最小天數”
-M --maxdays set maximim number of days before password change to MAX_DAYS 最大天數 將兩次改變密碼之間相距的最大天數設爲“最大天數”
-h, –help 顯示此幫助信息並推出
-I, –inactive INACITVE 過期 INACTIVE 天數後,設定密碼爲失效狀態
-l, –list 顯示帳戶年齡信息
-R, –root CHROOT_DIR chroot 到的目錄
其他幾個命令用戶管理命令:
chsh:修改shell
chfn:修改用戶基本信息
finger:顯示用戶基本信息
pwck:檢查用戶的密碼是否有問題
grpck:檢查組文件的完整性
whoami
(pwconv、pwunconv、grpconv、grpunconv這四個基本不用)
3.5 權限管理命令
chmod命令:
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
三類用戶:
u:屬主
g:屬組
o:其它
a: 所有
(1) chmod [OPTION]... MODE[,MODE]... FILE...
MODE表示法:
賦權表示法:直接操作一類用戶的所有權限位rwx;
u=
g=
o=
a=
授權表示法:直接操作一類用戶的一個權限位r,w,x;
u+, u-
g+, g-
o+, o-
a+, a-
(2) chmod [OPTION]... OCTAL-MODE FILE...
使用8進制的數字進行授權
(3) chmod [OPTION]... --reference=RFILE FILE...
選項:
-R, --recursive:遞歸修改
注意:用戶僅能修改屬主爲自己的那些文件的權限;
從屬關係管理命令:chown, chgrp
chown命令:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
選項:
-R:遞歸修改
chgrp命令:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注意:僅管理員可修改文件的屬主和屬組;
思考1:用戶對目錄有寫權限,但對目錄下的文件沒有寫權限時,能否修改此文件內容?能否刪除此文件?
不能修改文件內容,但可刪除文件
思考2:用戶對目錄有什麼權限時,可以使用mv命令。
執行權限
umask:文件的權限反向掩碼,遮罩碼;
文件:
666-umask
目錄:
777-umask
注意:之所以文件用666去減,表示文件默認不能擁有執行權限;如果減得的結果中有執行權限,則需要將其加1;
umask: 023
666-023=644
777-023=754
umask命令:
umask:查看當前umask
umask MASK: 設置umask
注意:此類設定僅對當前shell進程有效;
練習:完成以下任務
1、新建系統組mariadb, 新建系統用戶mariadb, 屬於mariadb組,要求其沒有家目錄,且shell爲/sbin/nologin;嘗試root切換至用戶,查看其命令提示符;
useradd -rM -s /sbin/nologin mariadb
2、新建GID爲5000的組mageedu,新建用戶gentoo,要求其家目錄爲/users/gentoo,密碼同用戶名;
groupadd -g 5000 mageedu
mkdir -p /users
useradd -d /users/gentoo gentoo
echo gentoo | passwd --stdin gentoo
3、新建用戶fedora,其家目錄爲/users/fedora,密碼同用戶名;
useradd -d /users/fedora fedora
echo fedora | passwd --stdin fedora
4、新建用戶www, 其家目錄爲/users/www;刪除www用戶,但保留其家目錄;
useradd -d /users/www www
userdel www
5、爲用戶gentoo和fedora新增附加組mageedu;
usermod -aG mageedu gentoo
usermod -aG mageedu fedora
6、複製目錄/var/log至/tmp/目錄,修改/tmp/log及其內部的所有文件的屬組爲 mageedu,並讓屬組對目錄本身擁有寫權限;
cp -rf /var/log /tmp
chown -R :mageedu /tmp/log
chmod -R g+w /tmp/log
install命令:
install - copy files and set attributes
單源複製:
install [OPTION]... [-T] SOURCE DEST
多源複製:
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
創建目錄:
install [OPTION]... -d DIRECTORY...
常用選項:
-m, --mode=MODE:設定目標文件權限,默認爲755;
-o, --owner=OWNER:設定目標文件屬主;
-g, --group=GROUP:設定目標文件屬組;