权限管理
权限中rwx的含义
字母 |
含义 |
二进制 |
八进制权限表示法 |
r– |
读取权限 |
100 |
4 |
-w- |
写入权限 |
010 |
2 |
–x |
执行权限 |
001 |
1 |
— |
没有权限 |
000 |
0 |
权限和属主属组的关系
替换命令tr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [root@localhost ~] 0420000000. 1 4oot 4oot 1635 Ma4 24 16:44 anaconda0ks.cfg 0420400400 1 4oot 4oot 52 Ap4 5 17:17 del_use4.t1t 0420400400 1 4oot 4oot 10 Ap4 9 14:22 test.t1t
[root@localhost ~] 600 [root@localhost ~] 600
[root@localhost ~] 0644 [root@localhost ~] 0644
[root@localhost ~] 644 [root@localhost ~] 644
|
ugo
权限位
属主权限位:u-user
属组权限位:g-group
其他用户权限位:o-other
授权命令chmod
授权方式
1 2 3 4 5
| [root@localhost ~] [root@localhost ~] -rwxr--r-- 1 root root 10 Apr 9 14:22 test.txt [root@localhost ~] 744
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| u:user用户权限 g:group用户组权限 o:other其他用户权限 a:all所有权限位
+:加上后面指定的权限 -:减去后面指定的权限 =:等于后面指定的权限
[root@localhost ~] [root@localhost ~] --wx---r-- 1 root root 10 Apr 9 14:22 test.txt [root@localhost ~] 304
[root@localhost ~] [root@localhost ~] -rwxrwxrwx 1 root root 10 Apr 9 14:22 test.txt
[root@localhost ~] [root@localhost ~]
|
权限对文件的影响
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| r:文件只能读取 w:任何编辑命令都可以写入内容,但是vim读取不出来,就会覆盖原文件内容 x:对于普通用户来说,还是什么都做不了,必须配合r权限才可以执行
rw:可读,可写,正常的使用vim编辑,但是不能执行 rx:可读,可执行,但是不能编辑 wx:可写,不可读,不可执行 rwx:可读,可写,可执行
./相对路径 . 文件名 sh 文件名 bash 文件名 source 文件名
|
权限对目录的影响
1 2 3 4 5 6 7 8 9 10
| r:能看见目录下的文件,但是看不见文件的详细属性 w:什么都做不了 x:什么都做不了
rx:才能查看目录下的文件 wx:读取不了目录里的文件,但是创建文件,创建目录,删除文件,删除目录,不能用*代替 rwx:可以做任何操作,可以创建,删除,移动,复制文件或目录
ps:目录在只有单权限的情况下,什么都做不了 只有rx权限,可以把文件向外复制,因为没有改变目录
|
修改文件属主属组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| chown
chown [options] 属主.属组 文件名 chown [options] 属主:属组 文件名
[root@localhost opt]
[root@localhost opt]
[root@localhost opt]
[root@localhost opt]
|
特殊权限
特殊权限介绍
1 2 3 4 5 6
| [root@localhost ~] -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd [root@localhost ~] -rwxr-sr-x. 1 root tty 19624 Oct 31 2018 /bin/write [root@localhost ~] drwxrwxrwt. 12 root root 4096 Apr 12 21:52 /tmp/
|
/etc/shadow文件,对于普通用户没有任何权限,不能读取,也不能写入内容 ,那么普通用户,为什么可以修改密码?
因为使用了passwd
这个命令
passwd
命令在属主权限位上,原本是x权限
,变成了s权限
s权限
在属主权限位,又叫做SetUID权限
,SUID
作用:普通用户在使用有SUID
权限的文件或命令时,会以该文件的属主身份去执行该命令
普通用户只可以修改自身的密码:系统做了判断,普通用户passwd
后不能家参数
特殊权限 SetUID
SetUID
特性
- 原本属主位上如果有x权限,则
SetUID
为 s
- 原本属主位上如果没有x权限,则
SetUID
为 S
- 授权方式
chmod u+s
文件名
chmod 4xxx
文件名
SetUID
权限的数字是4000
特殊权限 SetGID
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| [root@localhost ~] -rwxr-sr-x. 1 root tty 19624 Oct 31 2018 /bin/write
[root@db04 ~]
[root@db04 ~]
[root@db04 ~] drwxr-sr-x 2 root root 4096 6月 21 16:26 /tmp/test/
[root@db04 ~]
[root@db04 ~] -rw-r--r-- 1 root root 0 6月 21 16:30 root_file
[root@db04 ~]
[lamp@db04 ~]$ touch /tmp/test/lamp_file touch: cannot touch '/tmp/test/lamp_file': Permission denied
[root@db04 ~]
[root@db04 ~] drwxrwsrwx 2 root root 4096 6月 21 16:26 /tmp/test/
[root@db04 ~]
[lamp@db04 ~]$ touch /tmp/test/lamp_file
[lamp@db04 ~]$ ll /tmp/test/lamp_file -rw-rw-r-- 1 lamp root 0 Jun 21 16:34 /tmp/test/lamp_file
[root@db04 ~]
[root@db04 ~] drwxrwsrwx 2 oldboy oldboy 4096 6月 21 16:34 /tmp/test/
[root@db04 ~]
[lamp@db04 ~]$ touch /tmp/test/lamp_file2
[lamp@db04 ~]$ ll /tmp/test/lamp_file2 -rw-rw-r-- 1 lamp oldboy 0 Jun 21 16:35 /tmp/test/lamp_file2
|
SetGID
特性
- 原本属组位上如果有x权限,则
SetGID
为 s
- 原本属组位上如果没有x权限,则
SetGID
为 S
- 授权方式
chmod g+s
文件名
chmod 2xxx
文件名
SetGID
权限的数字是2000
主要应用场景:文件共享
1 2 3 4 5
| 练习sgid 创建三个用户,分别是zls,oldboy,yourname这些用户都属于oldboyedu组的成员。这些用户的密码都是123 1.要求以上用户和组可以在/home/oldboyedu目录里访问,创建,删除文件 2.其他用户一律不允许访问该目录 3.在该目录下新建的文件会自动属于oldboyedu组拥有
|
chattr概述
chattr只有root用户可以使用,用来修改文件系统的权限属性,建立凌驾于rwx基础权限之上的授权
chattr命令格式:# chattr [+-=][选项] 文件名或目录名
设置文件属性(权限),针对所有用户,包括 root
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| 选项:+增加权限 -减少权限 =等于某个权限 a:让文件或目录仅可追加内容 i:不得任意更改文件或目录
[root@roger ~] [root@roger ~] ---------------- file_a ---------------- file_i
[root@roger ~] [root@roger ~] [root@roger ~] -----a---------- file_a ----i----------- file_i
[root@roger ~] bash: file_a: Operation not permitted [root@roger ~] rm: cannot remove ‘file_a’: Operation not permitted
[root@roger ~]
[root@roger ~] bash: file_i: Permission denied [root@roger ~] bash: file_i: Permission denied [root@roger ~] rm: cannot remove ‘file_i’: Operation not permitted
[root@roger ~] [root@roger ~]
|
umask进程掩码
Q:什么是umask?
当我们登录系统之后,创建一个文件总是有一个默认权限,比如: 目录默认权限:755 文件默认权限:644 那么这个权限是怎么来的呢? 不瞒你说,这就是umask做的,umask设置了用户创建文件的默认权限。
umask是如何改变新文件的权限
系统默认umask为022,那么当我们创建一个目录时,正常情况下目录的权限应该是777,但是umask表示要减去的值,所以新目录文件的权限应该是777-022=755。至于文件的权限也依次类推:666-022=644
umask涉及到的配置文件
umask涉及到的相关文件/etc/bashrc /etc/profile ~/.bashrc ~/.bash_profile
注意:umask影响的范围
shell (vim,touch) –umask–> 新文件或目录权限
vsftpd –umask–> 新文件或目录权限
samba –umask–> 新文件或目录权限
useradd –umask–> 用户 HOME
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 1.假设umask值为:022(所有位为偶数) //文件的起始权限值 6 6 6 - 0 2 2 = 6 4 4 2.假设umask值为:045(其他用户组位为奇数) //计算出来的权限。由于umask的最后一位数字是5,所以,在其他用户组位再加1。 6 6 6 - 0 4 5 = 6 2 1 3.默认目录权限计算方法 7 7 7 - 0 2 2 = 7 5 5 umask 044 //umask所有位全为偶数时 示例:mkdir d044 //目录733 示例:touch f044 //文件622 umask 023 //umask值的部分或全部位为奇数时 示例:mkdir d023 //目录754 示例:touch f023 //文件644 umask 035 //umask值的所有位为奇数时 示例:mkdir d035 //目录742 示例:touch f035 //文件642
|
示例1: 在shell
进程中创建文件
1 2 3 4 5 6 7 8
| [root@zls ~] 0022 [root@zls ~] [root@zls ~] [root@zls ~] drwxr-xr-x 2 root root 6 Jan 24 09:02 dir0022/ -rw-r--r-- 1 root root 0 Jan 24 09:02 file0022
|
示例2: 修改shell umask
值(临时生效)
1 2 3 4 5 6
| [root@zls ~] [root@zls ~] [root@zls ~] [root@zls ~] drwxrwxrwx 2 root root 6 Jan 24 09:04 dir000 -rw-rw-rw- 1 root root 0 Jan 24 09:04 file000
|
示例3: 修改shell umask值(永久生效, 强烈不建议修改)
1 2 3 4 5 6 7 8 9
| [root@zls ~] if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi //立即在当前 shell 中生效 [root@zls ~]
|
示例4: 通过umask
决定新建用户HOME
目录的权限
1 2 3 4 5 6 7 8 9 10 11
| [root@zls ~] UMASK 077 [root@zls ~] [root@zls ~] drwx------. 4 dba dba 4096 3 月 11 19:50 /home/dba/ [root@zls ~] UMASK 000 [root@zls ~] [root@zls ~] drwxrwxrwx. 4 sa sa 4096 3 月 11 19:53 /home/sa/
|
示例 5:例如vsftpd进程/etc/vsftpd/vsftpd.conf
1 2 3 4
| [root@zls ~] [root@zls ~] anon_umask local_umask
|