一 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]\>"