Linux基礎 用戶管理 權限管理 正則表達式

一 Linux的UID 和GIDgit

    UID的編號爲0-65535正則表達式

    0爲管理員Root的UIDsql

    1-60000爲普通用戶的UID  shell

        其中1-499(CenOS6) 1-999(enOS7)爲系統用戶使用(做爲服務權限帳號)express

        500-60000(CenOS6) 1000-60000(enOS7)爲普通登錄用戶使用centos

        60000之後的基本不會使用安全

   

    GID的編號爲0-65535bash

    0爲管理員Root組的GIDoracle

    1-60000爲普通組的UID app

        其中1-499(CenOS6) 1-999(enOS7)爲系統組使用(做爲服務帳號組)

        500-60000(CenOS6) 1000-60000(enOS7)爲普通登錄用戶組使用

        60000之後的基本不會使用

當建立一個帳號的時候不指定用戶基本組,會自動建立和帳號UID相同GID的基本組

 

二 Linux用戶相關的4個配置文件

       /etc/passwd    存放用戶名  UID  基本組 家目錄
       /etc/group      存放組名  GID  組內包含的用戶
       /etc/shadow    存放用戶密碼及相關屬性
       /etc/gshadow  存放組密碼相關屬性

 

/etc/passwd
格式   account:password:UID:GID:GECOS:directory:shell
解釋   登陸名:X:UID:GID:註釋信息:家目錄:用戶默認shell
例如   root:x:0:0:root:/root:/bin/bash
password字段只有佔位符X,出於安全問題,password另外存放在/etc/shadow
查看詳細文檔命令

whatis passwd

man 5 passwd

/etc/shadow
格式    login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field
解釋    登陸名:加密密碼:上次修改密碼的時間:修改密碼最小時間間隔:修改密碼最大時間間隔:密碼過時前警告時間:密碼過時後還能使用的時間:帳號失效時間:保留字段

舉例   

root:$6$H98QFBU6mj9/JK.4$6W..X0l3L0qLl/isPumCmx6Vr/qSjanYClVoDAaBMO64lV85ZWQba1VfAE4lMmRlYVNh5Zjk3mqw9y0hfZLfQ/:16671:0:99999:7:::

其中密碼字段有三段,以$分隔

$6$H98QFBU6mj9/JK.4$6W..X0l3L0qLl/isPumCmx6Vr/qSjanYClVoDAaBMO64lV85ZWQba1VfAE4lMmRlYVNh5Zjk3mqw9y0hfZLfQ/

第一段  $6$ 加密方式
  查看詳細文檔命令

  whatis crypt 
  man crypt

             ID  | Method
              ---------------------------------------------------------
              1   | MD5
              2a  | Blowfish (not in mainline glibc; added in some Linux distributions)
              5   | SHA-256 (since glibc 2.7)
              6   | SHA-512 (since glibc 2.7)
第二段  $H98QFBU6mj9/JK.4$  隨機生成的鹽
第三段  加密後的密碼 
其中的 date of last password change和account expiration date 時間爲距離1970年1月1 的時間

查看詳細文檔命令

whatis shadow 
man 5 shadow

/etc/group
格式    group_name:passwd:GID:user_list

查看詳細文檔命令

whatis group
man 5 group

/etc/gshadow
    不多用,在組切換的時候用
查看詳細文檔命令

whatis gshadow 
man 5 gshadow


三 Linux操做用戶的經常使用命令
 在使用命令操做用戶時,若是不加參數,則參照默認的用戶配置文件
    /etc/login.defs  用戶建立規則
    /etc/default/useradd  默認使用的配置文件

useradd    建立用戶
    useradd [options] LOGIN
    useradd -D [options]  設置建立用戶的默認選項
      -b, --base-dir BASE_DIR
      -c, --comment COMMENT
      -d, --home HOME_DIR     複製/etc/skel到家目錄做文配置文件
      -g, --gid GROUP  不指定會建立和用戶同名的基本組
      -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]
      -M  Do not create the user's home directory ,如查爲系統用戶默認不建立家目錄
      -N, --no-user-group  不建立和UID相同的GID 必須用-g 指定基本組
      -o, --non-unique  容許建立相同UID的帳號
      -r, --system             Create a system account.
      -s, --shell SHELL
      -u, --uid UID
 例:建立用戶oracle 附加組database sql  ID 3000 家目錄爲/home/database  

useradd -u 3000 -G database,sql -d /home/database oracle

usermod
        用戶屬性修改
        usermod [options] LOGIN
        參數和useradd一至
        -a, --append     Add the user to the supplementary group(s). Use only with the -G option.
        -c, --comment COMMENT
        -d, --home HOME_DIR  修改家目錄,舊的文件不會移動到新的家目錄 。

            -m, --move-home     與-d聯合使用,遷移舊文件到新家目錄
        -e, --expiredate EXPIRE_DATE
        -g, --gid GROUP
        -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]
        -l, --login NEW_LOGIN  修改登錄名,用戶的家目錄只能手動修改,其它自動修改。
        -L, --lock
        -o, --non-unique  容許用戶的ID 爲同一個
        -p, --password PASSWORD
        -s, --shell SHELL
        -u, --uid UID
        -U, --unlock

passwd  給用戶添加密碼
         passwd   [options]   [username]
        --stdin  從標準輸出接收用戶密碼

userdel
    userdel [options] LOGIN
         -f, --force   強制刪除用戶,即便用戶還在登陸狀態
         -r, --remove  刪除用戶同時刪除家目錄

groupadd
     groupadd [options] group
        -f, --force 待測試
        -g, --gid GID
        -o, --non-unique  允行添加相同GID的組
        -r, --system    Create a system group.

groupmod    組屬性修改
    groupmod [options] GROUP
    -g, --gid GID         修改GID
    -n, --new-name NEW_GROUP  修改組名
 
gpasswd             
        gpasswd [option] group
     -a, --add user
     -d, --delete user
     -r, --remove-password

groupdel      
        有用戶在基本組 ,基本組沒法被刪除
  
newgrp 臨時切換基本組爲指定的組
        有附加組不用輸密碼, 若是沒有附加組要輸入組密碼
chage     
        修改用戶帳號及密碼的屬性
        chage [options] [LOGIN]
        -d, --lastday LAST_DAY
        -E, --expiredate EXPIRE_DATE
        -l, --list
  
chsh   修改用戶的shell,基本用不到
chfn   修改用戶的指紋,用戶的我的信息
      -f, --full-name full-name
      -o, --office office
      -p, --office-phone office-phone
      -h, --home-phone home-phone
  
finger

id  顯示用戶的各類有效信息和組ID
    id [OPTION]... [USERNAME]
        -g, --group
        -G, --groups
        -n, --name
        -u, --user

w   顯示如今誰在用系統和在作什麼
who 顯示如今誰在用系統
     -a, --all
     -b, --boot 顯示系統上次啓動的時間
     -d, --dead 顯示死掉的進程
     -q, --count 顯示所有的登錄用戶和登錄的個數
     -r, --runlevel
 
whoami 查詢當前的用戶是哪一個

pwck    verify integrity of password files
  檢查/etc/passwd 和 /etc/shadow 中的內容是否是符合格式
  
su  switch user 切換用戶
        su  user  半切換
        su - user     su -l user  完會切換
        以指定用戶的身份執行命令
        su - user -c "command"

四 LINUX 文件權限管理

 用戶對文件的訪問權限有三種:
  r, w, x

  文件:
   r: 可以使用文件查看工具查看其內容;
   w: 可以使用文件編輯工具編輯其內容;
   x: 可向內核請求將此文件運行爲進程;

  目錄:
   r: 可以使用ls命令列出目錄中的文件或子目錄列表;
   w: 可在此目錄中建立或刪除文件;
   x:可以使用‘ls -l’列出目錄文件及子目錄的詳細屬性信息;可以使用cd命令切換工做目錄爲指定目錄;

 文件的權限主要針對三類對象進行定義:
  ownuer: u, 屬主;
  group: g, 屬組;
  other: o, 其它;

 某類用戶對某文件的訪問權限:
      ---     000     0
      --x     001     1
      -w-    010     2
      -wx    011     3
      r--     100     4
      r-x     101     5
      rw-    110     6
      rwx    111     7

      664:rw-rw-r--
      rwxr-x---: 750

控制權限的經常使用命令

chmod  修改文件權限:
       chmod [OPTION]... MODE[,MODE]... FILE...  直接設置權限
       chmod [OPTION]... OCTAL-MODE FILE...   八進制文件權限
       chmod [OPTION]... --reference=RFILE FILE.. 複製目標文件權限

       三類用戶:
        u: owner
        g: group
        o: other
        a: all    通常能夠省略,默認表明all

        兩種用法:
         =mode  =rx  =r  =rwx  =
   =後面爲空爲取消權限
   例:ug=rx, go=    chmod g=rw yum.log
   
         [+|-]mode
          u+r +w  +x
   例:chmod a+w yum.log  

chmod 640  yum.log

            chmod 做用於目錄 ,不會做用於子文件
                -R, --recursive 遞歸修改權限,會做用於子文件
  例:  複製yum.log 的權限給test.log, 兩個文件的權限相同,和yum.log一至

chmod --reference=yum.log test.log

 
chown 修改文件屬主
        chown [OPTION]... [OWNER][:[GROUP]] FILE...
        chown [OPTION]... --reference=RFILE FILE...
         -R: recursive

chgrp  修改文件屬組
  chgrp [OPTION]... GROUP FILE...
        chgrp [OPTION]... --reference=RFILE FILE...
   -R: recursive

umask:遮罩碼
     目錄:777-umask
     文件:666-umask
      若是某一類用戶的權限減得的結果有執行權限,此時會自動讓其權限位加1;
 
     umask UMASK
      設定:僅對當前shell進程有效;

 

五 grep: Global search REgular expression and Print out the line.
  做用:文本搜索工具,根據用戶指定的「模式(pattern)」逐行去搜索目標文本,打印匹配到的行;
  模式:由正則表達式的元字符及文本字符所編寫的過濾條件;

   元字符:字符不表示其字面意義,而用於表示通配或控制功能;

  分兩類:
   基本正則表達式:BRE
   擴展正則表達式:ERE

 grep [OPTIONS] PATTERN [FILE...]:
  選項:
   --color=auto:對匹配到的串作高亮顯示;
   -v:顯示模式匹配不到行;
   -i: 忽略字符大小寫;
   -o: 僅顯示可以被模式匹配到的串本行;
   -q: 靜默模式;
   -E:使用擴展的正則表達式;

  基本正則表達式的元字符:
   字符匹配:
    .        匹配任意單個字符;
    []       匹配指定範圍內的任意單個字符;
    [^ ]    匹配指定範圍內的任意單個字符;

    [:lower:], [:upper:], ...

   次數匹配:用於要指定其次數的字符的後面;
    *              任意次;
    \?             0或1次;
    \+            1或屢次;
    \{m\}        精確限制爲m次;
    \{m,n\}     至少m次,至多n次,[m,n]
     \{0,n\}     至多n次;
     \{m,\}      至少m次;

    .*              匹配任意長度的任意字符;

   位置錨定:
    ^:             行首錨定;用於模式的最左側;
    $              行尾錨定;用於模式的最右側;
    \<, \b       詞首錨定;用於表示單詞的模式的左側;
    \>, \b       詞尾錨定;用於表示單詞的模式的右側;
    ^$            空白行;

   分組:\(\)

    分組的小括號中的模式匹配到的內容,會在執行過程當中被正則表達式引擎記錄下來,並保存內置的變量中;這些變量分別是\1, \2, ...
     \1: 從左側起,第一個左括號,以及與之配對的右括號中間的模式所匹配到的內容;
     \2:
     ...

    後向引用:使用變量引用前面的分組括號中的模式所匹配到的字符;

 擴展的正則表達式:
  grep家庭有三個命令:
   grep         基本正則表達式
    -E            擴展正則表達式
    -F            不支持正則表達式
   egrep       擴展正則表達式
   fgrep        不支持正則表達式

  擴展正則表達式的元字符:
   字符匹配:
    .                 任意單個字符
    []                匹配指定範圍內的任意單個字符;    

    [^]             匹配指定範圍內的任意單個字符;

   次數匹配:
    *                任意次

    ?                0次或1次;
    +               1次以上;
    {m}            精確匹配m次;
    {m,n}         至少m次,至多n次;

   錨定:
    ^                 錨定行首
    $                 錨定行尾
    \<, \b          詞首錨定;用於表示單詞的模式的左側;

    \>, \b          詞尾錨定;用於表示單詞的模式的右側;

   分組:()
    後向引用:\1, \2, ...

   或者:
      a|b 
      C|cat: 不表示Cat或cat,而表示C或cat;
      要寫成(C|c)at

 

POSIX Non-standard Perl/Tcl Vim ASCII Description
[:alnum:] [A-Za-z0-9] Alphanumeric characters
[:word:] \w \w [A-Za-z0-9_] Alphanumeric characters plus "_"
\W \W [^A-Za-z0-9_] Non-word characters
[:alpha:] \a [A-Za-z] Alphabetic characters
[:blank:] \s [ \t] Space and tab
\b \< \> (?<=\W)(?=\w)|(?<=\w)(?=\W) Word boundaries
[:cntrl:] [\x00-\x1F\x7F] Control characters
[:digit:] \d \d [0-9] Digits
\D \D [^0-9] Non-digits
[:graph:] [\x21-\x7E] Visible characters
[:lower:] \l [a-z] Lowercase letters
[:print:] \p [\x20-\x7E] Visible characters and the space character
[:punct:] [][!"#$%&'()*+,./:;<=>?@\^_`{|}~-] Punctuation characters
[:space:] \s \_s [ \t\r\n\v\f] Whitespace characters
\S \S [^ \t\r\n\v\f] Non-whitespace characters
[:upper:] \u [A-Z] Uppercase letters
[:xdigit:] \x [A-Fa-f0-9] Hexadecimal digits

 

 

練習:

   一、顯示/etc/passwd文件中以bash結尾的行;     

grep --color  bash$ /etc/passwd

   二、顯示/etc/passwd文件中的兩位數或三位數;     

grep --color "\<[[:digit:]]\{2,3\}\>" /etc/passwd

   三、顯示'netstat -tan'命令結果中以‘LISTEN’後跟0個、1個或多個空白字符結尾的行;     

netstat -tan | grep --color  "LISTEN[[:space:]]*$"

   四、添加用戶bash,testbash, basher以及nologin用戶(nologin用戶的shell爲/sbin/nologin);然後找出/etc/passwd文件中用戶名同shell名的行;

useradd testbash

useradd basher

useradd nologin -s /sbin/nologin

grep --color -E "^([[:alnum:]]*):.*\1$"  /etc/passwd

   五、顯示當前系統上root、centos或user1用戶的默認的shell和UID;     

grep --color -E  "^root|centos|user1\>" /etc/passwd | cut -d: -f 1,3,7

   六、找出/etc/rc.d/init.d/functions文件中某單詞(單詞中間能夠存在下劃線)後面跟着一組小括號的行;

grep --color -E "\<[[:alnum:]_]*\(\)" /etc/rc.d/init.d/functions

   七、使用echo輸出一個路徑,然後egrep找出其路徑基名;    

echo /etc/rc.d/init.d/functions | grep --color -E -o "([^/])*$"

    進一步地:使用egrep取出其目錄名;     

echo /etc/rc.d/init.d/functions | grep --color -E -o "^.*/"

   八、找出ifconfig命令執行結果中1-255之間的數字;

ifconfig | grep --color -E "\<[[:digit:]]{1,2}\>|\<1[[:digit:]]{2}\>|\<2[0-4][0-9]\>|\<25[0-5]\>"
相關文章
相關標籤/搜索