chmod、chown、setfacl、chattr、lsattr、
变更文件或目录的权限
u 用户user,文件或目录的所有者。
g 用户组group,文件或目录所属群组
o 其它用户others
a 所有用户all,系统默认使用此项
+ 添加某些权限
- 取消某些权限
= 设置文件的权限为给定的权限
r 表示可读权限
w 表示可写权限
x 表示可执行权限
- 表示没有权限
s 设置权限suid和sgid,使用权限组合“u+s”设定文件的用户的ID位,“g+s”设置组ID位
t 只有目录或文件的所有者才可以删除目录下的文件
-R 递归处理,将指令目录下的所有文件及子目录一并处理
[root@localhost ~]# ll
-rw-r--r-- 1 root root 0 Aug 22 05:09 file1
[root@localhost ~]# chmod o+w file1
[root@localhost ~]# ll
-rw-r--rw- 1 root root 0 Aug 22 05:09 file1
或者:
[root@localhost ~]# chmod o=rw file1
chmod o+w /data/
lutixia1用户修改lutixia2用户的文件:
[lutixia1@localhost data]$ ll
-rw-r--r-- 1 lutixia2 lutixia2 30 Aug 22 05:49 fs
[lutixia1@localhost data]$ vim fs
...
#提示不能修改
E45: 'readonly' option is set (add ! to override)
这时可以强制保存(:wq!)。
[lutixia1@localhost data]$ cat fs
this is test
this is lutixia2
this is lutixia1
3.【o-w】将目录权限设置为其他用户不可写,这时普通用户就无法删除,修改文件名,但是如果文件的其他用户有可写权限,还是可以写数据的。
总结一下:父目录其他用户有可写权限,其下子文件不管有没有可写权限,均可强行写入,修改! 父目录其他用户没有可写权限,其下子文件只有可写才有写入权限,且不具备删除,修改文件名权限。
[root@localhost ~]# chmod o+t /data/
#lutixia2想删除lutixia1的文件,失败
[lutixia2@localhost data]$ ll
-rw-r--r-- 1 lutixia1 lutixia1 63 Aug 22 05:58 fs
[lutixia2@localhost data]$ rm -rf fs
rm: cannot remove ‘fs’: Operation not permitted
【u+s】
#未设置前,普通用户执行netstat -ntlp,会提示没有root权限,普通用户看不了pid的属主:
[lutixia1@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
[lutixia1@localhost 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
[lutixia2@localhost data]$ ll
drwxrwsr-x 2 lutixia1 root 6 Aug 22 07:14 lutixia1
drwxrwsr-x 2 lutixia2 root 6 Aug 22 07:15 lutixia2
设置文件访问控制列表
【-m】修改文件的acl规则
#设置用户权限
setfacl -m u:tixia:rw abc.txt
#设置组权限
setfacl -m g:web:rw abc.txt
#取消用户所有权限
setfacl -m u:lutixia:- abc.txt
#取消其他用户得所有权限:
setfacl -m o::- abc.txt
#用户必须存在,否则会报错:
[root@localhost ~]# setfacl -m u:lutixia:rw /data/abc.txt
setfacl: Option -m: Invalid argument near character 3
[root@localhost ~]# id lutixia
id: lutixia: no such user
[root@localhost ~]# useradd lutixia
[root@localhost ~]# setfacl -m u:lutixia:rw /data/abc.txt
#getfacl用于查看文件acl权限:
[root@localhost ~]# getfacl /data/abc.txt
# file: data/abc.txt
# owner: root
# group: root
#第一个user没有写用户名,代表是默认属主root的权限
user::rw-
#第二个user代表得是lutixia用户得权限
user:lutixia:rw-
group::r--
mask::rw-
other::r--
#现在lutixia可以写入数据到abc.txt文件了
[lutixia@localhost ~]$ echo "this is lutixia" > /data/abc.txt
【-M】从文件中读取相应得权限进行设置,多用于批量管理用户权限:
#先创建一个文件:
touch acl.txt
#添加要设置得权限:
u:lutixia:rwx
u:lutixia1:rw
u:lutixia2:x
u:lutixia3:rx
#执行,其中abc.txt是要进行权限设置得文件:
setfacl -M acl.txt abc.txt
【-x】撤销某个用户得acl权限,恢复到普通ugo权限:
#不能单独撤销某一个权限,比如只撤销可写权限
setfacl -x u:lutixia abc.txt
【-b】撤销所有用户或者组得acl权限:
setfacl -b /data/abc.txt
【--set-file】复制一个文件acl权限到另外一个文件:
getfacl file1 | setfacl --set-file=- file2
-表示输出流
echo jfedu |cat -
【mask】会临时降低acl用户或者组的权限,只能降低用户权限,不能提升。
#设置acl用户的权限为rw:
[root@localhost data]# setfacl -m u:lutixia:rw abc.txt
#这时lutixia用户是可以写入的:
[lutixia@localhost data]$ echo "this is test" >> abc.txt
#设置mask:
[root@localhost data]# setfacl -m mask::r abc.txt
#这时acl用户只有读权限,不再可写:
[lutixia@localhost data]$ echo "this is test" >> abc.txt
-bash: abc.txt: 权限不够
注意:如果lutixia用户本身r权限(只读权限),即使mask设置为rw,也是不能写的。
而且设置了mask之后,如果再次使用setfacl进行权限的设置,那么mask的作用就失效了。
【-d】继承上级目录的所有acl权限:
#提前设置好主目录的权限,否则,只能在其子目录有rwx权限
setfacl -m u:lutixia:rwx lutixia/
#添加继承权限
setfacl -m d:u:lutixia:rwx lutixia/
改变文件属性
【+a】让某个文件只能往里面追加内容,不能删除
chattr +a /var/log/nginx/access.log
去掉属性就是-a
【+i】防止系统中某个关键文件被修改,删除
chattr +i /etc/fstab
获取文章更新,以及常用软件,可以关注公众号: 笨办法学linux