說說linux權限管理(1)

在這篇文章當中你可以看到:

1、linux系統文件普通權限

2、文件所屬主的設置,組的指定

3、特殊權限

4、acl權限

5、su命令及其注意事項和sudo權限

6、權限管理的注意點

0、首先,在linux下用戶賬戶是分角色的,由于角色的不同,每個角色,每個用戶的的權限和所能完成的任務也不同。而在實際管理中,用戶的角色是通過UID(用戶id號)來標識的,每個用戶的UID都是不同的。

 (1)root用戶:系統的的最高權限,UID為0,也被稱為超級用戶,在shell界面上用#標識,在linux上他就是皇帝,無所不能。

 (2)系統用戶:這類用戶也稱為虛擬用戶、偽用戶或假用戶,這類用戶不具有登錄linux系統的能力,但是確實是系統運行不可缺少的用戶,比如bin、mail、adm等等,這些是系統自身擁有的,或者我們配置某些服務軟件是也會創建虛擬用戶,如配置apache我們也會添加虛擬用戶,以防止軟件擁有過高的權限。系統用戶的UID為1-499

  (3)這類用戶能登錄系統,在linux系統上進行普通操作,能操作自己目錄下的內容,使用系統的權限受限,這些用戶是root創建的,其UID為500—60000

0.1、查看用戶信息:

[root@desperadochn ~]# cat /etc/passwd #/etc/passwd 用戶配置文件
root:x:0:0:root:/root:/bin/bash #root 用戶 UID為0
bin:x:1:1:bin:/bin:/sbin/nologin #系統用戶,不許登錄
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
desperadochn:x:1000:1000:desperadochn:/home/desperadochn:/bin/bash #普通用戶
hadoop:x:1001:1001::/home/hadoop:/bin/bash
ntp:x:38:38::/etc/ntp:/sbin/nologin
apahce:x:996:994::/home/apahce:/bin/bash
desperado:x:1002:1002::/home/desperado:/bin/bash

1、linux系統文件的普通權限:

        linux系統將文件普通權限分成了讀、寫、執行。需要風別賦予其權限,這樣權限管理就非常靈活了

1.1.1 文件權限的查看:

[root@desperadochn ~]# ls -l-rw-r--r--. 1 root root 66441 3月 19 12:13 1.txt 
-rw-r--r--. 1 root root 0 3月 19 13:10 2.txt 
-rw-r--r--. 1 root root 0 3月 16 23:30 a,b,c,d,e,f 
-rw-------. 1 root root 1146 2月 21 22:22 anaconda-ks.cfg 
drwxrwxrwx. 4 500 500 4096 3月 10 15:23 cmatrix-1.2a 
-rw-r--r--. 1 root root 74376 4月 1 2002 cmatrix-1.2a.tar.gz
drwxr-xr-x. 12 501 games 4096 4月 11 00:00 httpd-2.4.20 
-rw-r--r--. 1 root root 8299011 4月 8 23:39 httpd-2.4.20.tar.gz 
-rw-r--r--. 1 root root 1114 2月 28 12:17 index.html 
drwxrwxrwx. 5 desperadochn desperadochn 4096 2月 28 12:31 manpages-zh-1.5.1 
-rw-r--r--. 1 root root 1965336 4月 4 2008 manpages-zh-1.5.1.tar.gz 
-rw-r--r--. 1 root root 512 3月 26 19:52 mbr
drwxr-xr-x. 3 root root 41 4月 10 23:51 tmp
-rw-r--r--. 1 root root 49903 2月 21 22:52 yum.txt

其中以“drwxrwxrwx.  5 desperadochn desperadochn    4096 2月  28 12:31 manpages-zh-1.5.1”舉例:rwxrwxrwx  代表權限位

   

   r:讀權限

   w:寫權限

   x:執行權限


在linux中權限針對不同的用戶對文件的讀、寫、執行權限劃分了3種情況:所屬主(u),所屬組(g),其他人(o),每種情況擁有不同的權限。

u :在上面例子的權限“rwxrwxrwx”,其中前三位表示所屬主的權限,即該文件所屬主的權限為讀、寫、執行。

g:在上面例子的權限“rwxrwxrwx”,中間三位表示所屬組的權限,即該文件所屬組的權限為讀、寫、執行。

o:   在上面例子的權限“rwxrwxrwx”,最后三位表示其他人的權限,即該文件其他人的權限為讀、寫、執行。


   這些權限可以用數值表示:

r:4

w:2

x:1

因此rwxrwxrwx” 可以用777表示。

1.1.2、讀、寫、執行權限的意義:

       (1)文件:

     r: 可使用文件查看類工具獲取其內容;

     w: 可修改其內容;

     x: 可以把此文件提請內核啟動為一個進程;


(2)目錄:

      r: 可以使用ls查看此目錄中文件列表;

      w: 可在此目錄中創建文件,也可刪除此目錄中的文件;

      x: 可以使用ls -l查看此目錄中文件列表,可以cd進入此目錄;

1.1.3、文件權限的設置

文件的權限設置用chmod。

命令格式:chmod [OPTION]… OCTAL-MODE FILE… 或 chmod [OPTION]… MODE[,MODE]… FILE…

-R: 遞歸修改權限

其中:

 (1)、設置一類用戶的權限:

u=    #后面跟上權限(rwx)表示賦予所屬主所賦予的權限

g=    #后面跟上權限(rwx)表示賦予所屬組所賦予的權限

o=    #后面跟上權限(rwx)表示賦予其他人所賦予的權限

ug=   #后面跟上權限(rwx)表示賦予所屬主和所屬組所賦予的權限

a=     #后面跟上權限(rwx)表示賦予所有用戶所賦予的權限

u=,g= #后面跟上權限(rwx)表示賦予所屬主和所屬組分別賦予所輸入的權限

例子:

   1、a=

[root@desperadochn ~]# chmod 000 1111111 
[root@desperadochn ~]# ls -l
總用量 10264
----------.  1 root         root               0 4月  25 19:33 1111111
[root@desperadochn ~]# chmod a=rwx 1111111 
[root@desperadochn ~]# ls -l
總用量 10264
-rwxrwxrwx.  1 root         root               0 4月  25 19:33 1111111

  2、ug=

[root@desperadochn ~]# chmod 000 1111111 
[root@desperadochn ~]# ls -l
總用量 10264
----------.  1 root         root               0 4月  25 19:33 1111111
[root@desperadochn ~]# chmod ug=rwx 1111111 
[root@desperadochn ~]# ls -l
總用量 10264
-rwxrwx---.  1 root         root               0 4月  25 19:33 1111111

 3、u=,g=

[root@desperadochn ~]# chmod 000 1111111
[root@desperadochn ~]# ls -l
總用量 10264
----------. 1 root root 0 4月 25 19:33 1111111
[root@desperadochn ~]# chmod u=rwx,g=rwx 1111111 
[root@desperadochn ~]# ls -l 
總用量 10264 
-rwxrwx---. 1 root root 0 4月 25 19:33 1111111

 4、u=

[root@desperadochn ~]# chmod 000 1111111
[root@desperadochn ~]# ls -l
總用量 10264
----------. 1 root root 0 4月 25 19:33 1111111
[root@desperadochn ~]# chmod u=rwx 1111111 
[root@desperadochn ~]# ls -l 
總用量 10264 
-rwx------. 1 root root 0 4月 25 19:33 1111111

(2)、為某些用戶加上某些權限權限

u+:表示所屬主加上xxx權限(xxx是rwx權限)

u-:表示所屬主減去xxx權限(xxx是rwx權限)

        o+:表示其他人加上xxx權限(xxx是rwx權限)

        o-:表示其他人減去xxx權限(xxx是rwx權限)

        g+:表示所屬組加上xxx權限(xxx是rwx權限)

        g- : 表示所屬組減去xxx權限(xxx是rwx權限)  

       

例子:

     1、u+:

[root@desperadochn ~]# chmod 000 1111111
[root@desperadochn ~]# ls -l
總用量 10264
----------. 1 root root 0 4月 25 19:33 1111111
[root@desperadochn ~]# chmod u+x 1111111 
[root@desperadochn ~]# ls -l
總用量 10264
---x------. 1 root root 0 4月 25 19:33 1111111

2、g+:

[root@desperadochn ~]# chmod 000 1111111
[root@desperadochn ~]# ls -l
總用量 10264
----------. 1 root root 0 4月 25 19:33 1111111
[root@desperadochn ~]# chmod g+x 1111111 
[root@desperadochn ~]# ls -l 
總用量 10264 
------x---. 1 root root 0 4月 25 19:33 1111111

1.1.4權限掩碼——umask   (1)、umask :權限掩碼 在shell中鍵入此命令可以查看默認默認權限掩碼 其決定了文件的缺省權限??梢允止みM行設置 格式為:umask xxx xxx代表3個數字 。含義:

  • 若用戶建立普通文件 這預設沒有執行權限 最大值為666

  • 若用戶建立為目錄,則預設所有權限開放,即777

  • 其含義即為以上兩條規則中的默認值減去需要減掉的權限(umask)

  • 目錄的權限為 “rwxrwxrwx – —-w–w- =rwxr-xr-x”(減去umask后即為生效權限)

  • 普通文件文件的權限為 “rw-rw-rw- —-w–w- =rw-r—r— 減去umask后即為生效權限)

  • Umask可以在/etc/bashrc里面更改 默認情況下centos系統下root用戶umask值為022(—-r–r-) 普通用戶值為002(——-r-)不同的linux發行版值不同

(2)、umask查看  

對于root用戶:

[root@desperadochn ~]# umask 
0022

  對于普通用戶:

[root@desperadochn ~]# su - desperadochn
上一次登錄:日 4月 10 22:26:37 CST 2016tty1 上
[desperadochn@desperadochn ~]$ umask 
0002

(3)、umask設置

1、臨時生效

[root@desperadochn ~]# umask 
0000
[root@desperadochn ~]# mkdir 1
[root@desperadochn ~]# ls -l
總用量 10264
drwxrwxrwx.  2 root         root               6 4月  25 21:52 1

2、在/etc/bashrc里面更改永久生效:

[root@desperadochn ~]# vim /etc/bashrc
找到如下字段:
   if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then    
       umask 002                  #普通用戶umask
    else
       umask 022                  #rootumask

2、文件所屬主的設置,組的指定

   2.1文件所屬主的設置(僅root可用)

    chown:修改文件的屬主

chown [OPTION]… [OWNER][:[GROUP]] FILE…

chown [OPTION]… –reference=RFILE FILE…

用法:

OWNER

OWNER:GROUP

:GROUP

        Note: 命令中的冒號可用.替換;

       -R: 遞歸

例子:

[root@desperadochn ~]# touch 1111
[root@desperadochn ~]# ls -l
總用量 10264
-rw-r--r--. 1 root root 0 4月 25 22:10 1111
[root@desperadochn ~]# chown desperadochn 1111
[root@desperadochn ~]# ls -l
總用量 10264
-rw-r--r--. 1 desperadochn root 0 4月 25 22:10 1111 #屬主已改變

3、特殊權限:

        3.1 setUid權限:

          (1)只有可執行的二進制程序才能設定seUid權限

          (2)命令執行者要對該程序擁有x權限(執行)

          (3)命令的作用是執行者在執行程序的時候獲得該文件屬主的身份

          (4)setUid權限只在該文件執行過程中有效,也就是說身份改變只在程序執行過程中有效

          (5)設置成功后在文件權限位上能看到s權限

           (6) setuid設置方法:①chmod 4xxx 文件名 4 代表文件setUid 權限②chmod u+s 文件名

         危險的setUid:

             ①關鍵目錄應嚴格控制寫權限 如“/”,”/usr”等

             ②用戶密碼設置應遵循密碼三原則

             ③對系統中應該具有setuid權限的文件做一列表,定期檢查是否有多余的setuid權限文件

         做一個實驗:

[root@desperadochn ~]# whereis vim
vim: /usr/bin/vim /usr/share/vim /usr/share/man/man1/vim.1.gz
[root@desperadochn ~]# ls -l /usr/bin/vim
-rwxr-xr-x. 1 root root 2289656 6月  10 2014 /usr/bin/vim
[root@desperadochn ~]# chmod 4755 /usr/bin/vim
[root@desperadochn ~]# ls -l /usr/bin/vim
-rwsr-xr-x. 1 root root 2289656 6月  10 2014 /usr/bin/vim   #看到權限位上的s表示設置成功了

這是我們的shell會用紅色標識該文件(這表明該文件很危險或者錯誤)

3fa37ccb-3334-4b4f-b039-0e22b665a944.png

讓我們看看它到底有何危害呢?

[root@desperadochn ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 1227 4月  10 23:26 /etc/passwd  #該權限表明該文件只有root有讀寫權限,其他人只有讀權限
[root@desperadochn ~]# su - desperadochn上一次登錄:一 4月 25 21:48:50 CST 2016pts/0 上
[desperadochn@desperadochn ~]$ echo "111" >> /etc/passwd-bash: /etc/passwd: 權限不夠

那我們用vim試試看:

[desperadochn@desperadochn ~]$ vim /etc/passwd

651de134-0fdc-4db2-9cde-14c2a8b807d7.png

8be03cd9-ee34-40c4-a972-54ce616059d1.png

試試改desperadochn權限為root:

247654a7-1373-4bd4-a75b-fb764746d546.png

b1ee3233-1024-4344-9597-b309b1cbf760.png

試試改desperadochn權限為root:

[desperadochn@desperadochn ~]$ su - desperadochn
密碼:
上一次登錄:一 4月 25 22:34:19 CST 2016pts/0 上
[root@desperadochn ~]#           #成功篡位成root了

因此編輯器或者能對如何文件中的任何內容進行讀寫操作的,都十分危險

默認擁有setUid權限的命令是passwd:

[root@desperadochn ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz
[root@desperadochn ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

因為普通用戶對/etc/passwd和/etc/shadow文件沒有寫權限,因此在用戶改密碼的一瞬間,他需要root權限:

[root@desperadochn ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 1228 4月  25 22:47 /etc/passwd
[root@desperadochn ~]# ls -l /etc/shadow
----------. 1 root root 848 4月  10 23:26 /etc/shadow

用chmod u+s 設置setUid權限:

root@desperadochn ~]# whereis vim
vim: /usr/bin/vim /usr/share/vim /usr/share/man/man1/vim.1.gz
[root@desperadochn ~]# chmod u+s /usr/bin/vim
[root@desperadochn ~]# ls -l /usr/bin/vim
-rwsr-xr-x. 1 root root 2289656 6月  10 2014 /usr/bin/vim

3.2 setGid: 

             (1) 只有可執行的二進制程序才能設定setGid權限

               (2)命令執行者要對該程序擁有x權限(執行)

               (3)命令的作用是執行者在執行程序的時候,組身份升級為所屬組。

               (4)組身份的改變只在程序執行過程中有效。

               (5)設置方法:chmod 2xxx 文件名 或chmod g+s

               (6)可以給文件或者目錄分配該權限

 例子:

chmod 2xxx 設置setGid:

[root@desperadochn ~]# ls -l /usr/bin/vim
-rwxr-sr-x. 1 root root 2289656 6月  10 2014 /usr/bin/vim   #rwxr-sr-x 組權限中的r權限為前的s表示設置成功了

3.3 stickyBit

      (1)stickyBit 又叫粘著位

      (2)粘著位權限只對目錄起效

      (3)普通用戶對該目錄存在w和x權限

      (4)若沒有該權限,則普通用戶擁有 w權限,所以可以刪除該目錄下所有文件,若賦予了該權限,除了root可以刪除所有文件,普通用戶就算擁有w權限也只能刪除自己建立的文件,不能刪除其他用戶建立的文件。

      (5)設置方法:chmod 1xxx 文件名 或chmod o+t

     chmod 1xxx 設置:

[root@desperadochn ~]# mkdir /tmp/test11
[root@desperadochn ~]# cd /tmp/
[root@desperadochn tmp]# ls -ld test11/
drwxr-xr-x. 2 root root 6 4月  25 23:15 test11/
[root@desperadochn tmp]# chmod 777 /tmp/test11/   #普通用戶對該目錄存在w和x權限[root@desperadochn tmp]# ls -ld /tmp/test11/
drwxrwxrwx. 2 root root 6 4月  25 23:15 /tmp/test11/
[root@desperadochn tmp]# chmod 1777 /tmp/test11/
[root@desperadochn tmp]# ls -ld /tmp/test11/
drwxrwxrwt. 2 root root 6 4月  25 23:15 /tmp/test11/

chmod o+t:

[root@desperadochn ~]# mkdir /tmp/test11
[root@desperadochn ~]# cd /tmp/
[root@desperadochn tmp]# ls -ld test11/
drwxr-xr-x. 2 root root 6 4月  25 23:15 test11/
[root@desperadochn tmp]# chmod 777 /tmp/test11/   #普通用戶對該目錄存在w和x權限
[root@desperadochn tmp]# ls -ld /tmp/test11/
drwxrwxrwx. 2 root root 6 4月  25 23:15 /tmp/test11/
[root@desperadochn tmp]# chmod o+t /tmp/test11/
[root@desperadochn tmp]# ls -ld /tmp/test11/
drwxrwxrwt. 2 root root 6 4月  25 23:15 /tmp/test11/

做個試驗:

[root@desperadochn test11]# ls-l
[root@desperadochn test11]# su - desperado
[desperado@desperadochn ~]$ cd /tmp/test11/
[desperado@desperadochn test11]$ touch 123
[desperado@desperadochn test11]$ su - desperadochn
密碼:
上一次登錄:一 4月 25 22:34:36 CST 2016pts/0 上
[desperadochn@desperadochn ~]$ cd /tmp/test11/
[desperadochn@desperadochn test11]$ touch 112
[desperadochn@desperadochn test11]$ su - root
密碼:
上一次登錄:一 4月 25 22:44:49 CST 2016pts/0 上
[root@desperadochn ~]# cd /tmp/test11/
[root@desperadochn test11]# chmod 777 111
[root@desperadochn test11]# chmod 777 112
[root@desperadochn test11]# chmod 777 123
[root@desperadochn test11]# su - desperadochn
上一次登錄:一 4月 25 23:31:00 CST 2016pts/0 上
[desperadochn@desperadochn ~]$ cd /tmp/test11/
[desperadochn@desperadochn test11]$ ls -l 
總用量 0
-rwxrwxrwx. 1 root         root         0 4月  25 23:27 111
-rwxrwxrwx. 1 desperadochn desperadochn 0 4月  25 23:31 112
-rwxrwxrwx. 1 desperado    desperado    0 4月  25 23:30 123
[desperadochn@desperadochn test11]$ rm 123
rm: 無法刪除"123": 不允許的操作
[desperadochn@desperadochn test11]$ rm 112
[desperadochn@desperadochn test11]$ su - root
密碼:
上一次登錄:一 4月 25 23:32:32 CST 2016pts/0 上
[root@desperadochn ~]# cd /tmp/test11/
[root@desperadochn test11]# rm 123
rm:是否刪除普通空文件 "123"?y

實驗結果可見:若賦予了該權限,除了root可以刪除所有文件,普通用戶就算擁有w權限也只能刪除自己建立的文件,不能刪除其他用戶建立的文件。

  因此權限的數字表示方法其實是4位:

      (1)第一位表示特殊權限 4表示 setUid權限,2表示setGid權限,1表示  stickyBit權限                          

      (2)第二、三、四位分別表示所屬主、所屬組、其他人這些不同的角色的權限,4表示r權限(讀),2表示w權限(寫),1表示x權限(寫)

3.4 chattr權限 :

            格式:chattr [+-=] [選項] 文件或目錄名

              +:增加權限  -:刪除權限=:等于某權限

            選項:

            i:若對文件賦予了i屬性,那么不允許對文件進行刪除、改名,也不能添加和刪除數據;若對目錄賦予了i屬性,那么只能修改目錄下文件的數據,但不允許建立和刪除文件。

            a:如果對文件設置a屬性,那么只能在文件中增加數據,但是不能增加也不能修改數據;如果對目錄設置a屬性,那么只允許在目錄中修改和   建立文件,但不允許刪除

           查看文件系統屬性命令:lsattr 選項 文件名

           選項:

          -a:顯示所有文件和目錄    

          –d:若目標是目錄,則列出目錄本身的屬性,而非子文件屬性

例子:

   對文件賦予i屬性:

[root@desperadochn ~]# mkdir /tmp/test2
[root@desperadochn ~]# cd /tmp/test2/
[root@desperadochn test2]# touch 1111
[root@desperadochn test2]# ls -l
總用量 0
-rw-r--r--. 1 root root 0 4月  26 00:20 1111
[root@desperadochn test2]# chattr +i 1111 
[root@desperadochn test2]# lsattr 1111 
----i----------- 1111   #成功
[root@desperadochn test2]# ls -l
總用量 0
-rw-r--r--. 1 root root 0 4月  26 00:20 1111   #文件屬主擁有讀寫權限
[root@desperadochn test2]# echo "1111" >> 1111 
-bash: 1111: 權限不夠     #不能添加數據
[root@desperadochn test2]# echo "1111" > 1111 
-bash: 1111: 權限不夠  #不能刪除數據
[root@desperadochn test2]# rm -f 1111 
rm: 無法刪除"1111": 不允許的操作   #不允許刪除文件
[root@desperadochn test2]# mv 1111 2222
mv: 無法將"1111" 移動至"2222": 不允許的操作

對文件取消i屬性:

[root@desperadochn test2]# lsattr 1111 
----i----------- 1111   #
[root@desperadochn test2]# chattr -i 1111 
[root@desperadochn test2]# lsattr 1111 
---------------- 1111
[root@desperadochn test2]# echo "1111" > 1111

對目錄賦予i屬性:

[root@desperadochn test2]# cd ..
[root@desperadochn tmp]# chattr +i test2/
[root@desperadochn tmp]# lsattr -d test2/
----i----------- test2/
[root@desperadochn tmp]# cd test2
[root@desperadochn test2]# ls -l
總用量 4
-rw-r--r--. 1 root root 5 4月  26 00:36 1111
-rw-r--r--. 1 root root 0 4月  26 00:56 2222
[root@desperadochn test2]# echo "111111" >> 2222  #可以修改數據

[root@desperadochn test2]# touch 33
touch: 無法創建"33": 權限不夠  #不能創建文件
[root@desperadochn test2]# rm -f 2222 
rm: 無法刪除"2222": 權限不夠   #不能刪除文件

對文件賦予a屬性:

[root@desperadochn test2]# chattr =a 1111 
[root@desperadochn test2]# lsattr 1111 
-----a---------- 1111
[root@desperadochn test2]# echo "1111" > 1111 
-bash: 1111: 不允許的操作

對目錄賦予a屬性:

[root@desperadochn tmp]# mkdir /tmp/test3
[root@desperadochn tmp]# chattr +a /tmp/test3/
[root@desperadochn tmp]# lsattr -d /tmp/test3
-----a---------- /tmp/test3
[root@desperadochn tmp]# cd /tmp/test3
[root@desperadochn test3]# ls
[root@desperadochn test3]# touch 111   #可以創建文件
[root@desperadochn test3]# echo "11111" >>111 #可以修改文件內容
[root@desperadochn test3]# rm -f 111 
rm: 無法刪除"111": 不允許的操作  #不允許刪除

4、acl權限

   當傳統的linux文件系統的權限控制誰著應用的發展,已經不能適應現在復雜的控制需求,ACL(Access Control Lists,訪問控制列表)應運而生:

         (1)acl權限是獨立于所屬主、用戶組、其他人的一種權限,可以給單獨用戶已某種權限,而不用考慮 所屬主、用戶組、其他人。

         (2)查詢分區是否支持acl權限:用命令dumpe2fs –h /dev/sda3(所需查詢的盤符) 

                -h 僅顯示超級快信息,而不顯示磁盤塊組的詳細信息。

               查看default mount options 是否開啟acl(user_xattr acl)

                若分區不支持acl則有如下方法:

                  ①mount -o remount,acl/        #重新掛載根分區,并掛載加入acl權限(臨時開啟acl權限)

                  ②修改 /etc/fstab 命令:vim /etc/fstab

          (3)查找根分區 掛載設置是否為defaults 若是一般支持(若不支持 后面添加,acl)重啟或重新掛載

設置acl權限:

setfacl   

   -m 設定acl權限

   –x 刪除指定的acl權限

   –b 刪除所有acl權限

   –d 設定默認的acl權限

   –k 刪除默認的acl權限 

   –R 遞歸設定acl權限

setfacl –m u:user:rwx /file  u 用戶標識符 同理 可用g設定給用戶組:用戶名:所分配的權限 /對應的目錄

若設置成功則在文件權限最后面有一個+號

getfacl :

查看具體的acl權限 

格式:

 getfacl /文件名或目錄名/ 

若成功會顯示單獨對于該用戶的權限 與所屬主、用戶組、其他人權限無關。

直接設定的acl權限并非用戶真正能得到的權限 必須與acl mask值相與后才能得到真正權限

setfacl –m m:rx 所給的最大權限 /文件名/ 若設定成功 查看時會出現effective:xxx 權限值表示實際起作用的權限。

刪除acl權限 setfacl –x u:user /filename/  或setfacl –b /filename/ 刪除該文件所有acl權限

遞歸acl權限:指父目錄在設定acl權限之時 子文件和子目錄也遵循父目錄acl權限

設定方法:setfacl –m u:用戶名:權限 –R /文件名/

默認acl權限:作用是如果給父目錄設定了默認acl權限,那么所有新創建的子文件都會繼承父文件的acl權限

設定默認acl權限方法:setfacl –m d:u:用戶名:權限 文件名 可以和-R同時使用 遞歸修改

遞歸acl和默認acl權限只能給目錄


  實現:

 1、查看是否有acl軟件包

[root@desperadochn ~]# rpm -q acl
acl-2.2.51-12.el7.x86_64

 2、設置支持acl功能:

root@desperadochn ~]# mount -o remount,acl /

要想永久啟用該功能請修改/etc/fstab文件。


   3、搭建實驗環境:

[root@desperadochn ~]# mkdir /tmp/acltest
[root@desperadochn ~]# cd /tmp/acltest/
[root@desperadochn acltest]# touch acltest
[root@desperadochn acltest]# ls -al 
總用量 4
drwxr-xr-x.  2 root root   20 4月  29 22:51 .
drwxrwxrwt. 12 root root 4096 4月  29 22:51 ..
-rw-r--r--.  1 root root    0 4月  29 22:51 acltest

 4、設置acl權限:

[root@desperadochn acltest]# setfacl -m u:desperadochn:rwx /tmp/acltest/acltest
[root@desperadochn acltest]# getfacl  /tmp/acltest/acltest
getfacl: Removing leading '/' from absolute path names
# file: tmp/acltest/acltest
# owner: root
# group: root
user::rw-
user:desperadochn:rwx
group::r--
mask::rwx
other::r--

 試試是否對tmp/acltest/acltest有rwx權限:

[root@desperadochn acltest]# su - desperadochn
上一次登錄:五 4月 29 22:43:05 CST 2016pts/1 上
[desperadochn@desperadochn ~]$ ls -al /tmp/acltest/
總用量 8
drwxr-xr-x.  2 root root   20 4月  29 22:51 .
drwxrwxrwt. 12 root root 4096 4月  29 22:51 ..
-rw-rwxr--+  1 root root    0 4月  29 22:51 acltest
[desperadochn@desperadochn ~]$ cd /tmp/acltest/
[desperadochn@desperadochn acltest]$ id desperadochnuid=1000(desperadochn) gid=1000(desperadochn) 組=1000(desperadochn)

[desperadochn@desperadochn acltest]$ echo 11111"" >> /tmp/acltest/acltest
[desperadochn@desperadochn acltest]$ cat /tmp/acltest/acltest
11111

看,本來作為其他人的得desperadochn是沒有權限對/tmp/acltest/acltest進行寫入操作的但是通過ACL權限獨立給他讀寫執行權限。


5、su和sudo

  5.1 su

作用:切換到其他用戶賬戶進行登錄。

注意事項:

  (1)root用戶切換到普通用戶是不需要輸入密碼確認。普通用戶切換至root需要輸入root密碼確認,普通用戶相互切換需要對方的密碼

 (2)如果su不帶任何選項及參數,默認切換到root賬戶且不改變shell環境

 (3)使用su時一定要帶- 即su – 要不然對于一個運維來說是非常low的表現


   實驗 :su和 su -的區別

[root@desperadochn ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@desperadochn ~]# pwd
/root
[root@desperadochn ~]# su desperadochn
[desperadochn@desperadochn root]$ pwd
/root   #還是root的家目錄
[desperadochn@desperadochn root]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin  #還是root的環境變量
[desperadochn@desperadochn root]$ su - desperadochn
密碼:
上一次登錄:五 4月 29 23:28:37 CST 2016pts/1 上
[desperadochn@desperadochn ~]$ pwd
/home/desperadochn   #這時家目錄對了
[desperadochn@desperadochn ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/desperadochn/.local/bin:/home/desperadochn/bin  #這才是desperadochn的環境變量

 因此我們可以得出結論:

      (1)su不帶- 只切換用戶不會切換環境變量及家目錄等用戶獨有的設置。這可能會產生問題

      (2)一定要用su –

5.2、sudo

         當我們需要在執行一些不得不執行的命令但是這些命令只有root才能執行時,又不想或者不能切換成root(root權限太高,要慎用)這時我們就需要sudo

        首先sudo需要由root授權,root將那個用戶可以使用哪種命令進行授權,即對/etc/sudoers文件進行修改。

        當普通用戶需要使用獲得授權的只有用root才能使用的命令時,在前面帶上sudo,之后輸入自己用戶的密碼,之后就能以root權限使用該命令了,密碼有效期5分鐘,在5分鐘內再次使用sudo將不需要密碼。

     許多發行版甚至默認不允許root用戶直接登錄,但是可以用sudo操作只有root才能完成的操作。

           特點:

              (1)sudo能限制用戶只能在某一臺主機上執行指定命令。

              (2)sudo提供了豐富的日志

              (3)sudo的配置文件是 /etc/sudoers

實現:

     1、查看sudo軟件是否安裝

[desperadochn@desperadochn ~]$ rpm -q sudo
sudo-1.8.6p7-16.el7.x86_64

  2、/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   格式類型
 
 
## Command Aliases  定義命令別名

##
## 	user	MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere 
root	ALL=(ALL) 	ALL    #設置sudo部分,這一條表示root用戶可以在任何主機運行任意命令
 
## Allows members of the 'sys' group to run networking, software, 
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS 這一條表示sys組成員可以在任何主機運行網絡、軟件方面的命令
 
## Allows people in group wheel to run all commands
%wheel	ALL=(ALL)	ALL    #%wheel組成員可以在任何主機上運行任何命令
 
## Same thing without a password
# %wheel	ALL=(ALL)	NOPASSWD: ALL    #%wheel組成員可以在任何主機上運行任何命令,且不需要密碼
 
## Allows members of the users group to mount and unmount the 
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom  允許%user組用戶運行sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom命令
 
## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now     允許%user組成員可以在本機運行/sbin/shutdown -h now  命令
 
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

雖然我們可以通過vim等工具修改/etc/sudoers文件,有專門的命令設置sudo權限——visudo他的優點是帶語法檢查。

   命令格式:

            visudo [選項]

            -c:啟用check—only 模式,sudoers文件將被檢查語法錯誤、所有者和模式

            -q:不進行語法檢查

            -s:啟用嚴格檢查sudoers文件

使用visudo編輯/etc/sudoers文件

[root@desperadochn ~]# visudo

檢查:

[root@desperadochn ~]# visudo -c
/etc/sudoers:解析正確

sudo命令      命令格式:                sudo [選項] [命令]                    

                 -l:列出用戶能執行的命令


實驗:

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
desperadochn  ALL=(root)        /usr/sbin/useradd

試一下:

[root@desperadochn ~]# su - desperadochn
上一次登錄:六 4月 30 03:30:43 CST 2016pts/1 上
[desperadochn@desperadochn ~]$ sudo -l
匹配此主機上 desperadochn 的默認條目:
    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
 
用戶 desperadochn 可以在該主機上運行以下命令:
    (root) /usr/sbin/useradd
[desperadochn@desperadochn ~]$ useradd xxx
-bash: /usr/sbin/useradd: 權限不夠
[desperadochn@desperadochn ~]$ sudo  /usr/sbin/useradd baibudonghei
[desperadochn@desperadochn ~]$ id baibudonghei
uid=1003(baibudonghei) gid=1003(baibudonghei) 組=1003(baibudonghei)
  • 絕對在任何時候不要將sudo、setUid、setGid權限賦予工具型命令如vimvi

  • sudu權限設置時最好帶上命令詳細參數




6、權限管理的注意點:
(1)賬戶密碼使用強口令(2)日常用戶登錄使用普通用戶,root權限只掌握在少數人手中(3)定期修改密碼,合理設定密碼過期時間(4)做好sudo權限的管理,合理對賬號用途進行分組,根據不同的用戶組設置不同的sudo權限,權限的設置采用白名單機制(5)進行權限分離 權限最小化(程序權限最小化,用戶權限最小化)

原創文章,作者:Net17_desperado,如若轉載,請注明出處:http://www.www58058.com/15766

(1)
Net17_desperadoNet17_desperado
上一篇 2016-04-29
下一篇 2016-04-30

相關推薦

  • Linux文件系統的創建、檢測、修復、分區等工具的使用

    一、文件系統管理 什么是文件系統?     我的理解是文件系統是對磁盤上的數據和文件結構的管理規范。     如果文件系統沒有繼承性,那么以前文件系統的數據就無法傳到新的文件系統中。     Linux的文件系統有這么幾種:ext2, ex…

    系統運維 2016-03-03
  • 簡單的文本處理工具和正則表達式

    一、文本工具     在linux中,有很多優秀且功能強大的文本處理工具,對文件內容進行查找、替換、刪除、排序等操作,是linux進行文本處理變得特別方便。日常工作中,經常會用文本處理進行日志分析,文本抽取等,所以掌握文本處理,將會對我們的工作起到極大的作用。 cat:查看文件    &n…

    Linux干貨 2016-08-10
  • 馬哥教育網絡班21期-第4周課程練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。     cp -R /etc/skel /home/tuser1     chmod g-rwx,o-r…

    Linux干貨 2016-08-03
  • chmod命令詳細用法

    指令名稱 : chmod 使用權限 : 所有使用者 使用方式 : chmod [-cfvR] [–help] [–version] mode file… 說明 : …

    Linux干貨 2016-10-17
  • 馬哥教育網絡班21期-第1周課程練習

    1、  描述計算機的組成及其功能。 計算機由硬件系統和軟件系統兩部分組成。硬件系統由運算器,控制器,存儲器,輸入設備和輸出設備組成.     運算器:計算機中進行算術運算和邏輯運算的部件。     控制器:計算機的控制中心。協調和指揮計算機系統的操作。  &n…

    Linux干貨 2016-07-12
  • 8.12作業

    作業: 1、查找/var目錄下屬主為root,且屬組為mail的所有文件   find /var  -user root  -group  mail -ls 2、查找/var目錄下不屬于root、lp、gdm的所有文件   find /var -not \( -user root  -o -user…

    Linux干貨 2016-08-15
欧美性久久久久