ls -l install.log
-rw-r--r-- 1(引用计数) root(所有者) root(所属组) 26195(大小) DEC 17 10:42(创建时间) install.log(文件名称)
文件类型、属主u、属组g、其他o
文件
r-读-查看
w-写-修改内容
x-执行-把此文件提请内核,启动为一个进程
二进制程序,没有r权限,有x权限,就能运行
目录
r-读-文件列表
w-写-配合x使用,才生效,可以在目录中创建或者删除文件,不能修改
x-执行-ls/cd/打开文件
X-大写-只给目录x权限,不给文件x权限
只给x权限,无r权限——>做网站,告诉你,就可以访问,不告诉你,就访问不了
只有x权限,能cd进去,看不到文件,知道名字,可以cat file_name
只有r权限:只能查看文件列表,不能cd进入目录
w权限,配合x权限,才可以生效,删除文件必须要有x权限和w权限
是否有权限删除文件,与文件本身无关,与文件所在目录有关;只有x权限,无r权限,也可行:echo xxx >> file(文件名要知道)
root无论在什么情况下,都有rw权限。
所有者、所属组都无x权限,root就无x权限;任何一个有x权限,root就有x权限;
用户最终得到的权限(匹配顺序):
所有者——所属组——other,一旦匹配,就不会向后匹配;
一般情况,所有者权限最大、所属组次之,other最小
suid ——> owner ——> 属主x位 ——> s ——> 4777 S(大写)属主无x权限
sgid ——> group ——> 属组x位 ——> s ——> 2777 S(大写)属组无x权限
stick bit ——> other ——> 其他x位 ——> t ——> 1777 T-other无x权限
任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限
启动为进程后,进程的属主——>发起者,属组——>发起者所属的组
进程访问文件时的权限,取决于进程的发起者
进程发起者,同文件的属主,则应用文件属主权限
进程发起者,同文件的属组,则应用文件属组权限
都无,则应用文件“其他”权限
可执行文件的SUID权限
启动为进程后,进程的属主为原程序文件的属主
用户执行程序时,继承程序所有者的权限
suid只对二进制可执行程序有效
suid设置在目录上,无意义
chmod u+s file
chmod u-s file
chmod 4755 file -rwsr-xr-x
chmod 755 file -rwxr-xr-x
chmod u+s /bin/cat(nano) 所有人都能以root身份操作,黑客编辑一个nano工具软件
访问/etc/shadow root有权限,wang无权限
passwd程序 root有权限,wang有权限(更改口令) 原因是passwd原属主和属组都是root
可执行文件的sgid权限
启动为进程后,进程的属组为原程序文件的属组
chmod g+s file
chmod g+s file
目录上的sgid权限
默认情况下,用户创建文件时,该文件的属组为此用户所属的主组
一旦目录设定了sgid权限,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
创建一个协作目录
chmod g+s dir
chmod g+s dir
ll /bin/cat -rwxr-sr-x
stick位
一般情况下,用户对目录具有写权限时,可以删除该目录中的任何文件,不论该文件的权限或者拥有权
在目录设置stick位后,只有文件的所有者或者root可以删除该文件
stick设置在文件上,无意义
chmod o+t dir
chmod o-t dir
chmod 1770 dir
1770 -rwxrwx--t 有x权限
-rwxrwx--T 无x权限
3770 -rwxrws--t
7770 -rwsrws--t
chmod
chmod [-R] {[ugoa] [+-=] [rwxst]} 文件/目录 对文件目录设置权限
chmod [-R] {[ugoa] [+-=] [ugo]} 文件/目录 参考当前权限,设置其他权限
chmod g=u testfile
chmod o+u testfile
chmod -R a=rwX 目录名
目录有x权限,其中的文件无x权限
目录中的某个文件的任何一个人有x权限,目录和该文件所对应的3种人都会有x权限
X权限没有对应的8进制
数值设定
chmod [-R] [n0]n1n2n3 文件名/目录名
n0 特殊权限
n1 所有者
n2 所属组
n3 其他人
chown 改属主/组
chmod owner:group 文件/目录
chown -R owner:group 文件/目录
chown -R owner 文件/目录
chown -R :group 文件/目录
-R递归,该文件夹的所有子文件变为相同属主/组,普通用户不能改文件属主
chgrp 改文件属组
chgrp -R group 文件/目录
-R递归,普通用户可以改文件所属组,前提:该用户是新属组的成员
文件系统vfat格式,不支持“所有者”“所属组”,所以命令行不通,报错
umask掩码
从777或666中,将文件对应的权限位去掉,得到默认权限
umask+默认权限 = 666(file)/777(dir)
新建的文件权限:666-umask,如果有奇数,就加1;
新建的目录权限:777-umask
非特殊用户umask是002,root的umask是022,/etc/bashrc
umask值只会影响新建文件的权限,原文件权限不受影响;
umask值越大,默认权限越小,生产环境中,默认权限小有好处
全局配置/etc/bashrc /etc/profile
用户配置~wang/.bashrc
umask 查看当前umask值
umask 数字(3位数) 设定当前umask值,exit后,恢复原值
vim .bashrc ——> 在文件最下方空白处添加:umask xxx(3位数) ——> . .bashrc 永久保存umask值
umask -S(大写) 显示权限(u=,g=,o=)
umask u=,g=,o= 直接设定权限
umask -p >> ~wang/.bashrc 输出可以被调用
cat ~wang/.bashec 看到“umask -p”的输出内容
练习
两个不同的用户,创建文件同属一个组,可以互相访问文件,但是不可以互删文件
sale组
wang加入sale组,touch wang1/wang2,文件的属主是自己,属组是sale useradd -g sale wang(新用户) groupmems -g sale -a wang(已存在的用户) sale~wang~wang1
mage加入sale组,touch mage1/mage2,...... useradd -g sale mage
dir目录的属组为sale,属主为root,设置为sticky,rwxrw---t chown :sale dir ; chmod o+t dir ;
复制/etc/fstab文件到/var/tmp下,设置文件所有者为wangcai读写权限,所属组为sysadmins组有读写权限,其他人无权限
cp /etc/fstab /var/tmp
chown wangcai:sysadmins /var/tmp/fstab
chmod ug=rw,o= /var/tmp/fstab
误删除了用户wangcai的家目录,请重建并恢复该用户家目录及相应的权限属性
rm -rf /home/wangcai
cp -r /etc/skel /home/wangcai
ll -d 文件夹 /home/wangcai 显示属性和权限
chmod 700 /home/wangcai
ll -d /home/wangcai
chown -R wangcai:wangcai /home/wangcai
设定文件的特定属性
chattr +i file 不能删除、改名、更改,只能看,cat
chattr -i file 能删除、改名、更改
chattr +A file 能删除、改名、更改
chattr +a file 只能追加内容 echo aaa >> file
chattr -a file 恢复原有文件权限
lsattr file 只显示特定属性
chattr +i shadow 锁定文件
lsattr shadow 文件权限---i------
chattr +a shadow
lsattr shadow 文件权限---a------
防止误操作和破环文件
只读文件,加i后,该文件不能更改(安全加固方法)
访问控制列表
ACL:实现灵活的权限管理
设置权限的对象:文件所有者 文件所属组 其他人 以及更多的人
centos7 默认创建的xfs和ext4文件系统具有ACL功能
centos7之前的版本 默认创建的ext4文件系统无ACL功能,需要手动添加
tune2fs -o acl /dev/sdb1
mount -o acl /dev/sdb1 /mnt/test
ACL生效生效顺序
所有者——>自定义用户——>自定义组——>其他人
自定义组:一个用户,属于多个自定义组,用户的权限属于多个自定义组的累加权限
为多个用户或者组的 文件和目录赋予访问权限rwx
setfacl
getfacl file/dir 查看acl权限
setfacl -m u:wang:rwx file/dir 原有的权限不改变,只是单独设定了wang的权限
su wang
ll f1 -rw-r--r--+ 主要+号
setfacl -m g:salesgroup:rw file/dir
setfacl -m d:u:wang:rx file/dir 增加默认权限
setfacl -k file/dir 删除默认权限
dir中的 f3(原来) 原文件权限保持原状
f4(新建) 新建文件继承目录的default权限
setfacl -x d:u:wang:rx file/dir 删除默认权限,虽然删除了权限,但是+仍然存在
setfacl -X file.acl file/dir 删除多个ACL权限
setfacl -M file.acl file/dir 增加多个ACL权限
file.acl 的内容是
u:wang:-
g:g1:rwx
把权限放在一个文件里,通过调用,来使用它
cat > file.acl
setfacl -Rm g:salesgroup:rwX dir 通过ACL赋予目录默认x权限,目录内文件也不会继承x权限
setfacl -Rb file/dir 清除所有ACL权限,普通权限不受影响
文件(组)
传统组的文件权限 所属组只有一个,不存在权限的多组累加
自定义组的文件权限 权限多组累加
不同文件
f1 g1 f1和f2的权限是g1+g2
f2 g2
ACL文件上的group权限是mask值,而非传统的组权限
mask值(高压线)
自定义用户、自定义组、所属组的最大权限
mask:-w-
user:wang:rw- ——> -w- 有效
group::r-- ——> --- 有效
自定义用户和自定义组的权限不能超过mask权限
设置ACL权限,mask权限也会自动改变
实验
ACL文件权限过大,想把用户权限降下来
setfacl -m mask::r file
mask::r--
其他用户:r-- ---
自己可以设置ACL权限,但是真正生效的权限是受mask权限影响(决定);
mask::- 拒绝访问
chmod g=r f1
mask::r--
设置ACL权限,所属组的权限=mask权限
base ACL不能删除(所有者、其他人不能删除其权限)
getfacl file1 | setfacl --set-file=-(代表前面管道的标准输出) file2
getfacl file1 > file.acl
setfacl --set-file=file.acl
mask只影响除所有者和other的之外的人和组的最大权限
mask需要与用户的权限进行逻辑与运算,才能变成有效权限
用户和组的设置必须存在于mask权限设定范围内才会生效
--set选项会把原有的ACL项都删除,用新的替代,注意:
一定要包含UGO设置,不能像"-m"一样,只是添加ACL就可以
setfacl --set u::rw,u:wang:rw,g::r,o::- file
备份和恢复ACL
cp/mv 支持ACL
cp -p ,否则ACL丢失
tar工具不保留目录和文件的ACL
备份
getfacl -R /tmp/dir1 > acl.txt
setfacl -Rb /tmp/dir1 清除所有ACL权限(目录和文件)
恢复
setfacl -R --set-file=acl.txt /tmp/dir1
setfacl --restore acl.txt
作业
root root /testdir/dir 题目
chgrp g1 /testdir/dir
chmod g+s /testdir/dir
setfacl -m -R g:g2:rwx /testdir/dir
setfacl -m d:g:g2:rw /testdir/dir
setfacl -m d:g:g3:r /testdir/dir
网友评论