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