首页 > 代码库 > linux系统下的权限知识梳理

linux系统下的权限知识梳理

 


(0)umask是权限码,默认是022
使用命令“umask”就能查询出来

文件默认的权限是666,目录默认的权限是777
新建文件和目录的权限分别是各自默认权限减去umask权限码值


即:
新建文件权限,666-022=644
新建目录权限,777-022=755


《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《


(1)chmod,chown,chgrp

chmod表示数字权限(4,2,1),比如给a文件设置755权限,直接输入:
chmod 755 a


chown表示所属者权限,chgrp表示所属组权限,但是通常我们直接用chown授权这两个。

比如给a文件授权所属者是wangshibo,所属组是wutao,做法如下:
1)chown wangshibo a
chgrp wutao a
2)chown wangshibo.wutao a

 

《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《


(2)chattr隐藏权限,这个很重要!!!通常用于锁定文件。
一般用到两个参数:i和a
chattr +i 表示对于一个文件除了查看,什么都干不了(删除,增加,更名)
chattr +a 表示除了查看之外,还能增加内容,但是只能echo追加内容(echo >>),不能直接vim进行编辑!

chattr -i或chattr -a 表示删除这个参数权限
lasttr表述查看设置的chattr权限


上面的chattr是针对文件设定的权限,如果是对目录(比如test目录,如下)设定的话,是一样的!
即:
chattr +i test 那么只能cd切换到test目录下,对于test目录下的文件除了查看权限,其他的都不能操作
chattr +a test 那么只能cd切换到test目录下,对于test目录下的文件除了查看权限,也只能echo追加内容,其他的也都干不了
但是记住一点,删除权限的话,在chattr -ai -R 要加上一个-R递归参数,表示连同目录下的文件权限都删除了!!!

《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《

 

(3)facl权限,setfacl表示设置权限,getfacl表示查看权限
固定命令格式如下:
“setfacl -m u:用户名:字符权限 文件名 ” (这是针对文件来说)
"setfacl -R -m u:用户:权限 目录名" (这是针对目录来说)

-m表示设置权限
-b 表述删除权限

setfacl -b 文件名 删除文件的facl权限
setfacl -R -b 目录名 删除目录的facl权限

 

getfacl 文件名或者目录名 表述查看文件或目录的facl权限

 

《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《

(4)特殊权限: 【http://alan-hjkl.iteye.com/blog/1526858】
1)suid权限:让普通用户拥有可以执行“只有root权限才能执行”的特殊权限。这个一般针对命令文件而言,比如passwd,一般用不到 --------设置的时候,在文件当前数字权限前面加4
2)sgid权限:设置之后,可以让普通用户拥有和这个文件所属组同样的权限 --------设置的时候,在文件当前数字权限前面加2
3)t权限:特别注意,t权限只能针对目录而言,对文件来说无效!之后,只有root和文件所有者才能有权限,其他用户都没操作权限。(除非将文件的其他所有组部分设置7,比如设置777权限) --------设置的时候,在文件当前数字权限前面加1





针对sgid权限的例子:
[root@localhost src]#cd /usr/local/src
[root@localhost src]# touch aa
[root@localhost src]# ll
总用量 0
-rw-rw-r--. 1 wutao wutao 0 8月 28 05:21 aa 【注意,设置sgid权限,要保证文件的所属组有操作权限】
[root@localhost src]# chown wutao.wutao aa
[root@localhost src]# ll
总用量 0
-rw-r--r--. 1 wutao wutao 0 8月 28 05:15 aa
[root@localhost src]# su - wangshibo
[wangshibo@localhost ~]$ cd /usr/local/src/
[wangshibo@localhost src]$ ls
aa
[wangshibo@localhost src]$ echo 123 > aa 由于a文件是wutao帐号下的文件,wangshibo用户没有操作权限
-bash: aa: 权限不够
[wangshibo@localhost src]$

 

现在给a文件设置sgid权限,那么wangshibo用户只要在wutao组内,就能对a文件有操作权限

****************************************************************************************************************************************************************
小知识点:
将一个用户拉到一个组内的两种方法:
“gpasswd -a 用户名 组名”
“usermod -G 组名 用户名”

将一个用户从组内删除
“gpasswd -d 用户名 组名 ”
****************************************************************************************************************************************************************


[root@localhost src]# chmod 2664 aa 【设置sgid权限】
[root@localhost src]# ll
总用量 0
-rw-rwSr--. 1 wutao wutao 0 8月 28 05:21 aa
[root@localhost src]# gpasswd -a wangshibo wutao 【将wangshibo用户拉到wutao组内】
Adding user wangshibo to group wutao
[root@localhost src]# id wangshibo
uid=501(wangshibo) gid=501(wangshibo) 组=501(wangshibo),500(wutao)

[root@localhost src]# su - wangshibo
[wangshibo@localhost ~]$ cd /usr/local/src/
[wangshibo@localhost src]$ echo 123 > aa 这样,wangshibo用户就能草组aa文件了
[wangshibo@localhost src]$

 

 

针对t权限的例子:
注意:t权限只对目录设置有效!
/tmp目录是linux下的一个临时目录,一般会设置777权限,为了方面其他用户都能在这个目录下操作,其实就是一个共用目录,大家都可以用!
但有时有些目录在tmp下存放自己的比较重要的文件,不想让其他用户操作,安全起见,会给tmp目录设置t权限!


[root@localhost ~]# ll -d /tmp
drwxrwxrwx. 20 root root 4096 8月 28 05:32 /tmp 【tmp临时目录是777权限】
[root@localhost ~]# su - wutao
[wutao@localhost ~]$ cd /tmp/
[wutao@localhost tmp]$ vim sss
[wutao@localhost tmp]$ ll sss
-rw-rw-r--. 1 wutao wutao 7 8月 28 05:33 sss 【这个文件所有者是wutao】
[wutao@localhost tmp]$ logout
[root@localhost ~]# su - wangshibo
[wangshibo@localhost ~]$ ll /tmp/sss 【其他用户对tmp临时目录下非自己所创建的文件也开可以操作】
-rw-rw-r--. 1 wutao wutao 7 8月 28 05:33 /tmp/sss
[wangshibo@localhost ~]$ echo 123123 > /tmp/s


现在为了安全起见,在tmp临时目录下创建的文件,除了自己和root外,其他用户都不能操作。也就是非共用了!!
那么这个时候就要给tmp设置t权限了!
[root@localhost ~]# ll -d /tmp
drwxrwxrwx. 20 root root 4096 8月 28 05:33 /tmp
[root@localhost ~]# chmod 1777 /tmp 【设置t权限】
[root@localhost ~]# ll -d /tmp
drwxrwxrwt. 20 root root 4096 8月 28 05:33 /tmp
[root@localhost ~]# su - wangshibo
[wangshibo@localhost ~]$ ll -d /tmp
drwxrwxrwt. 20 root root 4096 8月 28 05:37 /tmp
[wangshibo@localhost ~]$ ll /tmp/sss
-rw-rw-r--. 1 wutao wutao 4 8月 28 05:36 /tmp/sss
[wangshibo@localhost ~]$ echo 555 > /tmp/sss
-bash: /tmp/sss: 权限不够
[wangshibo@localhost ~]$

【这个时候,wangshibo用户就不能操作sss文件了。如果要想再拥有操作权限,可以把wangshibo用户加到wutao组内,因为sss文件所在组有w写权限】

 

 

《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《


一般情况下,切换到root帐号下,需要知道root密码,su命令切换

但是使用sudo命令,不需要知道root密码,只需要知道自己的密码即可!但是前天是要把该用户加入到/etc/sudoers文件内,即加入到sudo的文件内!


sudo权限: 是为了让普通用户切换到root用户下(这种方式不许要知道root密码)
sudo所在文件:/etc/sudoers
但是也可以使用visudo命令进行编辑,但是只有在root用户下才可以!
其他用户下,就只能编辑/etc/sudoers文件了

在root用户下,使用visudo命令编辑:
root ALL=(ALL) ALL 在这下面添加用户

比如:
wutao ALL=(ALL) ALL 这说明给wutao用户设置了sudo权限,可以sudo su - 切换到root帐号下,也可以sudo 加其他命令操作

wutao ALL=(ALL) NOPASSWD: AL 这表示切换时不许要输入自己的密码


比如给wutao用户设置了sudo权限,在上面已经添加了,并无密码

[wutao@localhost ~]$ sudo su -
[root@localhost ~]#


****************************************************************************************************************************************************************
su和sudo切换命令的时候,注意有个-
加-,表示不仅切换到用户下,连同用户的系统环境变量也切换进来了 【切换前后执行env看下环境变量】
不加-,表示仅仅切换到用户状态下,用户的系统环境变量没有切换进来

su root 仅仅切换到root用户状态下,root的系统环境变量没有切换过来 【比如说有些只能在root下操作的命令,不加-虽然切换到root下了,但是还不能操作】
su - root 不仅切换到root下了,root的系统环境变量也切换过来了
****************************************************************************************************************************************************************


sudo权限设置的时候,也可以根据组进行设置
比如设置如下,那么表示在wheel组内的所有用户都有sudo权限
%wheel ALL=(ALL) NOPASSWD: ALL


[root@localhost ~]# gpasswd -a wangshibo wheel 把wangshibo加入到wheel组内

[root@localhost ~]# su - wangshibo
[wangshibo@localhost ~]$ sudo su -
[root@localhost ~]#


可参考本人在evernote上的一篇相关笔记:
https://www.evernote.com/shard/s311/sh/b692f3c6-cbe7-44c7-9bca-eee2da049907/4bdcb0311f9d9740ecb3b32afde80637

linux系统下的权限知识梳理