centos7安裝過程中如果沒有創建用戶的話,預設只有ROOT用戶,這個用戶是具有最高許可權的帳戶,可以做任何事情,但實際生產環境中我們一般不會使用這個用戶,因為許可權太大了,很危險。 所以在生產環境中就要創建一個或多個用戶帳戶,分配合適的許可權來使用,用過windows的都知道,windows也是多用戶 ...
centos7安裝過程中如果沒有創建用戶的話,預設只有ROOT用戶,這個用戶是具有最高許可權的帳戶,可以做任何事情,但實際生產環境中我們一般不會使用這個用戶,因為許可權太大了,很危險。
所以在生產環境中就要創建一個或多個用戶帳戶,分配合適的許可權來使用,用過windows的都知道,windows也是多用戶,多任務的操作系統,每個用戶也都有配置文件,用來定義和保存用戶的環境變數,包括用戶的家目錄,桌面等的配置。那麼linux同樣也是多用戶,多任務操作系統,同樣可以創建多個用戶,定義每個用戶的所屬組,家目錄,登錄的shell,郵件等等環境變數。
在centos7中和用戶相關的配置文件主要包括以下這麼幾個
/etc/passwd
此文件保存著:用戶名:密碼:UID:GID:用戶描述:主目錄:登錄shell
/etc/shadow
此文件記錄的行與passwd中的行一一對應,保存著:用戶名:密碼:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標誌
/etc/group
此文件保存著:用戶組名稱:用戶組密碼:GID:用戶列表(多個用戶之間用,分隔)
/etc/gshadow
此文件與/etc/group文件中的行對應,保存著:用戶組名:加密碼後的密碼:組管理員(多個用,分隔):組成員(多個用,分隔)
/etc/default/useradd
這個文件主要保存著 創建賬戶時的預設值,使用useradd –D查看到的內容就是這個文件中的內容。
/etc/skel
這是個一個目錄,相當於windows中公用的賬號環境設置,比如,可以在這個目錄里放一個文本文件,當創建用戶時,在每個用戶的家目錄里都可以看到這個文件,當然也可以放置公共的配置文件,創建用戶時就可以延用這個配置。
/etc/login.defs
這個是用來設置用戶帳號限制的配置文件,比如密碼的最大過期天數,長度等,但優先順序小於/etc/shadow
/etc/profile
這個文件主要用來保存環境變數的,是全局的,由系統管理員管理
~/.bashrc .bash_history .bash_profile .bash_logout 等
這些文件主要用來定義用戶的環境變數的。
一.用戶管理
1.創建用戶
命令用法:useradd 或 adduser [option] 用戶名
useradd 或 adduser –D 用來查看創建賬戶時的預設值
useradd 或 adduser –D [option] 用來指定或修改創建賬戶時的預設值
一般可以修改預設值的參數有:-b –e –f –g –s)
我們用 useradd –help來看一下都有哪些參數
[root@ha1 ~]# useradd --help Usage: useradd [options] LOGIN useradd –D useradd -D [options] Options: -b, --base-dir BASE_DIR 指定創建用戶HOME目錄的位置,一般結合 –D 使用 -c, --comment COMMENT 給新用戶添加備註 -d, --home-dir HOME_DIR 指定用戶家目錄的文件名 -D, --defaults 用來查看創建賬戶時的預設值,也就是/etc/default/useradd文件中的內容 -e, --expiredate EXPIRE_DATE 用YYYY-MM-DD格式指定一個賬戶過期的日期 -f, --inactive INACTIVE 指定這個賬戶密碼過期後多少天這個賬戶被禁用;0表示密碼一過期就被禁用,-1表示禁用這 個功能 -g, --gid GROUP 指定用戶所屬組的GID或組名 -G, --groups GROUPS 指定用戶除所屬組外的一個或多個附加組 -h, --help display this help message and exit -k, --skel SKEL_DIR 必須和-m一起使用,將/etc/skel目錄的內容複製到用戶的HOME目錄 -K, --key KEY=VALUE 主要用來改寫/etc/login.defs文件中的預設值,如:-K UID_MIN=100 –K UID_MAX=499 -l, --no-log-init do not add the user to the lastlog and faillog databases -m, --create-home 創建用戶的HOME目錄 -M, --no-create-home 不創建用戶的HOME目錄 -N, --no-user-group 不創建與用戶同名的用戶組 -o, --non-unique 僅與-u選項結合使用,允許創建一個用戶ID不唯一的用戶 -p, --password PASSWORD 為用戶指定預設密碼 -r, --system 創建系統賬戶 -R, --root CHROOT_DIR 允許用戶根據配置文件來切換家目錄 -s, --shell SHELL 指定用戶登錄的shell -u, --uid UID 指定用戶的UID -U, --user-group 創建與用戶同名的組 -Z, --selinux-user SEUSER 此選項不常用
舉例說明:
創建名為jerry的用戶,指定HOME目錄:/home/h_jerry,指定UID 1022,不創建同名用戶組,指定密碼:jerry,指定shell:/bin/sh,指定賬戶過期時間:2017-08-09,允許密碼過期後使用,添加用戶描述:first user
[root@ha1 ~]# useradd -m -d /home/h_jerry -u 1022 -N -p jerry -s /bin/sh -e 2017-08-09 -f -1 -c "first user" jerry
用戶創建完成沒報錯說明命令成功執行,那就一步一步來驗證一下:
驗證用戶的UID
[root@ha1 ~]# id jerry uid=1022(jerry) gid=100(users) groups=100(users)
看到用戶ID 1022沒錯是我們指定的數字,由於沒有創建指定的同名組,所以就用/etc/default/useradd中的預設值的組ID100,預設加入到users組中,都有哪些預設值呢,我們來看一下/etc/default/useradd這個文件
[root@ha1 ~]# cat /etc/default/useradd # useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
看下/etc/passwd文件對應的jerry行的信息
[root@ha1 ~]# cat /etc/passwd |grep jerry jerry:x:1022:100:first user:/home/h_jerry:/bin/sh
此文件由7段冒號隔開的欄位
第一欄位 jerry表是用戶名
第二欄位 X表示加密碼後的密碼
第三欄位 1022表示UID
第四欄位 100表示組ID
第五欄位 first user表示描述信息
第六欄位 /home/h_jerry表示家目錄
第七欄位 /bin/sh表示登錄的sehll
再來看一下/etc/shadow文件中的內容
[root@ha1 ~]# cat /etc/shadow |grep jerry jerry:jerry:17386:0:99999:7::17387:
/etc/shadow文件由9個欄位組成,用:分隔
第一欄位 jerry:表示用戶名
第二欄位 jerry:表示密碼,這裡看到是明文的,並沒有被加密碼,但是passwd jerry來修改密碼後就會是加密的。
第三欄位 17386:表示上次修改密碼的時間,這個時間是從1970年1月1號到最近一次修改密碼的時間間隔天數
第四欄位 0:表示2次修改密碼間隔的天數,0表示禁用此功能
第五欄位 99999:表示2次修改密碼間隔最多的天數,也有預設值,是通過/etc/login.defs中PASS_MAX_DAYS定義
第六欄位 7:表示提前7天警告用戶密碼過期,也有預設值,是通過/etc/login.defs中PASS_WARN_AGE定義
第七欄位 在密碼過期之後多少天禁用此用戶,也就是過期多少天後系統禁用此用戶,不能登錄,不會提示過期,完全禁用,
空:表示密碼過期後賬號仍然可用(-f –1)
第八欄位 17387:用戶過期日期(從19700101開始的天數)和創建用戶指定過期日期正好相符(-e 2017-08-09)
第九欄位 保留欄位 留空
看一下用戶的HOME目錄
[root@ha1 ~]# ll /home total 0 drwx------. 2 jerry users 62 Aug 8 21:37 h_jerry
[root@ha1 ~]# ll -a /home/h_jerry/ total 16 drwx------. 2 jerry users 83 Aug 9 18:45 . drwxr-xr-x. 4 root root 33 Aug 9 18:39 .. -rw-------. 1 jerry users 11 Aug 9 18:45 .bash_history -rw-r--r--. 1 jerry users 18 Aug 3 2016 .bash_logout -rw-r--r--. 1 jerry users 193 Aug 3 2016 .bash_profile -rw-r--r--. 1 jerry users 231 Aug 3 2016 .bashrc
OK,到這裡用戶創建已經成功,簡單梳理一下創建用戶時系統做了哪些事:
如果創建用戶不帶參數,系統會根據預設值(/etc/default/useradd,/etc/login.defs)創建用戶及同名用戶組,併在HOME目錄里創建同名家目錄,預設的登錄shell為/bin/bash。
如果創建用戶時帶了參數,那麼系統會根據參數來創建指定用戶信息。
用戶創建完成後,/etc/passwd,/etc/shadow這2個文件都會有相應的用戶信息。
在用戶家目錄里都會產生.bash_history .bash_logou .bash_profile .bashrc4個隱藏文件。
開篇提到了/etc/skel這個目錄,到底是乾什麼用的呢,試一下就知道了,在這個目錄里創建一個a.txt的文件,接著再創建一個tcl的新用戶,再看看用戶的家目錄。
[root@ha1 ~]# vi /etc/skel/a.txt [root@ha1 ~]# useradd tcl [root@ha1 ~]# ll /home/tcl/ total 4 -rw-r--r--. 1 tcl tcl 28 Aug 9 18:58 a.txt
看到了吧,在/etc/skel目錄里的文件被覆制到了新創建的用戶的家目錄里,註意,已經創建好的用戶家目錄里是沒有的,只對新創建的用戶有效。
2.為用戶設置密碼
使用passwd 用戶名 即可修改相應用戶的密碼
[root@ha1 ~]# passwd jerry Changing password for user jerry. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@ha1 ~]# echo "jerry" | passwd --stdin jerry Changing password for user jerry. passwd: all authentication tokens updated successfully.
3.刪除用戶
userdel 選項 用戶名
userdel –r 用戶名 刪除用戶及家目錄
[root@ha1 ~]# userdel -r tcl [root@ha1 ~]# ll /home total 0 drwx------. 2 jerry users 83 Aug 9 18:45 h_jerry drwx------. 2 test test 83 Aug 9 18:45 test
4.修改用戶
usermod 選項 用戶名
選項參數 和useradd命令參數大致相同
-d --home HOME_DIR 指定新的家目錄
-a --append 將用戶追加到附加組中而不移出其它組
-l --login NEW_LOGIN 指定新的用戶名
-L --lock 鎖定用戶
-m --move-home 和-d選項結合使用,移動家目錄中的內容到新的位置
舉例說明:
將jerry用戶改名為natasha,移動家目錄的內容到/home/natasha,指定新的UID為1010,登錄shell改為/bin/bash,並鎖定用戶
[root@ha1 ~]# usermod -l natasha -d /home/natasha -m -u 1010 -s /bin/bash jerry [root@ha1 ~]# ll /home total 0 drwx------. 2 natasha users 83 Aug 9 18:45 natasha drwx------. 2 test test 83 Aug 9 18:45 test [root@ha1 ~]# id natasha uid=1010(natasha) gid=100(users) groups=100(users) [root@ha1 ~]# cat /etc/passwd |grep natasha natasha:x:1010:100:first user:/home/natasha:/bin/bash
二.用戶組管理
1.創建組
groupadd 選項 組名
選項
-f --force 強制創建組即使組已存在,如果GID已存在將取消-g選項
-g --gid GID 指定組GID號
舉例說明:
創建一個名為natasha的組,並將用戶natasha和test分別加入natasha和test組中
[root@ha1 ~]# groupadd -g 1010 natasha
[root@ha1 ~]# usermod -a -G test test [root@ha1 ~]# cat /etc/group |grep -E "natasha|test" test:x:1023:test natasha:x:1010:test,natasha [root@ha1 ~]# usermod -a -G test natasha [root@ha1 ~]# cat /etc/group |grep -E "natasha|test" test:x:1023:test,natasha natasha:x:1010:test,natasha
2.刪除組
groupdel 組名
3.修改組
groupmod 選項 組名
選項
-g --gid GID 改變組的ID號
-n --new-name 改變組名
用法和usermod類似
總結一下,創建組後會在/etc/group,/etc/gshadow文件中產生相應的組信息
/etc/group文件格式說明:分為4個欄位,用冒號隔開
natasha:x:1010:test,natasha
第一欄位:表示組名
第二欄位:表示組密碼,存放在/etc/gshadow文件中
第三欄位:表示組ID號
第四欄位:表示組成員,多個組成員用逗號隔開
/etc/gshadow文件格式說明:分為4個欄位,用冒號隔開
natasha:!::test,natasha
第一欄位:組名
第二欄位:加密碼後的密碼
第三欄位:組管理員(多個用,分隔)
第四欄位:組成員(多個用,分隔)
三.文件,目錄許可權管理
在linux中設置文件許可權非常重要,也是最基本的。linux文件的許可權分為讀(r-4)寫(w-2)執行(x-1),和windows一樣設置許可權需要針對用戶,用戶所屬的組,還有其它用戶。只有設置了正確的許可權,相應的用戶才能根據許可權執行相應的操作,很多時候我們配置WEB服務,FTP服務等都需要對相應的文件或文件夾賦與相應的許可權才能正常跑起來,有時遇到問題通過查看錯誤日誌會發現很多情況下是由於許可權不當引起的。
文件許可權分一般許可權和特殊許可權
一般許可權主要指的是:文件所有者的許可權,所屬組的許可權,其它用戶許可權
特殊許可權主要指的是:許可權中帶s或S(SUID,SGID),t或T標誌位
和文件許可權有關的工具命令
ls –l 查看文件或目錄的許可權
umask 查看或設置許可權遮罩(即實際許可權=最大許可權-遮罩值)
chmod 改變文件或目錄的許可權
chown 更改文件或目錄的所有者
chgrp 更改文件或目錄的所屬組
getfacl 獲取文件或目錄許可權訪問控制列表
setfacl 設置文件或目錄許可權訪問控制列表
先來看一下文件許可權的查看方式,使用ll命令就可以查看長格式的文件許可權等信息
[root@ha1 test]# ll -rw-r--r--. 1 root root 67 Mar 29 20:07 README.md drwxr-xr-x. 3 root root 36 Mar 29 20:15 shell
[root@ha1 test]# ll /bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
許可權有3段組成,rwxrwxrwx代表最高許可權,修改許可權時也可以用777表示,-表示沒有此項許可權,本該出現x的位置出現s表示擁有SUID許可權。
SUID對應4,SGID對應2,SBIT對應1
SUID只對二進位程式有效,執行者對於程式需要有X許可權,在程式運行過程中,執行者(普通用戶)將臨時擁有程式所有者的許可權
SGID對於文件來說只對二進位程式有效,普通用戶將會臨時擁有所屬組的許可權,對於目錄來說,用戶對此目錄有RX許可權可以進入目錄,用戶進入目錄後,有效用戶組會變成該目錄的用戶組,若用戶在此目錄有w許可權,則用戶創建的文件用戶組與該目錄用戶組相同
umask說明
umask共4位:uid/gid,屬主,組,其它許可權。可以使用umask命令查看 預設是0022,不過一般用到的是後3位。
預設情況下,創建文件的許可權是644(6-0,6-2,6-2),創建目錄的許可權是755(7-0,7-2,7-2)
[root@ha1 test]# touch a [root@ha1 test]# umask 0022 [root@ha1 test]# mkdir b [root@ha1 test]# ll total 8 -rw-r--r--. 1 root root 0 Aug 10 19:01 a drwxr-xr-x. 2 root root 6 Aug 10 19:05 b -rwSr--r-T. 1 root root 65 Mar 29 21:02 index.html -rw-r--r--. 1 root root 67 Mar 29 20:07 README.md drwxr-xr-x. 3 root root 36 Mar 29 20:15 shell
修改文件許可權 chmod
例:將 a 文件許可權修改為:所有者有rwx,所屬組:rx,其它用戶:無許可權
[root@ha1 test]# chmod u+x,g+x,o-r a [root@ha1 test]# ll total 8 -rwxr-x---. 1 root root 0 Aug 10 19:01 a
修改文件所有者或所有組 chown chgrp
例:將a文件所屬組改為natasha,將b目錄的所有者改為natasha
[root@ha1 test]# chgrp natasha a [root@ha1 test]# chown -R natasha:root b [root@ha1 test]# ll total 8 -rwxr-x---. 1 root natasha 0 Aug 10 19:01 a drwxr-xr-x. 2 natasha root 6 Aug 10 19:05 b
設置更詳細的許可權 getfacl setfacl
例:查看a文件的詳細許可權信息
[root@ha1 test]# getfacl a # file: a # owner: root # group: natasha user::rwx group::r-x other::---
setfacl用法:
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
setfacl –-restore=file
參數:
-b,--remove-all:刪除所有擴展的acl規則,基本的acl規則(所有者,群組,其他)將被保留。
-k,--remove-default:刪除預設的acl規則。如果沒有預設規則,將不提示。
-n,--no-mask:不要重新計算有效許可權。setfacl預設會重新計算ACL mask,除非mask被明確的制定。 --mask:重新計算有效許可權,即使ACL mask被明確指定。
-d,--default:設定預設的acl規則。
--restore=file:從文件恢復備份的acl規則(這些文件可由getfacl -R產生)。通過這種機制可以恢復整個目錄樹的acl規則。此參數不能和除--test以外的任何參數一同執行。
--test:測試模式,不會改變任何文件的acl規則,操作後的acl規格將被列出。
-R,--recursive:遞歸的對所有文件及目錄進行操作。
-L,--logical:跟蹤符號鏈接,預設情況下只跟蹤符號鏈接文件,跳過符號鏈接目錄。
-P,--physical:跳過所有符號鏈接,包括符號鏈接文件。
--version:輸出setfacl的版本號並退出。
--help:輸出幫助信息。
--:標識命令行參數結束,其後的所有參數都將被認為是文件名 -:如果文件名是-,則setfacl將從標準輸入讀取文件名。
例:將a文件許可權設置為,test1用戶擁有rw許可權,test2用戶擁有x許可權,其它用戶擁有rx許可權
[root@ha1 test]# setfacl -m u:test1:rw,u:test2:x,o::rx a [root@ha1 test]# getfacl a # file: a # owner: root # group: natasha user::rwx user:test1:rw- user:test2:--x group::r-x mask::rwx other::r-x