centos7用戶,組及文件權限管理

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 等

這些文件主要用來定義用戶的環境變量的。

一.用戶管理

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
相關文章
相關標籤/搜索