第一章 权限位说明
Linux文件或目录的权限位由9个权限位来控制,每三位为一组。
Owner的读、写、执行
Group用户组(Group)的读、写、执行
Other其它用户的读、写、执行。
r(read)可读权限,对应数字4
w(write)可写权限,对应数字2
x(Execute)可执行权限,对应数字1
- 没有任何权限,对应数字0
#######################################################################################
第二章 实战案例
添加用户oldboy指定组
[root@Never-downtime ~]# groupadd incahome
[root@Never-downtime ~]# useradd oldboy -g incahome
[root@Never-downtime ~]# useradd oldgirl -g incahome
更改用户组
[root@Never-downtime ~]# usermod -g incahome oldboy
[root@Never-downtime ~]# usermod -g incahome oldgirl
添加其他用户
[root@Never-downtime ~]# useradd test
查看创建不同的用户信息
[root@Never-downtime ~]# id oldboy
uid=501(oldboy) gid=504(incahome) groups=504(incahome)
[root@Never-downtime ~]# id oldgirl
uid=504(oldgirl) gid=504(incahome) groups=504(incahome)
[root@Never-downtime ~]# id test
uid=503(test) gid=503(test) groups=503(test)
修改文件的权限示例
# chmod 755 test.sh
# chmod 111 test.sh
# chmod u=rx test.sh
# chmod ugo=755 test.s
修改文件的所有者和用户组
# chown oldboy.incahome test.sh
# chown root.root test.sh
# chown oldboy test.sh
# chown .incahome test.sh
oldboy用户无删除test.sh权限,即使有w属性,删除文件和自身属性无关,受上一级目录权限控制。文件名不是文件的属性,文件名在上一级目录的block里面。
test/oldboy用户无执行权限,即使有x权限,普通用户必须还需要有r的权限,文件至少要一个r权限配合
w或x。
第三章 Linux普通文件权限总结
可读r:
表示具有读取、浏览文件内容(block)的权限;
可写w:
(1)表示具有新增、修改文件内容的权限;
(2)如果没有r配合,那么vi编辑文件会提示无法编辑(但可强制编辑),echo可以重定向或追加;
删除文件:
删除文件(修改文件名)或创建文件的权限是受父目录(上一级目录)的权限控制,和文件本身权限无关;
可执行x:
(1)表示具有执行文件的权限。
(2)首先文件的本身要能够执行(命令或脚本)。脚本(一堆的命令的集合,放在了一个文件中)
(3)普通用户同时还需要具备r的权限才能执行。
(4)root用户只要有x的权限就能执行。
第四章 Linux目录权限测试
目录r权限测试 目录r的权限需要x的配合
[root@Never-downtime oldboy]# ls -dl /oldboy/
dr--r-xr-x 2 oldboy oldboy 4096 Mar 29 07:06 /oldboy/
[oldboy@Never-downtime oldboy]$ ll -d /oldboy/
dr--r-xr-x 2 oldboy incahome 4096 Mar 29 07:06 /oldboy/
[oldboy@Never-downtime oldboy]$ >>test.sh
-bash: test.sh: Permission denied
[oldboy@Never-downtime oldboy]$ rm -rf /oldboy/
rm: cannot remove `/oldboy/test.sh': Permission denied
目录w权限测试 目录w的权限也需要x的配合
[root@Never-downtime oldboy]# chmod u=w /oldboy/
[root@Never-downtime oldboy]# ls -ld /oldboy/
d-w-r-xr-x 2 oldboy incahome 4096 Mar 29 07:06 /oldboy/
[oldboy@Never-downtime oldboy]$ touch /oldboy/oldboy.txt
touch: cannot touch `/oldboy/oldboy.txt': Permission denied
目录x权限测试 目录x的权限需要有r的配合否则无意义
[root@Never-downtime oldboy]# chmod u=x /oldboy/
[root@Never-downtime oldboy]# ll -d /oldboy/
d--xr-xr-x 2 oldboy incahome 4096 Mar 29 07:06 /oldboy/
[oldboy@Never-downtime oldboy]$ ls
ls: cannot open directory .: Permission denied
[oldboy@Never-downtime oldboy]$ touch /oldboy/oldboy.txt
touch: cannot touch `/oldboy/oldboy.txt': Permission denied
第五章 linux目录权限总结
可读r
1. 可读r表示具有浏览目录(ls list)下面文件及子目录的权限,即可以执行ls dir如果没有x权限,则不能进到目录里,即无法执行cd dir
2. 如果没有x权限,ls列表是可以看到所有文件名,但是会提示无权访问目录下文件。
3. 如果ls -l列表,所有的属性会带有问号,也会提示无权访问目录下文件,但是可以看到所有文件名。
可写w
- 表示具有增加、删除或修改目录内文件名(一般指文件名)的权限,(需要x权限的配合)(Execute执行权限)
- 对文件而言,表示具有执行文件的权限。(普通用户同时还需要r的权限,root用户不用r也能执行,文件本身也要能执行才行,否则公鸡不能下蛋)。
- 对文件而言,表示具有新增、修改文件内容的权限(注意:删除和移动文件和文件本身属性无关,看上级目录)
可执行x
- 可执行x:表示具有进入目录的权限;例如可以执行cd dir。可以访问目录下的文件(属性信息)但是没有r则无法列表文件及目录,没有w无法新建和删除文件名。
- 对于目录来说x(可执行权限)是必须的,用它来访问目录下面的文件的inode信息。
- 表示无任何权限
1. 若对应位置权限位为字符“-”,仅与该文件与目录所在的上一层目录权限有关,与该文件本身属性无任何关系。
2. 对于文件来说:写权限是修改文件,而不是删除文件,因此写权限是与该文件的本身属性有关系的。
第六章 文件和目录权限的区别
第七章 chmod命令语法
第八章 权限临界点
文件默认权限:644 比较安全
目录默认权限:755 比较安全
默认权限是安全权限的临界点,工作中尽量给这个临界点,或者小于临界点,不要大于临界点权限。
为什么默认权限目录755,文件644而不是其他的值呢?
- 不管是操作还是网站站点目录,安全权限的临界点:
- 目录为755,文件644是相对安全的权限。
- 并且用户为root以及用户组root。
Linux系统默认权限的方针:允许浏览,查看,但是禁止创建和修改文件及文件内容以及执行(w,x)
第九章 默认权限分配umask
- 在Linux下文件的默认权限是由umask值决定的。
- umask是通过八进制的数值来定义用户创建文件或目录的默认权限。
- umask对应数值表示的是禁止的权限。具体的细节,文件和目录略有不同。
- umask Linux默认权限 最大权限减去umask====Linux默认权限
- 如果用户的UID大于199 并且这个用户的所有者与所有属于的组 名字相同则umask的值 002,否则 umask的值 022。
- 创建文件默认最大权限为666(-rw-rw-rw),默认创建的文件一般都没有可执行权限x位。对于文件来说,umask的设置是在假定文件拥有八进制666的权限上进行的,文件的权限就是666减去umask。
- 创建目录默认最大权限777(-rwxrwxrwx),默认创建的目录属主是有x权限,允许用户进入。对于目录来说,umask的设置是在假定文件拥有八进制777权限上进行,目录八进制权限777减去umask。
umask值的计算
文件umask=022文件最大权限值666减去umask的值022 666-022=644 就是文件默认的权限。
如果umask=025文件最大权限666减去umask值025 666-025=641 如果umask值是奇数 结果需要加1。
目录umask=025 目录最大权限777减去umask值025 777-025=752
[root@Never-downtime oldboy]# umask 052
[root@Never-downtime oldboy]# mkdir 3_052
[root@Never-downtime oldboy]# ll
drwx-w-r-x 2 root root 4096 Mar 30 15:34 3_052
[root@Never-downtime oldboy]# touch 1.txt_052
[root@Never-downtime oldboy]# ll
total 16
-rw--w-r-- 1 root root 0 Mar 30 15:35 1.txt_052
第十章 linux系统特殊权限
suid
setuid通过S标识,如果用户位对应的x位上有x,则为s标识,对应的数字是4,用户对应的权限位(用户对应的3位上的x位如果有s就表示suid),文件显示白字红底(passwd命令)
[root@Never-downtime oldboy]# chmod 4000 1.txt_052
[root@Never-downtime oldboy]# ll
total 16
drwxr-xr-x 2 root root 4096 Mar 30 15:30 1_022
---S------ 1 root root 0 Mar 30 15:35 1.txt_052
[root@Never-downtime oldboy]# chmod 4111 1.txt_052
[root@Never-downtime oldboy]# ll
total 16
drwxr-xr-x 2 root root 4096 Mar 30 15:30 1_022
---s--x--x 1 root root 0 Mar 30 15:35 1.txt_052
###大S占用的是x的权限位置 当文件/目录没有x权限时 就显示S 如果有x权限时就显示小s
[root@Never-downtime ~]# ll $(which passwd)
-rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
[root@Never-downtime ~]# chmod u-s /usr/bin/passwd
[root@Never-downtime ~]# ll $(which passwd)
-rwxr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
[oldboy@Never-downtime ~]$ passwd
Changing password for user oldboy.
Changing password for oldboy.
(current) UNIX password:
New password:
BAD PASSWORD: it is too simplistic/systematic
New password:
Retype new password:
Sorry, passwords do not match.
New password:
Retype new password:
passwd: Authentication token manipulation error
[root@Never-downtime ~]# chmod u+s $(which passwd)
[root@Never-downtime ~]# ll $(which passwd)
-rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
[oldboy@Never-downtime ~]$ passwd
Changing password for user oldboy.
Changing password for oldboy.
(current) UNIX password:
New password:
Retype new password:
Sorry, passwords do not match.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@Never-downtime ~]# echo 123456 |passwd --stdin oldboy
[root@Never-downtime ~]# echo 123456 |passwd --stdin oldboy
Changing password for user oldboy.
passwd: all authentication tokens updated successfully.
[root@Never-downtime ~]# find / -name "rm"
/usr/share/locale/rm
/bin/rm
[root@Never-downtime ~]# chmod u+s /bin/rm
[root@Never-downtime ~]# ll /bin/rm
-rwsr-xr-x. 1 root root 57440 May 11 2016 /bin/rm
[oldboy@Never-downtime ~]$ rm -rf /var/log/messages
[root@Never-downtime ~]# chmod u-s /bin/rm
##如果passwd命令不添加s权限,则除root用户外无法更改密码,加s权限就相当于使用root的权限,相当于皇帝。
suid总结
- suid是针对命令和二进制程序的
- 用户或属主对应的前三位权限的x位上如果有s就表示suid权限。
- 当x位上没有小写x执行权限的时候,suid的权限显示的就是大S。
- suid作用让普通用户可以以root(或其他)的用户角色运行只有root(或其他)账号才能运行的程序和命令,或程序命令对应本来没有权限操作的文件等。
- suid为某一个命令设置特殊权限(使用者为所有人)
sgid
setgid通过S标识,如果用户组位对应的x位上有x,则为s标识,对应的数字是2,用户组对应的权限位(用户对应的3位上的x位如果有s就表示sgid)文件显示黑字黄底(locate)
[oldboy@Never-downtime tmp]$ locate oldboy
/oldboy
/etc/oldboy.txt
/home/oldboy
/home/oldboy/.bash_history
/home/oldboy/.bash_logout
/home/oldboy/.bash_profile
/home/oldboy/.bashrc
/oldboy/test.sh
/var/spool/mail/oldboy
[root@Never-downtime ~]# ls -l /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 1342195 Mar 30 08:48 /var/lib/mlocate/mlocate.db
sgid总结
1. 与suid不同的是,sgid既可以针对文件还可以针对目录设置。
2. sgid是针对用户组权位的。
3. sgid仅对二进制命令程序有效。
4. sgid二进制命令或程序需要有可执行权限x
以上是针对文件的,对于目录(继承目录所属的组):sgid的功能如下:
- Linux里默认情况所有用户创建文件,默认用户和组都是自身。
- sgid可以让用户再此目录下创建的文件和目录,具有和此目录相同的用户组设置。
- setgid位主要在目录中,当为某个目录设置了setgid位以后,在该目录中新创建的文件具有该目录的所属组权限,而不失创建该文件的用户的默认所有者。这样,使得在多个用户之间共享一个目录中的文件变的简单,提示:用八进制数2000表示setgid权限位。
sticky粘滞位
sticky(粘滞位)通过T标识,如果用户组对应的x位上有x,则为t标识,对应数字是1,其他用户位对应的权限位(用户对应的3位上的x位如果有t后T就表示sticky),文件显示黑字绿底。(/tmp)
[root@Never-downtime ~]# ls -ld /tmp/
drwxrwxrwt. 7 root root 4096 Mar 30 14:09 /tmp/
[oldboy@Never-downtime tmp]$ rm -f ett_soft.txt
rm: cannot remove `ett_soft.txt': Operation not permitted
[root@Never-downtime ~]# chmod o-t /tmp/
[root@Never-downtime ~]# ls -ld /tmp/
drwxrwxrwx. 7 root root 4096 Mar 30 18:42 /tmp/
[oldboy@Never-downtime tmp]$ rm -rf ett_soft.txt
[root@Never-downtime ~]# chmod o+t /tmp/
[root@Never-downtime ~]# ll -d /tmp/
drwxrwxrwt. 7 root root 4096 Mar 30 18:42 /tmp/
第十一章 特殊权限对应的数字小结
- suid 4000权限字符s(S),用户位上的u位上设置授权方法chmod 4755 /bin/rm 或chmod u+s /bin/rm
- sgid 2000权限字符s(S),用户组位的g位上设置授权方法 chmod 2755 /oldboy.txt 或chmod g+s test
- 粘滞位1000 权限字符t(T),其他用户位的x位上设置授权方法 chmod 1777 /tmp 或 chmod o+t /tmp
- 如果对应x则字符权限表现为小写,否则表现为大写。
- tmp经典的粘滞位目录案例,特点,谁都有写权限,因此安全成问题,尝尝是木马第一首跳板地点。Linux高级优化场景,tmp目录常常是木马第一首跳板地点。
第十二章 实战案例
如何查找系统中设置了suid、sgid和粘滞位的文件或目录?
ls -l $(find / -perm 4755)