1、文件传输:scp、rsync
1.1 scp 命令:
加密的方式在本地主机和远程主机之间复制文件。
1.1.1 本地目录复制到远程:
[root@node1 ~]# scp -r jfedu/ 172.16.13.25:/data/
# 第一次使用命令会提示保存配对信息
The authenticity of host '172.16.13.25 (172.16.13.25)' can't be established.
ECDSA key fingerprint is SHA256:19IZkFNSxlWcSdBa0WvDmEmqScSUTNAf+2rtobvH+Bs.
ECDSA key fingerprint is MD5:c4:1b:6c:b1:93:4b:7c:f2:af:10:30:34:5c:39:44:83.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.13.25' (ECDSA) to the list of known hosts.
root@172.16.13.25's password:
index.html 100% 0 0.0KB/s 00:00
aa.txt 100% 0 0.0KB/s 00:00
ps:jfedu后面不管带不带/,都可以同步jfedu目录
如果只想同步目录下文件:
scp -r jfedu/* 172.16.13.25:/data/
1.1.2 本地文件复制到远程:
[root@node1 ~]# scp jfedu.txt 172.16.13.25:/data/
[root@node1 ~]# scp jfedu.txt 172.16.13.25:/data/
root@172.16.13.25's password:
jfedu.txt 100% 0 0.0KB/s 00:00
1.1.3 启用压缩:
scp -rC jfedu/ 172.16.13.25:/data/
1.2 rsync 命令
远程数据同步工具,它传送两个文件的不同部分,而不是每次都整份传
送,因此速度相当快。
需要注意:本地与远程服务器都需要安装好 rsync软件包。
1.2.1 目录保持绝对一致:
–delete 参数会删除源目录中没有,而远程目录中存在的文件 ,以此保持
文件一致。
# 同步本地目录。
[root@node1 ~]# rsync -av --delete A/ /data/B
[root@node1 ~]# rsync -av --delete A /data/B
ps1: B目录可以不存在,如果不存在则自动创建,但是上级data必须存在。
ps2:A目录带不带斜杠/,意义是不一样的,带斜杠表示同步A目录下的文件, 不带则同步A目录以及其中文件。
--delete: B与A保持绝对的一致,B中存在,而A中不存在的文件将被删除。
1.2.2 本地同步到远程:
[root@node1 ~]# rsync -av A/ 172.16.13.25:/data/
将本地A目录下所有文件,同步至远程服务器132上,
同理,要想实现绝对的一致,需要加上--delete参数。
使用ssh协议连接到远程,所以可以将本机公钥发给远程主机,
否则每次执行都会提示出入密码。
1.2.3 远程同步到本地:
rsync -av 172.16.13.25:/data/C .
. # 表示将远程目录C,同步到本地C目录。
ps:要注意不带斜杠会在本地创建一个目录,
如果带上斜杠/,则只会同步C目录下的文件。
1.3 开启shell扩展:
shopt -s extglob
rm -rf !(anaconda-ks,cfg)
2. 权限管理
chmod、chown、setfacl、chattr、lsattr
2.1 chmod 命令:
变更文件或目录的权限
u 用户user,文件或目录的所有者。
g 用户组group,文件或目录所属群组
o 其它用户others
a 所有用户all,系统默认使用此项
+ 添加某些权限
- 取消某些权限
= 设置文件的权限为给定的权限
r 表示可读权限
w 表示可写权限
x 表示可执行权限
s 设置权限suid和sgid,使用权限组合“u+s”设定文件的用户的ID位,“g+s”设置组ID位
t 只有目录或文件的所有者才可以删除目录下的文件
-R 递归处理,将指令目录下的所有文件及子目录一并处理
2.1.1 设置可读可写:
# o+w | o=rw
+ 表示在原先权限的基础上加写权限。
= 表示直接将其他用户权限设置为可读可写,如果以前还有可执行权限,现 在也去掉。
[root@node1 ~]# ll
-rw-r--r-- 1 root root 0 8月 15 15:09 jfedu1
# 对普通文件授权:
[root@node1 ~]# chmod o+w file1
[root@node1 ~]# ll
-rw-r--rw- 1 root root 0 8月 15 15:09 jfedu1
# 对目录进行授权,R表示递归:
[root@node1 ~]# chmod -R o+w jfedu/
2.1.2 危险操作:
# 将目录权限设置为其他用户可写,这时普通用户是可以进入到目录中任意删 除,修改文件名(即使不是自己的文件),对文件的其他用户权限为不可写的文件 也可以强制保存。
chmod o+w /data/
jfedu1用户修改jfedu2用户的文件:
-rw-r--r-- 1 jfedu2 jfedu2 30 八月 15 15:32 fs
[jfedu1@nodw1 data]$ vim fs
...
#提示不能修改
E45: 'readonly' option is set (add ! to override)
这时可以强制保存(:wq!)。
[lutixia1@localhost data]$ cat fs
this is test
this is jfedu2
this is jfedu1
【o-w】将目录权限设置为其他用户不可写(目录默认权限755),这时普通用 户就无法删除,修改文件名,但是如果文件本身有其他可写权限,还是可以写数 据的。
总结一下:父目录其他用户有可写权限,其下子文件不管有没有可写权
限,均可强行写入,修改!
父目录其他用户没有可写权限,其下子文件只有可写才有写入权限,但不
具备删除,修改文件名权限。
2.1.3 设置t权限:
-t 是对目录设置特殊权限,用户只能删除自己的文件。
# data目录需要设置其他人可写权限
[root@node1 ~]# chmod o+w,o+t /data/
#lutixia2想删除lutixia1的文件,失败
[jfedu2@node1 data]$ ll -rw-r--r-- 1 jfedu1 jfedu1 63 Aug 22 05:58 fs
[jfedu2@node1 data]$ rm -rf fs rm: cannot remove ‘fs’: Operation not permitted
2.1.4 设置s权限:
【-s】权限可以设置suid和sgid:
- “u+s” : 设置使文件在执行阶段具有文件所有者的权限;
- “g+s” 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。
【u+s】
#未设置前,普通用户执行netstat -ntlp,会提示没有root权限,普通用户 看不了pid的属主:
[jfedu1@localhost data]$ netstat -nltp
(No info could be read for "-p": geteuid()=1003 but you should be root.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -.
#设置suid后:
chmod u+s /usr/bin/netstat
[jfedu1@node1 data]$ netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign
Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1050/sshd
【g+s】
任何用户在此目录下创建的文件都具有和该目录所属的组相同的组
[root@localhost ~]# chmod g+s /data
[jfedu2@localhost data]$ ll
drwxrwsr-x 2 jfedu1 root 6 Aug 22 07:14 jfedu1
drwxrwsr-x 2 jfedu2 root 6 Aug 22 07:15 jfedu2
2.2 setfacl命令:
设置文件访问控制列表
2.2.1 修改acl规则:
通过-m参数,可以修改文件的acl 规则
# 设置用户权限
setfacl -m u:jfedu:rw abc.txt
# getfacl用于查看文件acl权限:
[root@node1 ~]# getfacl /data/abc.txt
# file: data/abc.txt
# owner: root
# group: root
#第一个user没有写用户名,代表是默认属主root的权限
user::rw-
#第二个user代表得是jfedu用户得权限
user:jfedu:rw-
group::r--
mask::rw-
other::r--
# 设置组权限
setfacl -m g:web:rw abc.txt
# 取消用户所有权限
setfacl -m u:jfedu:- abc.txt
# 取消其他用户得所有权限:
setfacl -m o::- abc.txt
# 用户必须存在,否则会报错:
[root@node1 ~]# setfacl -m u:jfedu:rw /data/abc.txt
setfacl: Option -m: Invalid argument near character 3
[root@node1 ~]# id jfedu
id: lutixia: no such user
[root@node1 ~]# useradd jfedu
[root@node1 ~]# setfacl -m u:jfedu:rw /data/abc.txt
#现在jfedu可以写入数据到abc.txt文件了
[jfedu@node1 ~]$ echo "this is jfedu" >
/data/abc.txt
2.2.2 批量修改acl规则:
【-M】从文件中读取相应得权限进行设置,多用于批量管理用户权限。
#先创建一个文件:
touch acl.txt
#添加要设置得权限:
u:jfedu:rwx
u:jfedu1:rw
u:jfedu2:x
u:jfedu3:rx
#执行,其中abc.txt是要进行权限设置得文件:
setfacl -M acl.txt abc.txt
2.2.3 撤销acl权限
【-x】撤销某个用户的 acl 权限,恢复到普通ugo权限:
# 不能单独撤销某一个权限,比如只撤销可写权限
setfacl -x u:jfedu abc.txt
【-b】 撤销所有用户或者组的acl 权限:
setfacl -b /data/abc.txt
2.2.4 复制 acl 规则:
【–set-file】复制一个文件acl 权限到另外一个文件。
getfacl file1 | setfacl --set-file=- file2
-表示输出流
echo jfedu |cat -
2.2.5 临时降低权限:
【mask】 会临时降低acl 用户或者组的权限,只能降低用户权限,不能提升。
# 设置acl用户的权限为rw:
[root@node1 data]# setfacl -m u:jfedu:rw abc.txt
#这时jfedu用户是可以写入的:
[jfedu@node1 data]$ echo "this is test" >> abc.txt
# 设置mask:
[root@node1 data]# setfacl -m mask::r abc.txt
#这时acl用户只有读权限,不再可写:
[lutixia@node1 data]$ echo "this is test" >> abc.txt
-bash: abc.txt: 权限不够
注意:如果lutixia用户本身r权限(只读权限),即使mask设置为rw,也是 不能写的。
而且设置了mask之后,如果再次使用setfacl进行权限的设置,那么mask的作 用就失效了。