天天看點

權限管理、特殊權限、FACL

使用者管理

useradd     (預設是是最大的ID号向下加一)

           -u  UID     尚未制定大于等于500

           -g  GID     (基本組)必須事先存在 也可以使用組名,useradd -g two one    id one

           -G  GID     附加組 可以有多個

           -c  "COMMENT"    制定注釋資訊

           -d    家目錄  需要制定目錄

           -s  shell    路徑 最好是/etc/shells檔案中的shell

               /bin/sh

               /bin/bash

               /sbin/nologin

               /bin/tcsh

               /bin/csh

               /bin/ksh

           -m  -k    建立家目錄  強行複制 /etc/skel檔案,其實預設建立使用者就會自動複制skel檔案

           -M    不建立家目錄,不代表不能登陸

           -r    添加系統使用者

           /etc/skel    其實預設建立使用者就會自動複制skel目錄下的檔案到使用者家目錄

           /etc/login.defs    是/etc/shadow檔案的預設配置檔案,用于定義預設          

環境變量:

       PATH

       HISTSIZE

       SHELL    儲存目前使用者shell      

id

           -u  使用者ID

           -g  基本組ID

           -G  附加組ID

           -n  顯示使用者名配合其他三個選項

finger       檢視使用者賬戶屬性資訊

userdel     預設不會删除使用者家目錄 但一個使用者被删除以後,此前屬主為此使用者的檔案變為删除使用者的UID

           -r  同時删除家目錄

修改使用者賬号屬性

usermod  

           -u  修改使用者ID

           -g  GID 必須存在 基本組

           -a  -G  GID 不使用-a選項會覆寫之前的附加組,如果之前有附加組的話。

           -c  制定注釋資訊

           -d  -m  為使用者制定新的家目錄 以前原家目錄檔案至新家目錄中

           -s  修改使用者shell

           -l  修改使用者名字

           -e  定義使用者過期時間 YYYY-MM-DD

           -f  密碼過去還沒禁用時間

           -L  鎖定賬戶

           -U  解鎖使用者

chsh        修改使用者shell

chfn        修改finger資訊,修改注釋資訊

passwd      修改使用者密碼,普通使用者自己修改自己的密碼,管理者可以制定修改其他使用者,禁止空密碼登陸。

           --stdin     标準輸入讀取密碼,可以從其他檔案帶起鍵盤  echo "redhat | passwd --stdin user1

           -l  鎖定使用者賬戶

           -u  解鎖使用者賬戶

           -d  删除使用者密碼

           -n  密碼最短使用期限

           -x  最長使用期限

           -w  警告時間

           -i  非活動時間

chage       也可以修改使用者密碼時間,類似passwd

           -d  最近一次的修改時間

           -E  過期時間

           -I  非活動時間

           -m  最短使用期限

           -M  最長使用期限

           -W  警告時間

pwck        檢查使用者賬号的完整性

組管理

groupadd    建立組

           -g gid

           -r  添加為系統組

groupamod   修改組名或者ID

           -n GRPNAME

groupdel    删除組

gpasswd     為組設定密碼,一個使用者建立檔案的屬主是這個使用者自身,而屬組則是這個使用者賬戶的基本組

newgrp      切換組,如果使用者本來就輸入切換組的附加組,就不需要密碼,切換完成之後此組成為使用者的基本組。

           newgrp為一個登陸屬性,可以用exit推出。

練習題

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<code>1.建立一個使用者mandriva,其ID号位2002,基本組為distro(組ID為3003),附加組為linux</code>

<code>    </code><code>groupadd linux</code>

<code>    </code><code>groupadd -g 3003 distro</code>

<code>    </code><code>useradd</code> <code>-u 2002 -g distro -G linux mandriva</code>

<code>2.建立一個使用者fedora,其全名為Fedora Community,預設shell為tcsh</code>

<code>    </code><code>useradd</code> <code>-c </code><code>"Fedora Community"</code> <code>-s </code><code>/bin/tcsh</code> <code>fedora</code>

<code>3.修改mandriva的ID号為4004,基本組為linux,附加組為distro和fedora</code>

<code>    </code><code>usermod</code> <code>-u 4004 -g linux -G distro,fedora mandriva</code>

<code>4.給fedora加密碼,并設定其密碼最短使用期限為2天,最長為50天</code>

<code>    </code><code>passwd</code> <code>-n 2 -x 50 fedora</code>

<code>5.将mandriva的預設shell改為</code><code>/bin/bash</code>

<code>    </code><code>usermod</code>  <code>-s </code><code>/bin/bash</code> <code>mandriva</code>

<code>6.将添加系統使用者hbase,且不運作其登陸</code>

<code>    </code><code>useradd</code> <code>-r -s </code><code>/sbin/nologin</code> <code>hbase</code>

權限管理

       r

       w

       x

三類使用者

       o   屬主

       g   屬組

       o   其他使用者

chown    改變檔案屬主(隻有管理者可以用此指令)

             chown  username   file

             -R   修改目錄以及目錄中子目錄和檔案的屬主

             --reference=/path/to/somefile   file    設定新檔案跟參考檔案一樣的屬主和屬組

同時修改屬主和屬組

           chown username:grpname file

           chown username.grpname file

           chown   --reference=/tmp/abc test

           --reference=/path/to/somefile   file    設定新檔案跟參考檔案一樣的屬主和屬組

chgrp    改變檔案屬組(用法和chown用法一樣)

           -R

           --reference=/path/to/somefile   file

chmod    修改檔案的權限 操作範圍越來越精細

              修改三類使用者的權限

              chmod mode  file

                   -R  遞歸

                   --reference=/path/to/somefile   file

                   chomod  750 file

                       位數不夠就從左往右識别

                           75  075

                           5   005

       修改某類使用者或某些類使用者權限

           u,g,o,a     rxw

           chmod  使用者類别=rwx  file

           chmod   go=rw        file

           chmod   g=rx,o=r     file

           chmod   g=rx,o=      file   不寫權限就是沒有權限

       修改某類使用者某位或某些位權限

           chmod   u-x,g+x     file

           chmod   a+x         file  等于    chmod   +x  file          

           chmod   u-wx        file

umask   遮罩碼

       root預設建立檔案權限    644  

           預設建立目錄權限    755     0022

       user預設建立檔案權限    664  

           預設建立目錄權限    775     0002

       umask 023

       檔案  666-023=643 實際是644 預設不能有執行權限,有了就自動+1

       目錄  777-023=754

練習

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

<code>1、建立一個沒有家目錄的使用者openstack</code>

<code>    </code><code>useradd</code> <code>-M openstack</code>

<code>2、複制</code><code>/etc/skel</code><code>為</code><code>/home/openstack</code>

<code>    </code><code>cp</code> <code>-r </code><code>/etc/skel</code> <code>/home/openstack</code>

<code>3、改變</code><code>/home/openstack</code><code>及其内部檔案的屬主均為openstack</code>

<code>    </code><code>cp</code> <code>-R   openstack</code>

<code>4、</code><code>/home/openstack</code><code>及其内部的檔案,屬組和其他使用者沒有任何通路權限</code>

<code>    </code><code>chmod</code>   <code>go= -R </code><code>/home/openstack</code>

<code>    </code><code>su</code> <code>- openstack  手動建立使用者,其他人沒有權限通路openstack的家目錄</code>

<code>    </code><code>linux 任何權限對root是無效的 是以可以修改密碼儲存此檔案中</code>

<code>    </code><code>ls</code>  <code>-l  </code><code>/etc/shadow</code>

<code>    </code><code>-r-------- 1 root root 1197 Jul 23 16:13 </code><code>/etc/shadow</code>

<code>    </code><code>普通使用者也可以修改自己的密碼,如何實作的?</code>

<code>    </code><code>ls</code> <code>-l $(</code><code>which</code> <code>passwd</code><code>)</code>

<code>    </code><code>-rwsr-xr-x 1 root root 22960 Jul 17  2006 </code><code>/usr/bin/passwd</code>

<code>5、手動添加使用者hive,基本組為hive(5000),附加組為mygroup</code>

<code>    </code><code>vi</code> <code>/etc/group</code>       <code>hive:x:5000:    mygroup:x:504:user2,hive</code>

<code>    </code><code>vi</code> <code>/etc/passwd</code>      <code>hive:x:5000:5000:Hive:</code><code>/home/hive</code><code>:</code><code>/bin/bash</code>

<code>    </code><code>vi</code> <code>/etc/shadow</code>      <code>hive:!!:15909:0:99999:7:::</code>

<code>    </code><code>cp</code>  <code>-r  </code><code>/etc/skel</code>   <code>/home/hive</code>

<code>    </code><code>chown</code> <code>-R hive:hive  </code><code>/home/live</code>

<code>    </code><code>chmod</code> <code>-R go=        </code><code>/home/live</code>

<code>    </code><code>密碼生成</code>

<code>    </code><code>whatis </code><code>passwd</code> <code>中檢視由sslpasswd</code>

<code>    </code><code>man</code> <code>sslpasswd</code>

<code>    </code><code>-1  Use the MD5 based BSD password algorithm 1.</code>

<code>    </code><code>-salt string    (雜質)</code>

<code>    </code><code>Use the specified salt.  When reading a password from</code>

<code>    </code><code>the terminal, this implies -noverify.</code>

<code>    </code><code>openssl </code><code>passwd</code> <code>-1 -salt </code><code>'12345678'</code>

<code>    </code><code>Password:123</code>

<code>    </code><code>$1$12345678$tRy4cXc3kmcfRZVj4iFXr/      </code><code>"/"</code><code>也屬于</code><code>hash</code><code>的元素</code>

<code>    </code><code>雜質預設8位,不代表必須輸入8位,但不同雜質計算相同密碼等到的</code><code>hash</code><code>一定不同。</code>

<code>    </code><code>openssl </code><code>passwd</code> <code>-1 -salt </code><code>'1234567'</code>

<code>    </code><code>$1$1234567$Y8QuHrN2po5VtIYAWSZOn/</code>

特殊權限  

   [hadoop@localhost testsgid]$ ls -l /usr/bin/passwd

   -rwsr-xr-x 1 root root 23420 Aug  3  2010 /usr/bin/passwd

   啟動程序之後程序的身份不是在是發起程序者,而是發起程序前檔案本身的屬主,者就叫做SUID

   SUID:運作某程式時,相應程序的屬主是程式檔案自身的屬主,而不是啟動者。

      chmod u+s   file    如果file本身原有執行權限顯示為s,否則顯示為S

                                   不到萬不得已,一定不要給它SUID

   SGID運作某程式時,相應程序的屬主是程式檔案自身的屬組,而不是啟動者所屬的基本組

          應用場景    developteam:hadoop,hive     之間可以互相編輯檔案

          chmod g+s   file

          chmod g-s   file

          mkdir /tmp/testsgid

          useradd hadoop

          useradd hive

          groupadd developteam

          usermod -a -G developteam hadoop       附加組

          usermod -a -G developteam hive

          id hadoop                                               檢視是否添加成功

          chown -R :developteam /tmp/testsgid    雖然目錄屬組已為developtem,但沒有w權限,使用者依然無法建立檔案

          chmod -R g+w /tmp/testsgid                 hadoop,hive可以建立檔案,但建立檔案預設的屬主和屬組是自己,是以無法互相修改檔案内容

          chmod g+s /tmp/testsgid                      SGID成功,2個使用者預設建立檔案的屬組為developteam,是以可以互相修改彼此檔案

          chmod o+t /tmp/testsgid                      2使用者此時不能删除對方檔案,依然可以互相修改,那些屬主屬組都是自己的使用者不再可以強行編輯和删除對方檔案                                      

          Sticky  在一個公共目錄,每個人都可以建立檔案,删除自己的檔案,但不能删除别人的檔案。冒險位

              chmod o+t DIR

              chmod o-t DIR

          三位組合    suid    sgid    sticky

              000  

              001                            *

              110       *         *

              chmod   1755 /tmp/testdir                sticky

                      2755                             sgid  

                      3755                             sgid      sticky    

                      4755                suid  

                      5755                suid                   sticky

                      6755                suid      sgid

                      7755                suid      sgid       sticky

              umask   0002

FACL 适用場景

  jerry通路tom檔案時候需要相應權限,應該如何設定呢?

  如果使用者是把jerry設為tom的others是一種辦法,但others範圍太廣,不隻是jerry一個人。

  如果把jerry屬組改為tom也可以,但是普通使用者沒有權限使用chown指令改變自己的屬組。

  那該怎麼辦呢?FACL的作用就展現出來了。

FACL:Filesystem Access Control List

  利用檔案擴充屬性儲存額外的通路權限

注意:複制檔案,歸檔檔案,很可能丢失屬性,除非使用相關指令的特殊選項。

普通檔案權限生效過程:Owner--&gt;Group--&gt;Ohter

如何知道檔案是否有FACL?

  ls -l filename

  -rw-rw-r--+

  右側結尾帶有+号則說明此檔案有FACL擴充屬性

FACL指令

  getfacl    檢視

                 filename

  setfacl    設定

      -m設定

          u:username:permfilesetfacl     使用者

          -m u:hadoop:rw inittab

          g:groupname:permfilesetfacl  組  

          -m g:developteam:rw inittab

      #目錄下的檔案繼承該目錄的FACL

          d:u:username:permfilesetfacl

          -m d:u:hadoop:rw inittab

          d:g:username:permfilesetfacl

          -m d:g:hadoop:rw inittab

    -x取消

          u:username filesetfacl

          -x u:hadoop inittab

          g:groupname filesetfacl

          -x g:developteam inittab

注意:檔案權限(perm+FACL):Owner--&gt;FACL,User--&gt;Group--&gt;FACL,Group--&gt;Other

本文轉自 ftmoonfans  51CTO部落格,原文連結:http://blog.51cto.com/soulboy/1259057