grep命令擴展
匹配空行: ^$
[root@server0 ~]# grep -v '^$' /etc/default/useradd-----------------過濾掉所有的空行
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
顯示一個/etc/login.defs 配置文件有效配置(去掉以#開頭的 註釋 去掉空行)
[root@server0 ~]# grep -v '^#' /etc/login.defs------過濾掉所有#號開頭的
[root@server0 ~]# grep -v '^#' /etc/login.defs | grep -v '^$'-
# grep -v '^#' /etc/login.defs | grep -v '^$' | cat -n----------先過濾掉所有#號開頭的,再過濾掉所有的空行,並顯示過濾後結果的行號
###############################################################
find 按條件查找文件
根據預設的條件遞歸查找對應的文件
– find [目錄] [條件1] [-a|-o] [條件2] ...
– 常用條件表示:
-type 類型(f文件、d目錄、l快捷方式)
-name "文檔名稱"
-size +|-文件大小(k、M、G)
-user 用戶名
[root@server0 ~]# find /boot/ -type l #查找是快捷方式
/boot/grub/menu.lst
[root@server0 ~]# ls -l /boot/grub/menu.lst
[root@server0 ~]# find /boot/ -type d #查找是目錄
[root@server0 ~]# find /boot/ -type f #查找是文本文件
請顯示/etc目錄下以 .conf結尾的?(包含子目錄)
[root@server0 ~]# find /etc -name "*.conf"
請顯示/etc目錄下以 .conf結尾的?(不包含子目錄)
[root@server0 ~]# ls /etc/*.conf
[root@server0 ~]# mkdir /root/nsd1802
[root@server0 ~]# touch /root/nsd01.txt
[root@server0 ~]# touch /root/nsd18.txt
[root@server0 ~]# find /root/ -name "nsd*"
[root@server0 ~]# find /root/ -name "nsd*" -type f
[root@server0 ~]# find /root/ -name "nsd*" -type d
-size +|-文件大小(k、M、G)
[root@server0 ~]# find /boot/ -size +10M
[root@server0 ~]# find /boot/ -size +300k
[root@server0 ~]# find /boot/ -size -10M
-user 用戶名
[root@server0 ~]# find / -user student -type f
[root@server0 ~]# useradd wangwu
[root@server0 ~]# find / -user wangwu
[root@server0 ~]# find / -user wangwu -type d
#############################################################
find結果處理
[root@server0 ~]# rm -rf /opt/*
[root@server0 ~]# ls /opt/
[root@server0 ~]# find /boot/ -size +300k
使用find命令的 -exec 操作
– find .. .. -exec 處理命令 {} \;
– 優勢:以 {} 代替每一個結果,逐個處理,遇 \; 結束
# find /boot/ -size +300k -exec cp -r {} /opt \;
# ls /opt/
# find / -user student -type f
# mkdir /root/findfile
# find / -user student -type f -exec cp {} /root/findfile \;
# ls /root/findfile
################################################################
教學環境介紹
##############################################################
權限和歸屬
基本權限的類別
訪問方式(權限)
- – 讀取:允許查看內容-read r
- – 寫入:允許修改內容-write w
- – 可執行:允許運行和切換-execute x
文本文件:
r: cat less head tail grep
w: vim 保存
x: 可以執行
- – 所有者:擁有此文件/目錄的用戶-user u
- – 所屬組:擁有此文件/目錄的組-group g
- – 其他用戶:除所有者、所屬組以外的用戶-other o
查看權限
使用 ls -l 命令
– ls -ld 文件或目錄...
以 - 開頭:文本文件
以 d 開頭:目錄
以 l 開頭:快捷方式
設置基本權限
使用 chmod 命令
– chmod [-R] 歸屬關係+-=權限類別 文檔...
-R : 遞歸修改目錄下所有內容,及子目錄所有內容
[root@server0 ~]# mkdir /nsd01
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# chmod u-w /nsd01
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# chmod g+w /nsd01
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# chmod o=--- /nsd01
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# chmod u=rwx,g=rwx,o=rwx /nsd01
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# chmod ugo=r /nsd01
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# chmod ug=rw /nsd01
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# mkdir -p /opt/tarena/nsd/nsd1802
[root@server0 ~]# ls -ld /opt/tarena/
[root@server0 ~]# chmod -R ugo=r /opt/tarena/
[root@server0 ~]# ls -ld /opt/tarena/
[root@server0 ~]# ls -ld /opt/tarena/nsd/
[root@server0 ~]# ls -ld /opt/tarena/nsd/nsd1802/
#########################################################
Linux判斷用戶具備的權限:
1.判斷用戶所屬的身份(角色) 所有者>所屬組>其他人 匹配及停止
2.相應權限位的權限
Permission denied : 權限不足
目錄的 r 權限:能夠 ls 瀏覽此目錄內容
目錄的 w 權限:能夠執行 rm/mv/cp/mkdir/touch/... 等更改目錄內容的操作
目錄的 x 權限:能夠 cd 切換到此目錄
#######################################################
以root用戶新建/nsddir/目錄,在此目錄下新建readme.txt文件,並進一步完成下列操作
1)使用戶zhangsan能夠在此目錄下創建子目錄 切換用戶 su - zhangsan
chmod o+w /nsddir/
2)使用戶zhangsan不能夠在此目錄下創建子目錄
chmod o-w /nsddir/
3)使用戶zhangsan能夠修改readme.txt文件
chmod o+w /nsddir/readme.txt
4)調整此目錄的權限,使所有用戶都不能cd進入此目錄
chmod u-x,g-x,o-x /nsddir/
5)爲此目錄及其下所有文檔設置權限 rwxr-x---
chmod -R u=rwx,g=rx,o=--- /nsddir/
#########################################################
設置文檔歸屬
使用 chown 命令
– chown [-R] 屬主 文檔...
– chown [-R] :屬組 文檔...
– chown [-R] 屬主:屬組 文檔...
[root@server0 /]# mkdir /nsd06
[root@server0 /]# ls -ld /nsd06
[root@server0 /]# useradd tom
[root@server0 /]# groupadd stugrp
[root@server0 /]# chown tom:stugrp /nsd06
[root@server0 /]# ls -ld /nsd06
[root@server0 /]# chown root /nsd06
[root@server0 /]# ls -ld /nsd06
[root@server0 /]# groupadd tedu
[root@server0 /]# chown :tedu /nsd06
[root@server0 /]# ls -ld /nsd06
########################################################
附加權限(特殊權限)
Set GID
附加在屬組的 x 位上
– 屬組的權限標識會變爲 s
– 適用於目錄,Set GID可以使目錄下新增的文檔自動設置與父目錄相同的屬組
– 繼承所屬組身份
[root@server0 /]# mkdir /nsd09
[root@server0 /]# chown :stugrp /nsd09
[root@server0 /]# ls -ld /nsd09
[root@server0 /]# mkdir /nsd09/test01
[root@server0 /]# ls -ld /nsd09/test01
[root@server0 /]# chmod g+s /nsd09
[root@server0 /]# ls -ld /nsd09
[root@server0 /]# mkdir /nsd09/abc01
[root@server0 /]# ls -ld /nsd09/abc01
[root@server0 /]# ls -ld /nsd09/test01
[root@server0 /]# mkdir /nsd09/abc01/nsd
[root@server0 /]# ls -ld /nsd09/abc01/nsd
#########################################################
acl訪問控制列表
acl訪問策略
– 能夠對個別用戶、個別組設置獨立的權限
– 大多數掛載的EXT3/4、XFS文件系統默認已支持
[root@server0 /]# mkdir /nsd11
[root@server0 /]# chmod o=--- /nsd11
[root@server0 /]# ls -ld /nsd11
[root@server0 /]# su - zhangsan
[zhangsan@server0 ~]$ cd /nsd11
-bash: cd: /nsd11: Permission denied
[zhangsan@server0 ~]$ exit
logout
[root@server0 /]# setfacl -m u:zhangsan:rx /nsd11
[root@server0 /]# su - zhangsan
[zhangsan@server0 ~]$ cd /nsd11
[zhangsan@server0 nsd11]$ pwd
[zhangsan@server0 nsd11]$ exit
##########################################################
– getfacl 文檔... #查看ACL訪問控制列表
– setfacl [-R] -m u:用戶名:權限類別 文檔...
– setfacl [-R] -m g:組名:權限類別 文檔...
– setfacl [-R] -x u:用戶名 文檔... #刪除指定ACL
– setfacl [-R] -b 文檔... #清空ACL
[root@server0 /]# mkdir /nsd12
[root@server0 /]# setfacl -m u:zhangsan:rwx /nsd12
[root@server0 /]# useradd lisi
[root@server0 /]# setfacl -m u:lisi:rx /nsd12
[root@server0 /]# setfacl -m u:tom:rx /nsd12
[root@server0 /]# getfacl /nsd12
[root@server0 /]# setfacl -x u:lisi /nsd12 #刪除指定用戶的ACL
[root@server0 /]# getfacl /nsd12
[root@server0 /]# setfacl -b /nsd12 #刪除目錄所有的ACL
[root@server0 /]# getfacl /nsd12
#########################################################
[root@server0 /]# ls -ld /public
[root@server0 /]# setfacl -m u:tom:--- /public
[root@server0 /]# getfacl /public
#########################################################
使用LDAP認證
LDAP服務器: 網絡用戶 用戶的集中管理 ,用戶信息由LDAP服務器提供
本地用戶: 用戶信息由/etc/passwd
LDAP服務器: classroom.example.com
客戶端:虛擬機Server
1.安裝客戶端軟件sssd,與LDAP網絡用戶服務器溝通
[root@server0 /]# yum -y install sssd
2.安裝圖形工具 authconfig-gtk 配置sssd
[root@server0 /]# yum -y install authconfig-gtk
[root@server0 /]# exit
登出
[root@room9pc01 ~]# ssh -X [email protected]
[root@server0 ~]# authconfig-gtk
選擇LDAP
dc=example,dc=com #指定服務端域名
classroom.example.com #指定服務端主機名
勾選TLS加密
使用證書加密: http://classroom.example.com/pub/example-ca.crt
選擇LDAP密碼
3.重起sssd服務,驗證
[root@server0 ~]# systemctl restart sssd
[root@server0 ~]# grep 'ldapuser0' /etc/passwd
[root@server0 ~]# id ldapuser0
[root@server0 ~]# id ldapuser1
#######################################################
家目錄漫遊
Network File System,網絡文件系統
– 由NFS服務器將指定的文件夾共享給客戶機
– 客戶機將此共享目錄 mount 到本地目錄,訪問此共享
資源就像訪問本地目錄一樣方便
– 類似於 EXT4、XFS等類型,只不過資源在網上
NFS共享服務器:classroom.example.com
虛擬機Server:
1.查看classroom有那些共享
[root@server0 ~]# showmount -e classroom.example.com
Export list for classroom:
/home/guests 172.25.0.0/255.255.0.0
2.掛載訪問
# mkdir /nfs
# ls /nfs
# mount classroom.example.com:/home/guests /nfs
# ls /nfs
# mkdir /home/guests
# umount /nfs
# ls /nfs
# mount classroom.example.com:/home/guests /home/guests
# ls /home/guests
# su - ldapuser0
$ exit
#########################################################
教學環境介紹
##############################################################
find查找文件
根據名稱查找,忽略大小寫
– -iname
[root@server0 ~]# find /etc/ -name "PASSWD"
[root@server0 ~]# find /etc/ -iname "PASSWD"
根據賬號名稱或所屬組
– -user、-group
[root@server0 ~]# find /home/ -group student
限制目錄查找的深度(最大層數)
– -maxdepth
[root@server0 ~]# find /etc/ -maxdepth 1 -name "*.conf"
[root@server0 ~]# find /etc/ -maxdepth 2 -name "*.conf"
##########################################################
附加權限
Set UID
附加在屬主的 x 位上
– 屬主的權限標識會變爲 s
– 適用於可執行文件,Set UID可以讓使用者具有文件屬主的身份及部分權限
– 傳遞Set UID文件所有者身份
[root@server0 ~]# ls /usr/bin/mkdir
/usr/bin/mkdir
[root@server0 ~]# /usr/bin/mkdir /opt/test01
[root@server0 ~]# ls /opt/
rh test01
[root@server0 ~]# cp /usr/bin/mkdir /usr/bin/hahadir
[root@server0 ~]# /usr/bin/hahadir /opt/test02
[root@server0 ~]# ls /opt/
[root@server0 ~]# ls -l /usr/bin/hahadir
-rwxr-xr-x. 1 root root 79712 3月 17 09:41 /usr/bin/hahadir
[root@server0 ~]# chmod u+s /usr/bin/hahadir
[root@server0 ~]# ls -l /usr/bin/hahadir
[root@server0 ~]# su - student
[student@server0 ~]$ /usr/bin/mkdir nsd01
[student@server0 ~]$ ls -l
total 0
drwxrwxr-x. 2 student student 6 Mar 17 09:44 nsd01
[student@server0 ~]$ /usr/bin/hahadir nsd02
[student@server0 ~]$ ls -l
Sticky Bit
附加在其他人的 x 位上
– 其他人的權限標識會變爲 t
– 適用於開放 w 權限的目錄,可以阻止用戶濫用 w 寫入權限(禁止操作別人的文檔)
[root@server0 ~]# mkdir /public
[root@server0 ~]# chmod ugo=rwx /public
[root@server0 ~]# ls -ld /public
[root@server0 ~]# chmod o+t /public
[root@server0 ~]# ls -ld /public
1 案例1:配置附加權限
1.1 問題
本例要求創建一個某個組的用戶共享使用的目錄 /home/admins,滿足以下要求:
1. 此目錄的組所有權是 adminuser
2. adminuser 組的成員對此目錄有讀寫和執行的權限,除此以外的其他所有用戶沒有任何權限(root用戶能夠訪問系統中的所有文件和目錄)
3. 在此目錄中創建的文件,其組的所有權會自動設置爲屬於 adminuser 組
1.2 方案
使目錄的屬組能夠向下自動繼承,只要對這個目錄設置Set GID附件權限即可。
1.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:創建目錄並調整權限
1)新建文件夾
1. [root@server0 ~]# mkdir /home/admins
2)調整並確認權限
1. [root@server0 ~]# chown :adminuser /home/admins
2. [root@server0 ~]# chmod ug=rwx,o-rwx /home/admins
3. [root@server0 ~]# chmod g+s /home/admins
4.
5. [root@server0 ~]# ls -ld /home/admins/
6. drwxrws---. 2 root adminuser 6 12月 23 23:13 /home/admins/
步驟二:驗證目錄的特性
1)在此目錄下新建一個文件
1. [root@server0 ~]# touch /home/admins/a.txt
2)查看新建文件的歸屬,其屬組應該與父目錄相同
1. [root@server0 ~]# ls -lh /home/admins/a.txt
2. -rw-r--r--. 1 root adminuser 0 12月 23 23:17 /home/admins/a.txt
2.1 問題
本例要求將文件 /etc/fstab 拷貝爲 /var/tmp/fstab,並調整文件 /var/tmp/fstab的權限,滿足以下要求:
1. 此文件的擁有者是 root
2. 此文件屬於 root 組
3. 此文件對任何人都不可執行
4. 用戶 natasha 能夠對此文件執行讀和寫操作
5. 用戶 harry 對此文件既不能讀,也不能寫
6. 所有其他用戶(當前的和將來的)能夠對此文件進行讀操作
2.2 方案
針對個別用戶的權限策略,使用setfacl命令進行設置。
2.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:複製文件
1)使用cp命令進行復制
1. [root@server0 ~]# cp /etc/fstab /var/tmp/fstab
2)確認複製後的權限
1. [root@server0 ~]# ls -l /var/tmp/fstab
2. -rw-r--r--. 1 root root 313 12月 23 23:01 /var/tmp/fstab
說明已經滿足案例要求的前三條和最後一條。
步驟二:調整權限
1)增加額外的訪問控制策略
1. [root@server0 ~]# setfacl -m u:natasha:rw /var/tmp/fstab
2. [root@server0 ~]# setfacl -m u:sarah:- /var/tmp/fstab
2)確認結果
1. [root@server0 ~]# getfacl /var/tmp/fstab
2. getfacl: Removing leading '/' from absolute path names
3. # file: var/tmp/fstab
4. # owner: root
5. # group: root
6. user::rw-
7. user:natasha:rw-
8. user:sarah:---
9. group::r--
10. mask::rw-
11. other::r--
12.
13. [root@server0 ~]#
3.1 問題
本例要求配置虛擬機server0使用系統classroom.example.com提供的LDAP服務,相關信息及要求如下:
1. 驗證服務的基本DN是:dc=example,dc=com
2. 賬戶信息和驗證信息都是由 LDAP 提供的
3. 連接要使用證書加密,證書可以在下面的鏈接下載:http://classroom.example.com/pub/example-ca.crt
4. 當正確完成配置後,用戶 ldapuser0 應該能登錄到你的系統,不過暫時沒有主目錄(需完成 autofs 題目)
5. 用戶 ldapuser0 的密碼是 password
3.2 方案
需要安裝軟件包sssd已提供支持。
配置工具可選擇默認安裝的authconfig-tui,或者使用圖形程序authconfig-gtk。
3.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:安裝支持軟件sssd、圖形配置authconfig-gtk
1. [root@server0 ~]# yum -y install sssd authconfig-gtk
2. .. ..
步驟二:配置LDAP客戶端參數
1)使用authconfig-gtk認證配置工具
打開配置程序(如圖-1所示)後,可以看到“Identity & Authentication”窗口。
圖1
單擊“User Account Database”右側的下拉框選中“LDAP”,單擊“Authentication Method”右側的下拉框選中“LDAP Password”。然後在“LDAP Search DN”後的文本框內填入指定的基本DN字串“dc=example,dc=com”,在“LDAP Server”後的文本框內填入指定的LDAP服務器地址“classroom.example.com”(如圖-2所示)。
圖-2
勾選“Use TLS to encrypt connections”前的選框,然後下方的“Download CA Certificate”按鈕會變成可用狀態,上方的警告消息也會自動消失(如圖-3所示)。
圖-3
單擊“Download CA Certificate”按鈕,根據提示填入TLS加密用CA證書的下載地址(http://classroom.example.com/pub/example-ca.crt),然後單擊OK回到配置界面,單擊右下方的“Apply”按鈕(如圖-4所示),耐心等待片刻即完成設置,配置程序自動關閉。
圖-4
2)確保sssd服務已經運行
只要前一步配置正確,檢查sssd服務會發現已經自動運行。
1. [root@server0 ~]# systemctl status sssd
2. sssd.service - System Security Services Daemon
3. Loaded: loaded (/usr/lib/systemd/system/sssd.service; enabled)
4. Active: active (running) since Sat 2016-11-26 05:39:21 CST; 2min 58s ago
5. Process: 2030 ExecStart=/usr/sbin/sssd -D -f (code=exited, status=0/SUCCESS)
6. Main PID: 2031 (sssd)
7. .. ..
確保sssd服務開機自啓。
1. [root@server0 ~]# systemctl enable sssd
步驟三:LDAP客戶端驗證
1)在客戶機上能檢測到LDAP網絡用戶
檢查ldapuser0的ID值:
1. [root@server0 ~]# id ldapuser0
2. uid=1700(ldapuser0) gid=1700(ldapuser0) groups=1700(ldapuser0)
2)可以su切換到LDAP網絡用戶
切換到用戶ldapuser0並返回:
1. [root@server0 ~]# su - ldapuser0
2. su: warning: cannot change directory to /home/guests/ldapuser0: No such file or directory
3. mkdir: cannot create directory '/home/guests': Permission denied
4. -bash-4.2$ //成功登入,但沒有家目錄
5. -bash-4.2$ exit //返回原用戶環境
6. Logout
7. [root@server0 ~]#
3)可以使用LDAP網絡用戶在客戶機上登錄
以用戶ldapuser0,密碼password嘗試ssh登錄到server0:
1. [root@server0 ~]# ssh ldapuser0@server0.example.com
2. The authenticity of host 'server0.example.com (172.25.0.11)' can't be established.
3. ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
4. Are you sure you want to continue connecting (yes/no)? yes //首次接受密鑰
5. Warning: Permanently added 'server0.example.com,172.25.0.11' (ECDSA) to the list of known hosts.
6. [email protected]'s password: //輸入密碼password
7. Last login: Sat Nov 26 05:45:51 2016
8. Could not chdir to home directory /home/guests/ldapuser0: No such file or directory
9. mkdir: cannot create directory ‘/home/guests’: Permission denied
10. -bash-4.2$ //成功登入,但沒有家目錄
11. -bash-4.2$ exit //返回原用戶環境
12. logout
13. Connection to server0.example.com closed.
14. [root@server0 ~]#
4.1 問題
沿用練習3,本例要求手動掛載 LDAP 用戶的家目錄,實現漫遊的效果。相關信息及要求如下:
1. 主機 classroom.example.com 已經預先配置好通過NFS輸出了/home/guests 目錄到你的系統,這個文件系統下包含了用戶 ldapuser0 的主目錄
2. ldapuser0 的主目錄是:classroom.example.com:/home/guests/ldapuser0
3. ldapuser0 的主目錄應該掛載到本地的 /home/guests/ldapuser0 目錄下
4. 用戶對其主目錄必須是可寫的
5. ldapuser0 用戶的密碼是 password
4.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:掛載LDAP用戶的家目錄
1)創建掛載點目錄
1. [root@server0 ~]# mkdir /home/guest/ldapuser0
2. [root@server0 ~]# ls /home/guest/ldapuser0
3. [root@server0 ~]# //未掛載資源前內容爲空
2)掛載NFS資源
1. [root@server0 ~]# mount classroom.example.com:/home/guests/ldapuser0 /home/guests/ldapuser0/
3)確認掛載結果
1. [root@server0 ~]# ls -ld /home/guests/ldapuser0/ //確認資源歸屬及權限
2. drwx------. 4 1700 1700 88 7月 11 2014 /home/guests/ldapuser0/
3. [root@server0 ~]# ls -A /home/guests/ldapuser0/ //root無法查看
4. ls: 無法打開目錄/home/guests/ldapuser0/: 權限不夠
步驟二:驗證LDAP用戶的家目錄漫遊
通過su或ssh方式切換到ldapuser0登錄,可以發現家目錄已經可用了。
1. [root@server0 ~]# su - ldapuser0
2. Last login: Sat Nov 26 06:34:02 CST 2016 from server0.example.com on pts/2
3. [ldapuser0@server0 ~]$ pwd //成功登入,且位於家目錄下
4. /home/guests/ldapuser0
5. [ldapuser0@server0 ~]$ exit //返回原用戶環境
6. logout
7. [root@server0 ~]#