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 ~]#