Day03——Linux基础
权限、ACL、特殊权限
权限
数字权限 | 字母权限 | 作用 |
4 | r(read) | 读取权限(读文件内容、列出目录中的内容) |
2 | w(write) | 写入权限(更改文件内容,创建/修改目录中的任意文件 |
1 | x(execution) | 执行权限(执行命令,cd进入目录) |
mkdir test #创建测试目录
touch test/hello.txt #创建测试文件
ls -l test/hello.txt #查看文件的详细信息
-rw-r--r--. 1 root root 0 Mar 12 05:25 test/hello.txt
ls -ld test/ #查看目录的详细信息
drwxr-xr-x. 2 root root 23 mar 12 05:25 test/
l(long长格式显示详细信息),d(directory目录)
显示说明:
第一列:权限
第二列:文件(链接的个数)
第三列:文件/目录属于哪个用户(文件的所有者)
第四列:文件/目录属于哪个组(文件的所属组)
第五列:容量大小
第六列、第七列、第八列:文件最后修改的日期
最后一列:文件/目录名
其中第一列包含:10字符
第1个字符代表类型:-(文件),d(directory目录),l(link链接)
第2到第10个字符,三位一组,分三组(用户权限,组权限,其他人权限)
使用数字表示权限:r==4,w==2,x==1
示例:
rwx(7) r--(4) rw-(6) r-x(5) ---(0) --x(1)
rwxrwxrwx(777) rwxrw-rw-(766) rwxr--r--(744) rw-rw-r--(664)
测试:
touch hello.txt #创建测试文件
ls -l hello.txt #查看文件的详细信息
-rw-r--r--. root root 0 ... ...
提示:该文件所有者是root,所属组是root
默认权限:root用户可读可写,root组只读,其他人都是只读
chmod修改权限
命令格式:chmod u+-=,g+-=,o+-=,a+-= 文件/目录名
chmod 数字 文件/目录名
示例:
chmod u+x test.txt #给文件的用户额外加x权限(user用户)
chmod u-x test.txt #给文件的用户去除x权限(user用户)
chmod u=r-- test.txt #直接设置文件的用户权限为只读(user用户)
chmod g+w test.txt #给文件的组额外加w权限(group组)
chmod o+w test.txt #让其他人对该文件有可读权限(other其他人)
chmod a+x test.txt #修改文件权限,u+x,g+x,o+x,所有人都添加x权限(all所有人)
chmod 777 test.txt #设置文件权限为777,rwxrwxrwx
chmod 700 test.txt #设置文件权限为700,rwx------
chown(修改所有者和所属组)
示例:
chown user1 test.txt #修改test.txt文件的所有者,改成uesr1
chown :adm test.txt #修改test.txt文件的所属组,组改成adm
chown root:bin test.txt #修改test.txt文件的所有者和所属组,用户改成root,组改成bin
ACL权限
问题:
如果有一个test.txt文件,文件所有者是root,所属组是root。
有一个user1用户,user1用户不属于root组,想让user1对test.txt有rwx权限。
如何实现?
方案一:
设置文件的other权限,设置为rwx(但是,不仅仅是user1有了rwx,其他任何人都一样有了rwx权限)
方案二:
通过ACL(access control list访问控制列表)可以实现精准对某个用户单独设置权限
getfacl test.txt #查看文件的ACL信息
#file: test.txt 文件名 #owner: root 文件所有者 #group: bin 文件所属组 user::rwx 用户的权限 ... ...
setfacl -m u:user1:rwx test.txt #修改文件的ACL信息,-m(modify修改),user(用户)
特殊权限
权限 | 文件,特指程序文件 | 目录 |
suid(4) | 执行程序时获得该程序所有者的权限 | |
sgid(2) | 执行程序时获得该程序所属组的权限 | |
sticky(1) | 该目录下的文件,谁创建的文件谁删除与编辑,只能自己删除与编辑自己的文件 |
ls -l /bin/passwd
提示:passwd命令是计算机/bin目录下的一个程序文件
-rwsr-xr-x. 1 root root ... /bin/passwd
问题:linux系统用户的密码都保存在/etc/shadow文件,而该文件的权限为---
除了超级管理员不受权限影响外(超级管理员root是上帝,可以忽略所有权限),所有权限都是对普通用户而言的!
passwd命令是给用户改密码,那么我们修改的密码一定会被保存到/etc/shadow文件中!
思考:root去执行passwd命令,设置密码123,因为root不受权限限制,所以可以将密码123写入/etc/shadow! 假设有一个普通用户user1执行passwd命令,需要给自己修改密码,把密码改为456,最终是否能成功?
答案:普通用户也可以修改密码,成功将456写入/etc/shadow
普通用户user1,执行passwd命令时,获取了passwd命令所有者的权限,passwd文件所有者是root,所以在执行passwd这个命令的瞬间,user1获得了root的权限
chmod u+s test.txt
ls -l test.txt
-rwsrwxrwx. root root ....
chmod g+s test.txt
ls -l test.txt
-rwsrwsrwx. root root ....
ls -ld /tmp
lrwxrwxrwt. root root
例子:
假设user1在/tmp目录下创建了一个user1.txt,则只有自己和root能删除,其他人无法删除,假设user2也在/tmp目录下创建了一个user2.txt,则只有自己和root能删除,其他人无法删除。
[root@localhost ~]# mkdir test
[root@localhost ~]# ls -ld test
lrwxr-xr-x. root root ...
[root@localhost ~]# chmod o+t test
#给test目录添加一个sticky权限