centos7安裝過程當中若是沒有建立用戶的話,默認只有ROOT用戶,這個用戶是具備最高權限的賬戶,能夠作任何事情,但實際生產環境中咱們通常不會使用這個用戶,由於權限太大了,很危險。html
因此在生產環境中就要建立一個或多個用戶賬戶,分配合適的權限來使用,用過windows的都知道,windows也是多用戶,多任務的操做系統,每一個用戶也都有配置文件,用來定義和保存用戶的環境變量,包括用戶的家目錄,桌面等的配置。那麼linux一樣也是多用戶,多任務操做系統,一樣能夠建立多個用戶,定義每一個用戶的所屬組,家目錄,登陸的shell,郵件等等環境變量。linux
在centos7中和用戶相關的配置文件主要包括如下這麼幾個shell
/etc/passwdwindows
此文件保存着:用戶名:密碼:UID:GID:用戶描述:主目錄:登陸shellcentos
/etc/shadowbash
此文件記錄的行與passwd中的行一一對應,保存着:用戶名:密碼:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標誌app
/etc/group工具
此文件保存着:用戶組名稱:用戶組密碼:GID:用戶列表(多個用戶之間用,分隔)測試
/etc/gshadowui
此文件與/etc/group文件中的行對應,保存着:用戶組名:加密碼後的密碼:組管理員(多個用,分隔):組成員(多個用,分隔)
/etc/default/useradd
這個文件主要保存着 建立帳戶時的默認值,使用useradd –D查看到的內容就是這個文件中的內容。
/etc/skel
這是個一個目錄,至關於windows中公用的帳號環境設置,好比,能夠在這個目錄裏放一個文本文件,當建立用戶時,在每一個用戶的家目錄裏均可以看到這個文件,固然也能夠放置公共的配置文件,建立用戶時就能夠延用這個配置。
/etc/login.defs
這個是用來設置用戶賬號限制的配置文件,好比密碼的最大過時天數,長度等,但優先級小於/etc/shadow
/etc/profile
這個文件主要用來保存環境變量的,是全局的,由系統管理員管理
~/.bashrc .bash_history .bash_profile .bash_logout 等
這些文件主要用來定義用戶的環境變量的。
命令用法: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目錄裏的文件被複制到了新建立的用戶的家目錄裏,注意,已經建立好的用戶家目錄裏是沒有的,只對新建立的用戶有效。
使用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.
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
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
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
groupdel 組名
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共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
例:將 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
例:將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
例:查看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