Linux系统中将文件或目录分为三种权限:可读、可写、可执行
三种权限对应这个三个身份,三个身份分别为owner(所有者)、group(和所有者同组的用户)others(其他用户)
- rw- --- ---. 1 root root 1257 Mar 13 03:32 anaconda-ks.cfg
1代表硬链接的数量
这里的root为owner(即登陆的用户),只不过root是超级管理员身份,拥有所有的执行权限,但如果换用户的话,该用户对anac这个文件的权限只有rw,没有x。
rw-对应着root
这里的root为group(即为与登陆的用户在同一组),他的权限是不能读取,不能写入,不能执行。
---对应着root
这里的空白为others(除去已经登录的用户、超级管理员root、附加组里的用户),这个others既不能读取,也不能写入,更不能执行。
---对应着
一、权限的设置(通过对文件或目录从而对对应的身份进行权限的设置,此设置只是说相应的权限虽然改变了,但只是对这个文件或目录的权限改变了,而不是对所有的文件或目录的权限改变)
chmod命令中需要用到的选项
u:代表owner(当前登录用户)
g:代表group(当前登录用户的同组用户)
o:代表others(其他用户)
a:代表all(所有人)
如果在设置权限的时候不指定给谁设置,则默认给所有用户设置
权限字符
r:读
w:写
x:执行
-:没有权限
权限的分配方式
+:增加当前权限
-:删除当前权限
=:将权限设置成具体的值(只能结合字母的形式使用)
整体命令
-R 用法
chmod -R #当文档的形式是目录的形式
比如说,我现在的登录用户是root(超管),有一个“1”文件,他的详细信息如下:
- rw- r-- r-- 1 root root 0 3月 15 14:40 1
文件1对应登录用户root的权限为rw-
文件1对应登录用户root的同组用户的权限为r--
文件1对应其他用户的权限为r--
现在我要给登录用户root的同组用户增加可写的权限,让其他用户不能查看文件1,该如何设置,格式如下
chmod g+w,o-r 1
chmod是对从单个文件对不用身份的用户进行改变权限
其实还有其他的表示方式,数字形式
读 = r = 4
写 = w = 2
执行 = x = 1
没有任何权限 = - = 0
比如777 的意思是,当前登录用户具有可读、可写、可执行权限,跟当前登录用户同组的用户也具有可读、可写、可执行权限,其他用户也具有这三种权限。
Linux出于安全考虑,设置了一个umask管控,他的数值为022,创建普通文件时,他会自动减去这个022,就是说666-022=644,所以一般的普通文件的权限为644,而创建普通目录时,则是777-022=755,一般普通目录的权限为755。
属主和属组的设置
命令为chown:更改文档的所属用户(此用法只对执行的文件或目录生效)
对目录操作时需要加-R,对文件操作时不需要加-R(也是递归设置,对目录里的全部文件生效)
-R
改变此文件的属主和属组
chown 新的属主:新的属组 文件名
改变此文件的属主
chown 新的属主 文件名
改变此文件的属组
chown 新的属主: 文件名
改变此文件的属主,自动继承这个用户的所有的组
chown 新的属主: 文件名
文件的特殊权限
特殊权限有两种:suid、sgid、sbit
suid:只能设置在二进制可执行程序上面,什么是二进制可执行程序,比如ls、cat、more、less,命令就是二进制可执行程序,给他设置成suid权限后,其他用户在执行所设置的命令后,他就会以属主的身份执行这个命令,虽然他的权限当中没有执行这个命令的权限。
如何设置:先查看命令的绝对路径,其次 ls -l `which 命令`:意思是获取这个命令路径的详细信息,为的是查看此命令对应用户的权限。
chmod u+s `which 命令`
如果命令没有x权限(可执行的权限)时,他会变成大S。意识就是说,在我设置好suid权限时,对应的用户使用设置的命令后,就会变成程序所有者的权限。前提是其他用户要跟root用户在同一组即附加组里。
撤销suid权限
chmod u-s `which 命令`
sgit:对组设置
在创建文件的时候,会继承上级目录的所属组。
chmod g+s 用户名
去掉权限。
chmod g-s 用户名
sbit:对一个目录设置sbit权限后,只有属主能删掉你这个目录,其他人都删不掉你这个目录,切记,创建公共目录要在根目录下创建。
首先要知道/tmp是一个公共目录,其他用户可以上传文件到这个目录里,但是只有上传者可以删除这个文件,其他人不行。
用法:(给此目录设置了sbit权限)
chmod o+t /要设置的目录名字
(给此目录减去了sbit权限)
chmod o-t /要设置的目录名字
acl的使用(必须在公共文件夹内)
假如我设置了一个用户,但此用户是其他用户,但我想不想通过改写此文件的其他用户权限来进行设置,怎么办?
setfacl -m u:用户名:权限 要设置的文件名
即可查看每个不同用户对此文件拥有的权限
getfacl 文件名 :
即可移除刚设置的用户权限
setfacl -b 文件名
即可移除此用户对此文件的权限
setfacl -x 用户名 文件名
sudo切换用户来执行我特定的命令
配置文件
/etc/sudos
比如说我创建了一个普通用户,但我想他可以执行reboot、shutdown、init、halt、user管理这些命令,怎么办?
visudo进入文件,修改第92行处,内容为Allow root to run any commands anywhere,意思为允许root用户在任何地点执行任何命令,修改的话,在此下一行处添加,原格式为:root ALL=(ALL) ALL,
第一个ALL代表anywhere(代表换一个ip地址,不在我这太电脑上登录),第二个ALL代表root,第三个ALL 代表所有命令。那么我们要添加的格式为,用户名 ALL=(ALL)要设置的命令的绝对路径,而后在设置的用户登录状态下,使用此命令时,格式为sudo 命令,即可实现上述要求。