Linux用户权限管理

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 命令,即可实现上述要求。

posted @ 2019-06-23 20:49  冷漠铁锤王富贵  阅读(323)  评论(0编辑  收藏  举报