linux文件權限,用戶和組

文件權限

默認權限分配 umaskmysql

umask是經過八進制的數值來定義用戶建立文件或目錄的默認權限的
安全權限的臨界點是,文件默認權限是644,目錄默認權限是755

[root@Poppy joker]# umask 
0022 根據下面的判斷來設置默認的權限分配 if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then umask 002 else umask 022 fi 因此你是root登陸的話,umask是022,若是是uid大於199而且uid和gid不一樣umask就是002 控制umask方法,umask + 權限 文件的權限 666 所有權限 022 umask默認值 644 文件默認權限 目錄權限 777 022 755

特殊權限位linux

setuid位
linux系統基本權限位爲9位權限,但還有額外3位權限位,共12位權限
suid    s(有x)  S  4 用戶對應的權限位,用戶對應的3位上 sgid s(有x) S 2 用戶組對應的權限位,用戶組對應的3位上 sticky t(有x) T 1 其餘用戶對應的權限位 [root@Poppy ~]# ls -l `which passwd` -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd 屬主有個s位,也就是suid,就是說執行命令的任意用戶能夠得到該屬主的權限 u+s u-s,suid針對命令和二進制程序的 setgid位 sgid僅對二進制命令有效 執行命令的任意用戶能夠得到該屬組的權限 g+s g-s 黏貼位 其餘用戶帶個t就是黏貼位,像/tmp目錄同樣 777 若是設置了黏貼位,除非目錄的屬主和root用戶有權限刪除它,除此以外其它用戶不能刪除這個目錄

 特殊權限對應的數字小結:redis

suid 4000權限字符s(S),用戶位的x位上設置
chmod 4755 /bin/rm 或 chmod u+s joker

sgid 2000權限字符s(S),用戶組位的x位上設置
chmod 2755 joker.txt 或 chmod g+s joker

粘滯位 1000權限字符t(T),其餘用戶位的x位上設置
chmod 1777 /tmp 或 chmod o+t /tmp
若是對應位有x,字符權限表現位小寫,不然表現爲大寫

用戶管理

Linux是多任務,多用戶的系統,每一個文件和進程,都須要對應一個用戶和用戶,linux系統經過uid和gid來識別用戶和組的sql

用戶分類

超級用戶:uid=0 例如:root
普通用戶:uid=500-65535,是由root受權
  關聯的四個文件:
  /etc/passwod /etc/shadow/ /etc/group /etc/gshadow
虛擬用戶:uid=1-499shell

/etc/skel/*文件

存儲家目錄環境變量信息vim

[root@Poppy ~]# useradd joker
[root@Poppy ~]# cp -a /etc/skel/* /home/joker/  # 並無執行
[root@Poppy ~]# ls /etc/skel/ -la
total 28
drwxr-xr-x.  2 root root  4096 Aug 18  2017 .
drwxr-xr-x. 88 root root 12288 Jun 22 15:14 ..
-rw-r--r--   1 root root    18 Dec  7  2016 .bash_logout
-rw-r--r--   1 root root   193 Dec  7  2016 .bash_profile
-rw-r--r--   1 root root   231 Dec  7  2016 .bashrc

[root@Poppy ~]# ls -la /home/joker/
total 20
drwx------  2 joker joker 4096 Jun 22 15:14 .
drwxr-xr-x. 3 root  root  4096 Jun 22 15:14 ..
-rw-r--r--  1 joker joker   18 Dec  7  2016 .bash_logout
-rw-r--r--  1 joker joker  193 Dec  7  2016 .bash_profile
-rw-r--r--  1 joker joker  231 Dec  7  2016 .bashrc

/etc/skel的做用安全

1. 能夠把通知的呢絨放到skel,讓登陸的人去看
2. 統一初始化新用戶環境變量
3. 出現-bash-4.1$,緣由和解決方法家目錄環境變量文件沒了,要將/etc/skel/*文件拷回/home/joker/便可,注意要用用戶,不能用root操做

/etc/login.defs文件

用來定義建立用戶時須要的一些用戶的配置信息,如建立用戶時是否須要家目錄,uid和gid的範圍,用戶及密碼的有效期限bash

[root@Poppy ~]# cat /etc/login.defs |grep -v "#"

MAIL_DIR        /var/spool/mail

PASS_MAX_DAYS   99999   密碼有效期
PASS_MIN_DAYS   0
PASS_MIN_LEN    5       最小長度
PASS_WARN_AGE   7

UID_MIN                  1000
UID_MAX                 60000
SYS_UID_MIN               201
SYS_UID_MAX               999

GID_MIN                  1000
GID_MAX                 60000
SYS_GID_MIN               201
SYS_GID_MAX               999

CREATE_HOME     yes

UMASK           077

USERGROUPS_ENAB yes

ENCRYPT_METHOD SHA512 

用戶管理命令

1. useradd 添加用戶服務器

/etc/default/useradd ,是在使用useradd添加用戶時的一個須要調用的一個默認的配置文件app

[root@Poppy ~]# cat /etc/default/useradd 
# useradd defaults file
GROUP=100           依賴於/etc/login.defs的USERGROUPS_ENAB參數,若是爲no,則此處控制
HOME=/home
INACTIVE=-1     是否啓用帳號過時停權,-1表示不啓用
EXPIRE=            帳號終止日期,不設置表示不啓用
SHELL=/bin/bash
SKEL=/etc/skel  新用戶默認的文件存放路徑
CREATE_MAIL_SPOOL=yes  是否建立郵箱

useradd -D -s /bin/bash 能夠修改默認配置,-D就是指的/etc/default/useradd文件

參數參考:

useradd 
-u 指定uid
-s 指定登陸shell /sbin/nologin
-c 註釋
-d 家目錄
-G 屬於多個組
-m 建立家目錄
-g 屬於的主組
-e 指定過時時間  「2018/08/08-M 不建立家目錄

  [root@Poppy ~]# useradd -c "描述" -u 1111 -G joker -s /bin/sh -md /lili lili
  [root@Poppy ~]# tail -1 /etc/passwd
  lili:x:1111:1111:描述:/lili:/bin/sh

2. userdel 刪除用戶

userdel -r user
-r將家目錄也一併刪除

/etc/passwod /etc/shadow/ /etc/group /etc/gshadow 裏面關於user的信息都會被刪除

3. groupadd 添加組

與groupadd  命令有關的文件
/etc/group 用戶組相關文件
/etc/gshadow 用戶組加密相關文件

-g指定組id
groupadd -g 101 user

4. groupdel 刪除組

groupdel groupuser

5. passwd 修改密碼

不加用戶,修改當前用戶
/etc/shadow

--stdin 從stdin讀入密碼
echo "123456"|passwd --stdin joker

6. gpasswd 更改用戶組密碼

gpasswd 組名便可更改

7. chage 用來設置或修改用戶密碼有效期限

-l 用戶信息,主要讀取的是shadow文件

[root@Poppy ~]# chage  -l root
Last password change                                    : Jun 06, 2018 密碼修改時間
Password expires                                        : never  密碼過時
Password inactive                                       : never  密碼禁用,停用
Account expires                                         : never 
Minimum number of days between password change          : 0  多少天內禁止修改密碼
Maximum number of days between password change          : 99999  多少天之後修改新密碼
Number of days of warning before password expires       : 7  密碼過時前多少天開始提醒

-E 帳號過時時間,寫法MM/DD/YY
chage -E "20181212" user

passwd  -n 7  -x 60  -w 10    -i      30   joker
        min   max    warning  inactive

chage   -m 7  -M 60  -w 10    -I      30   oldboy

8. usermod 修改用戶信息

參數與useradd相同

usermod -L user 凍結
     -U user 解凍

附贈 /etc/passwod /etc/shadow/ /etc/group /etc/gshadow裏面的每行每段的解釋

1)/etc/passwd 的內容理解:
  在/etc/passwd 中,每一行都表示的是一個用戶的信息;一行有7個段位;每一個段位用:號分割,例如:


   beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
   linuxsir:x:501:502::/home/linuxsir:/bin/bash


  第一字段:用戶名(也被稱爲登陸名);在上面的例子中,咱們看到這兩個用戶的用戶名分別是 beinan 和linuxsir;
  第二字段:口令;在例子中咱們看到的是一個x,其實密碼已被映射到/etc/shadow 文件中;
  第三字段:UID ;請參看本文的UID的解說;
  第四字段:GID;請參看本文的GID的解說;
  第五字段:用戶名全稱,這是可選的,能夠不設置,在beinan這個用戶中,用戶的全稱是beinan sun ;而linuxsir 這個用戶是沒有設置全稱;
  第六字段:用戶的家目錄所在位置;beinan 這個用戶是/home/beinan ,而linuxsir 這個用戶是/home/linuxsir ;
  第七字段:用戶所用SHELL 的類型,beinan和linuxsir 都用的是 bash ;因此設置爲/bin/bash ;

2)關於UID 的理解:
  UID 是用戶的ID 值,在系統中每一個用戶的UID的值是惟一的,更確切的說每一個用戶都要對應一個惟一的UID
,系統管理員應該確保這一規則。系統用戶的UID的值從0開始,是一個正整數,至於最大值能夠在/etc/login.defs
能夠查到,通常Linux發行版約定爲60000;
  UID 是確認用戶權限的標識,用戶登陸系統所處的角色是經過UID 來實現的,而非用戶名,切記; 在Linux 中,root的UID是0,擁有系統最高權限;好比我在/etc/passwd 中把beinan的UID改成0後,你設想會發生什麼呢?beinan這個用戶會被確認爲root用戶。beinan這個賬號能夠進行全部root的操做;
  
  通常狀況下,每一個Linux的發行版都會預留必定的UID和GID給系統虛擬用戶佔用,虛擬用戶通常是系統安裝時就有的,是爲了完成系統任務所必須的用戶,但虛擬用戶是不能登陸系統的,好比ftp、nobody、adm、rpm、bin、shutdown等;預留數量以各個系統中/etc/login.defs
中的 UID_MIN 的最小值爲準;好比Fedora 系統 login.defs的UID_MIN是500,而UID_MAX
值爲60000,也就是說咱們經過adduser默認添加的用戶的UID的值是500到60000之間;

 

二、關於/etc/shadow ;
  1)/etc/shadow 概說;
  /etc/shadow文件是/etc/passwd 的影子文件,這個文件並不禁/etc/passwd
而產生的,這兩個文件是應該是對應互補的;shadow內容包括用戶及被加密的密碼以及其它/etc/passwd
不能包括的信息,好比用戶的有效期限等;這個文件只有root權限能夠讀取和操做,權限以下:
  -r——– 1 root root 1.5K 10月 16 09:49 /etc/shadow

  2)/etc/shadow 的內容分析;
  /etc/shadow 文件的內容包括9個段位,每一個段位之間用:號分割;咱們以以下的例子說明;


  beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
  linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:


  第一字段:用戶名(也被稱爲登陸名),在/etc/shadow中,用戶名和/etc/passwd 是相同的,這樣就把passwd 和shadow中用的用戶記錄聯繫在一塊兒;這個字段是非空的;
  第二字段:密碼(已被加密),若是是有些用戶在這段是x,表示這個用戶不能登陸到系統;這個字段是非空的;
  第三字段:上次修改口令的時間;這個時間是從1970年01月01日算起到最近一次修改口令的時間間隔(天數),您能夠經過passwd 來修改用戶的密碼,而後查看/etc/shadow中此字段的變化;
  第四字段:兩次修改口令間隔最少的天數;若是設置爲0,則禁用此功能;也就是說用戶必須通過多少天才能修改其口令;此項功能用處不是太大;默認值是經過/etc/login.defs文件定義中獲取,PASS_MIN_DAYS 中有定義;
  第五字段:兩次修改口令間隔最多的天數;這個能加強管理員管理用戶口令的時效性,應該說在加強了系統的安全性;若是是系統默認值,是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_MAX_DAYS 中定義;
  第六字段:提早多少天警告用戶口令將過時;當用戶登陸系統後,系統登陸程序提醒用戶口令將要做廢;若是是系統默認值,是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_WARN_AGE 中定義;
  第七字段:在口令過時以後多少天禁用此用戶;此字段表示用戶口令做廢多少天后,系統會禁用此用戶,也就是說系統會不能再讓此用戶登陸,也不會提示用戶過時,是徹底禁用;
  第八字段:用戶過時日期;此字段指定了用戶做廢的天數(從1970年的1月1日開始的天數),若是這個字段的值爲空,賬號永久可用;
  第九字段:保留字段,目前爲空,以備未來Linux發展之用;
  若是更爲詳細的,請用 man shadow來查看幫助,您會獲得更爲詳盡的資料;

 

2、關於用戶組;
  具備某種共同特徵的用戶集合起來就是用戶組(Group)。用戶組(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件;
  一、/etc/group 解說;
文件是用戶組的配置文件,內容包括用戶和用戶組,而且能顯示出用戶是歸屬哪一個用戶組或哪幾個用戶組,由於一個用戶能夠歸屬一個或多個不一樣的用戶組;同一用
戶組的用戶之間具備類似的特徵。

二、/etc/group 內容具體分析
  /etc/group 的內容包括用戶組(Group)、用戶組口令、GID及該用戶組所包含的用戶(User),每一個用戶組一條記錄;格式以下:
  group_name:passwd:GID:user_list
  在/etc/group 中的每條記錄分四個字段:
  第一字段:用戶組名稱;
  第二字段:用戶組密碼;
  第三字段:GID
  第四字段:用戶列表,每一個用戶之間用,號分割;本字段能夠爲空;若是字段爲空表示用戶組爲GID的用戶名;
  咱們舉個例子:
  root:x:0:root,linuxsir 注:用戶組root,x是密碼段,表示沒有設置密碼,GID是0,root用戶組下包括root、linuxsir以及GID爲0的其它用戶(能夠經過/etc/passwd查看);;

2、關於GID ;
  GID和UID相似,是一個正整數或0,GID從0開始,GID爲0的組讓系統付予給root用戶組;系統會預留一些較靠前的GID給系統虛擬
用戶(也被稱爲假裝用戶)之用;查看系統添加用戶組默認的GID範圍應該查看 /etc/login.defs 中的 GID_MIN 和GID_MAX 值;
  咱們能夠對照/etc/passwd和/etc/group 兩個文件;咱們會發現有默認用戶組之說;即當一個用屬於多個組時會有一個默認的組;在建立目錄和文件時,會使用默認的用戶組;

 

三、/etc/gshadow 解說;
  /etc/gshadow是/etc/group的加密資訊文件,好比用戶組(Group)管理密碼就是存放在這個文件。/etc
/gshadow和/etc/group是互補的兩個文件;對於大型服務器,針對不少用戶和組,定製一些關係結構比較複雜的權限模型,設置用戶組密碼是極
有必要的。好比咱們不想讓一些非用戶組成員永久擁有用戶組的權限和特性,這時咱們能夠經過密碼驗證的方式來讓某些用戶臨時擁有一些用戶組特性,這時就要用
到用戶組密碼;
  /etc/gshadow 格式以下,每一個用戶組獨佔一行;
  groupname:password:admin,admin,…:member,member,…
  第一字段:用戶組
  第二字段:用戶組密碼,這個段能夠是空的或!,若是是空的或有!,表示沒有密碼;
  第三字段:用戶組管理者,這個字段也可爲空,若是有多個用戶組管理者,用,號分割;
  第四字段:組成員,若是有多個成員,用,號分割;
  舉例:
  beinan:!::linuxsir
   linuxsir:oUS/q7NH75RhQ::linuxsir
  第一字段:這個例子中,有兩個用戶組beinan用linuxsir
  第二字段:用戶組的密碼,beinan用戶組無密碼;linuxsir用戶組有已經,已經加密;
  第三字段:用戶組管理者,二者都爲空;
  第四字段:beinan用戶組所擁有的成員是linuxsir ,而後還要對照一下/etc/group和/etc/passwd
查看是否還有其它用戶,通常默認添加的用戶,有時同時也會建立用戶組和用戶名同名稱; linuxsir 用戶組有成員linuxisir ;
  如何設置用戶組的密碼? 咱們能夠經過 gpasswd 來實現;不過通常的狀況下,沒有必要設置用戶組的密碼;不過本身實踐一下也有必要;下面是一個爲linuxsir用戶組設置密碼的例子;
  gpasswd 的用法: gpasswd 用戶組
  
[email=root@localhost]root@localhost[/email]
~]# gpasswd linuxsir
  正在修改 linuxsir 組的密碼
  新密碼:
  請從新輸入新密碼:
  用戶組之間的切換,應該用 newgrp ,這個有點象用戶之間切換的su ;我先舉個例子:
  [beinan@localhost ~]$ newgrp linuxsir
  密碼:
  [beinan@localhost ~]$ mkdir lingroup
   [beinan@localhost ~]$ ls -ld lingroup/
  drwxr-xr-x 2 beinan linuxsir 4096 10月 18 15:56 lingroup/
  [beinan@localhost ~]$ newgrp beinan
   [beinan@localhost ~]$ mkdir beinangrouptest
   [beinan@localhost ~]$ ls -ld beinangrouptest
  drwxrwxr-x 2 beinan beinan 4096 10月 18 15:56 beinangrouptest
  說明:我是以beinan用戶組切換到linuxsir用戶組,而且建了一個目錄,而後再切換回beinan用戶組,又建了一個目錄,請觀察兩個目錄屬用戶組的不一樣;仍是本身體會吧;
建立用戶發生變化的文件內容解釋

用戶登陸信息查詢

# w 顯示誰登陸,而且在作什麼
[root@Poppy ~]# w
 16:20:10 up 16 days,  2:10,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    61.149.21.148    14:16    1:48m  0.04s  0.04s -bash
root     pts/2    61.149.21.148    15:13   53:06   0.01s  0.01s -bash
root     pts/3    61.149.21.148    16:16    2.00s  0.01s  0.00s w

# last 根據的是/var/log/wtmp文件
[root@Poppy ~]# last
root     pts/3        61.149.21.148    Fri Jun 22 16:16   still logged in   
root     pts/2        61.149.21.148    Fri Jun 22 15:13   still logged in   
root     pts/0        61.149.21.148    Fri Jun 22 14:16   still logged in   
root     pts/0        61.149.21.148    Fri Jun 22 14:12 - 14:16  (00:03)    
root     pts/0        123.122.218.236  Thu Jun 21 22:34 - 02:24  (03:50)  

# lastlog 根據/var/log/lastlog文件,計算機用戶最近登陸的狀況
rsync            pts/1                     Wed Jun  6 18:35:01 +0800 2018
www                                        **Never logged in**
redis                                      **Never logged in**

# groups user 用戶屬於哪一個組
[root@Poppy ~]# groups root
root : root

# users 用戶的組信息,可是好像沒啥用

# env|grep -i 用戶,查看用戶的環境變量
  [root@Poppy ~]# su - joker
  Last login: Fri Jun 22 21:33:00 CST 2018 on pts/2
  [joker@Poppy ~]$ env |grep -i joker
  USER=joker
  MAIL=/var/spool/mail/joker
  PATH=/application/mysql/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/joker/.local/bin:/home/joker/bin
  PWD=/home/joker
  HOME=/home/joker
  LOGNAME=joker
# su 命令
su - 用戶,但願你加-,-至關於用戶的環境變量,就是切換成了用戶的環境變量

# su - 用戶 -c command,還在當前,可是我內部在用戶執行了個命令,多用於開機啓動的命令,在任務計劃裏面

sudo

咱們能夠把某些超級用戶權限分類有針對性受權給指定的普通用戶,而且普通用戶不須要知道root密碼就可使用獲得的受權。

sudo提權實現沒有權限的用戶執行命令
首先,配置sudoers:
終端命令;visudo,至關於vim 配置文件/etc/sudoers
在第98行以下
## Allow root to run any commands anywhere
用戶或者組   機器=受權角色  可執行命令
root    ALL=(ALL)       ALL
joker   ALL=(ALL)       /usr/bin/passwd
@group  ALL=(ALL)       ALL
user    ALL=(ALL)       NOPASSWD:ALL
解釋:
第一個ALL表明機器,就是全部機器,第二個ALL表明全部角色,第三個ALL表明能夠執行全部命令,NOPASSWD表明提權命令時不須要提示密碼

注意;
若是,提示命令找不到,極可能是環境變量致使
root下,echo $path
user下,echo $path
在user下,修改vi ~/.bash_profile,將/usr/local/sbin:/sbin:/usr/sbin加入進去

sudo -l 查看用戶有什麼權限
visudo -c 檢查語法

/etc/sudoers配置文件

# 主機別名
## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using 
## wildcards for entire domains) or IP addresses instead.
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2

# 用戶別名
## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem

# 用戶身份別名
Runas_Alias OP = root

# 命令別名
## Command Aliases
## These are groups of related commands...

## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

# 縮寫
User_Alias JJADMINS = joker
Cmnd_Alias SYSTEMCMD = /bin/ping,/bin/grep,/bin/tail,/bin/cat
Runas_Alias OP = root
JJADMINS ALL=(OP) SYSTEMCMD

  別名要大寫
  命令路徑要用全路徑
  用「\」換行

sudo審計日誌

凡是sudo執行的命令都會被記錄到日誌

[root@Poppy ~]# rpm -qa sudo rsyslog
rsyslog-7.4.7-16.el7.x86_64
sudo-1.8.6p7-23.el7_3.x86_64

[root@Poppy ~]# Defaults logfile=/var/log/sudo.log >> /etc/sudoers

[root@Poppy ~]# cat /var/log/sudo.log 
Jun 22 22:28:54 : joker : TTY=pts/2 ; PWD=/home/joker ; USER=root ;
    COMMAND=/bin/ping baidu.com
Jun 22 22:29:03 : joker : TTY=pts/2 ; PWD=/home/joker ; USER=root ;
    COMMAND=/bin/cat
相關文章
相關標籤/搜索