Linux权限管理
[root@tenor ~]# ll -a-rw-r--r-- 1 root root 0 Feb 8 17:11 1.txt
| - | 文件类型 | 普通文件 |
|---|---|---|
| rw- | 属主拥有的权限 | 读写权限 |
| r— | 属组拥有的权限 | 只读权限 |
| r— | other 拥有的权限 | 只读权限 |
| 1 | 链接引用数 | 1 |
| root | 文件属主 | root |
| root | 文件属组 | root |
| 0 | 文件大小 | 0 |
| Feb 8 17:11 | 创建文件日期 | 2.8 17:11 |
| 1.txt | 文件名称 | 1.txt |
- 文件的权限主要针对三类对象进行定义:
| owner | 属主 | u |
|---|---|---|
| group | 属组 | g |
| other | 其他 | o |
- 每个文件针对每类访问者都定义了三种权限
| r | readable | 可读 |
|---|---|---|
| w | writeable | 可写 |
| x | excutable | 可执行 |
文件类型为f(文件):
| r | 可读 | 可以使用查看工具获取其内容 |
|---|---|---|
| w | 可写 | 可以修改其内容 |
| x | 可执行 | 可以把此文件提交给内核启动为一个进程 |
文件类型为d(目录):
| r | 可读 | 可以使用ls相关命令查看目录中的文件列表 |
|---|---|---|
| w | 可写 | 可以在目录中创建文件和删除文件等操作 |
| x | 可执行 | 可以使用ll相关命令查看目录并可以cd到该目录中 |
注意:
- 一个目录要同时具有读权限和执行权限才可以打开,而一个目录要有写权限才允许在其中创建其它文件
ls命令
**
| -a | 显示除了 ‘.’(当前目录),’..’ 上一级目录之外的所有包含隐藏文件 |
|---|---|
| -dl | 显示所在目录的完整属性 [root@tenor ~]# ls -dl dr-xr-x—-. 7 root root 4096 Feb 8 18:41 . |
| -dl +[目录名] | 查看某一个目录的完整属性,而不是显示目录里面的文件属性 [root@tenor ~]# ls -dl home drwxr-xr-x 2 root root 4096 Feb 8 18:41 home |
| -AsSh | 显示所有文件的大小 [root@tenor ~]# ls -AsSh total 48K 4.0K .cache 4.0K .ssh 4.0K .tcshrc 0 1.txt 4.0K .config 4.0K .bash_history 4.0K .cshrc 0 .viminfo 4.0K home 4.0K .bash_profile 4.0K .pydistutils.cfg 4.0K .pip 4.0K .bashrc 4.0K .bash_logout |
eg:useradd创建的用户ccy的权限是other,具有x权限,可以执行cd、ls 等操作,进入普通文件
将ccy用户添加到附加组root中,ccy用户可以进入到/root 根目录下
[root@tenor ~]# su ccy
[ccy@tenor root]$ cd /root
bash: cd: /root: Permission denied
[ccy@tenor root]$ cd /home
[ccy@tenor home]$ cd
[root@tenor ~]# usermod -a -G root ccy
[root@tenor ~]# su ccy
[ccy@tenor root]$ cd /root
chmod
设置文件权限
[root@localhost ~]# chmod --help
Usage: chmod [OPTION]... MODE[,MODE]... FILE...
or: chmod [OPTION]... OCTAL-MODE FILE...
or: chmod [OPTION]... --reference=RFILE FILE...
Change the mode of each FILE to MODE.
With --reference, change the mode of each FILE to that of RFILE.# 以参考文件的权限来定义该文件
Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'
常用选项:
| -R | 递归修改 对当前目录下的所有档案与子目录进行相同权限变更(即以递回的方式逐个变更) |
|---|---|
| -c | 若该文档权限确实以及更改,才显示其更改动作 |
| -v | 显示权限变更的详细信息 |
MODE:
u=[rwx] 设置属主权限
g=[rwx] 设置属组权限
o=[rwx] 设置其他权限
a=[ ] 表示以上三者都是
| + | 增加权限 | |
|---|---|---|
| - | 取消权限 | |
| = | 唯一设定权限 | |
| r | 可读取 | 数字表示法:r =4 w=2 x=1 chmod也可以用数字来表示权限如 chmod 777 file 语法为:chmod abc file 其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。 |
| w | 可写入 | |
| x | 可执行 | |
| X | 表示只有该文档是子目录或者该文档以及被设定过为可执行 |
范例 :将档案 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
将档案 file1.txt 设为所有人皆可读取 :
chmod a+r file1.txt
将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod ug+w,o-w file1.txt file2.txt
将 ex1.py 设定为只有该档案拥有者可以执行 :
chmod u+x ex1.py
将目前目录下的所有档案与子目录皆设为任何人可读取 :
chmod -R a+r *
显示详细信息
[root@tenor ~]# chmod ug+w,o+X+x 2.txt -v
mode of ‘2.txt’ retained as 0665 (rw-rw-r-x)
chown
改变文件属主和属组
[root@localhost ~]# chown --help
Usage: chown [OPTION]... [OWNER][:[GROUP]] FILE...
or: chown [OPTION]... --reference=RFILE FILE...
[OWNER] 指定属主
[GROUP] 指定属组
ps:
- 利用 chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;
- 文件是以空格分开的要改变权限的文件列表,支持通配符。
- 在更改文件的所有者或者所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变为其他的拥有者。其操作权限一般为管理员。
| -c | 显示更改部分的信息 |
|---|---|
| -f | 忽略错误信息 |
| -v | 显示详细的处理信息 |
| -R | 处理指定目录及其子目录下的所有文件 |
| -h | 影响符号链接而不是任何引用的文件(使用-仅适用于可以更改符号所有权的系统 链接) |
| —deference | 作用于符号链接的指向,而不是链接文件本身 |
[root@tenor ~]# chown ccy:mxh 1.txt -c
changed ownership of ‘1.txt’ from ccy:mxh2 to ccy:mxh
chgrp
修改属组
| -c | 显示更改部分的信息 |
|---|---|
| -v | 显示详细的处理信息 |
| -f | 忽略错误信息 |
[root@tenor ~]# chgrp mxh 1.txt -v
changed group of ‘1.txt’ from mxh2 to mxh
umask
查看遮掩码
[root@tenor ~]# umask
0022
umask: usage: umask [-p] [-S] [mode]
假设umask为022,则对于一个文件夹的话,它的默认属性为 777-022=755,这也就是我们平时建立文件夹的权限。而对于一般的文件的话,则是用 666-022=644.
umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限
umask = 022 时,新建的目录 权限是755,文件的权限是 644
umask = 077 时,新建的目录 权限是700,文件的权限时 600
文件或目录的遮掩码默认:
file=666 -umask(文件通常预设没有x权限)
dir:777 -umask
设定:umask #
umask * #可以定义默认创建文件或目录时的默认权限
[root@tenor lh]# umask
0022
[root@tenor lh]# umask 777
[root@tenor lh]# umask
0777
[root@tenor lh]# cat /etc/bashrc | grep "umask"
# By default, we want umask to get set. This sets it for non-login shell.
umask 002
umask 022
chattr
更改文件属性
+设置权限 - 取消取消权限
| 参数 | 说明 |
|---|---|
| +a filename | 只允许以追加方式读写文件 |
| +c filename | 允许整个文件能被内核自动压缩、解压 |
| +d filename | 在进行文件系统备份的时候,dump程序将忽略这个文件 |
| +i filename | 设置成不可变文件,不能被删除、修改、重命名或者链接 |
| +s filename | 允许一个文件被安全删除 |
| +S filename | 一旦应用程序对这个文件执行了写操作,系统立刻将修改的结果写到磁盘 |
| +u filename | 若文件被删除,系统会允许用户在以后恢复这个被删除的文件 |
lsattr
显示特殊的属性
[root@lhuan ~]# lsattr
-------------e-- ./bt-uninstall.sh
-------------e-- ./1.sh
-------------e-- ./lars
-------------e-- ./install.sh
-------------e-- ./1.txt
-------------e-- ./nginx_09.tar
-------------e-- ./log.txt
-------------e-- ./date.sh
-------------e-- ./3.sh
-------------e-- ./2.sh
[root@lhuan ~]# ls
1.sh 1.txt 2.sh 3.sh bt-uninstall.sh date.sh install.sh lars log.txt nginx_09.tar
##增加特殊权限
[root@lhuan ~]# chattr +i 1.sh
##查看
[root@lhuan ~]# lsattr
-------------e-- ./bt-uninstall.sh
----i--------e-- ./1.sh
-------------e-- ./lars
-------------e-- ./install.sh
-------------e-- ./1.txt
-------------e-- ./nginx_09.tar
-------------e-- ./log.txt
-------------e-- ./date.sh
-------------e-- ./3.sh
-------------e-- ./2.sh
Linux特殊权限
文件的特殊权限:
- SUID
- SGID
- SBIT
SUID
借出程序所有者的权限 4 在umask的第一位进行设置
SUID权限作用:
其他用户没有权限修改/etc/passwd文件,但是root用户可以将w权限赋予给其他 用户去修改/etc/passwd命令
[root@tenor lh]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
属主的执行权限x权限位: s 有SUID权限
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
由上述可知 同一用户或者其他人都可以调用passwd命令
passwd命令需要修改/etc/shadow文件
[root@tenor lh]# ll /etc/shadow
---------- 1 root root 690 Feb 8 16:53 /etc/shadow
[root@tenor lh]# ll /etc/passwd
-rw-r--r-- 1 root root 1178 Feb 8 16:53 /etc/passwd
问题:
1. /etc/passwd文件仅仅root用户拥有w权限,其他用户没有
2. 其他用户虽然可以调用passwd命令,但是无法写入到/etc/passwd文件
现象:
其他用户可以调用passwd文件,但是无法写入到/etc/passwd文件中
NOTE :
- SUID权限指对二进制程序有效
- 执行者必须要有x权限
- 仅在本程序中拥有改变权限
- 属主拥有sx权限,即可将自己的权限(r,w)借给其他用户使用,但前提必须要拥有x权限
SGID
借出用户组的权限 2
NOTE:
- 对二进制程序和目录有效
- 执行者拥有x权限
- 执行过程中执行者暂时拥有用户组权限
作用:
这种权限特性可以在同一个用户组的多个用户拥有共同的目录,在创建目录的时候该用户组的所有用户具有相同的权限。
一个属组中的用户在拥有SGID权限的目录下创建文件,属组都是该目录的所属组
[root@tenor ~]# useradd lars
[root@tenor ~]# useradd mj
[root@tenor ~]# ll /home/
total 8
drwx------ 2 lars lars 4096 Feb 10 19:11 lars
drwx------ 2 mj mj 4096 Feb 10 19:12 mj
[root@tenor ~]# chmod 2770 /home/mj 借出mj用户组的权限
[root@tenor ~]# ll /home
total 8
drwx------ 2 lars lars 4096 Feb 10 19:11 lars
drwxrws--- 2 mj mj 4096 Feb 10 19:12 mj
[root@tenor ~]# usermod -aG mj lars 给mj添加到附加组lars
[root@tenor ~]# su lars
[lars@tenor root]$ cd /home/lars
[lars@tenor ~]$ touch 1.txt
[lars@tenor ~]$ ll
total 0
-rw-rw-r-- 1 lars lars 0 Feb 10 19:15 1.txt
[lars@tenor ~]$ cd /home/mj
[lars@tenor mj]$ touch 1.txt
[lars@tenor mj]$ ll
total 0
-rw-rw-r-- 1 lars mj 0 Feb 10 19:16 1.txt
Sticky
对目录有效 1
tmp有这个权限
[root@tenor lars]# ll -d /tmp/
drwxrwxrwt. 9 root root 4096 Feb 10 14:38 /tmp/
**
- 当前用户在此目录拥有r,w权限,即具有写入和读权限
- 用户在该目录中创建文件,只有自己和root可以删除该文件
- 用户默认不允许对其他用户的文件进行操作
ACL权限
ACL 访问控制列表
主要目的是再提供传统的owner group 的 r w x 权限更加细化了用户文件权限
ACL可以针对某一个使用者,某一个文件或目录来进行 r w x 权限规范,对于需要特殊权限的使用状态非常有帮助
传统情况下,user用户只拥有r权限,acl权限的设定让user用户具有w权限,所以可以针对某一个文件进行编辑操作。
setfacl
设定权限
[root@localhost ~]# setfacl --help
setfacl 2.2.51 -- set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
- 常用选项
| -m | 添加acl设定参数 |
|---|---|
| -x | 删除acl设定参数 从文件的ACL中删除命名组条目 |
| -b | 移除所有的ACL设定参数 |
| -R | 递归添加acl设定参数 |
| -d | 添加默认按错了设定参数 |
- 常用使用方式
| 删除用户acl权限设置 | setfacl -x u:[username]:[mode] g:[group]:[mode] filename |
|---|---|
| 删除组acl权限设置 | sefacl -x g:groupname file |
| 删除整个acl权限 | sefacl -b file |
- 实例1:针对用户的设定方式
设定规范:u:username:power
- 实例2:针对用户组的设定方式
设定规范:g:groupname:power
针对用户
1.设定lars对1.txt有rwx权限
setfacl -m u:lars:rwx 1.txt
2.设定lars对mxh目录下所有文件有rwx权限
setfacl -R -m u:lars:rwx mxh
3.去掉user对testdirectory的x权限??
[root@tenor ~]# setfacl -x u:lars mxh
不能只去掉一个权限
4.去掉所有acl权限
setfacl -b
[root@tenor ~]# setfacl -R -m u:lars:rwx mxh
[root@tenor ~]# getfacl mxh
# file: mxh
# owner: root
# group: root
user::rwx
user:lars:rwx
group::r-x
mask::rwx
other::r-x
[root@tenor ~]# setfacl -b mxh
[root@tenor ~]# getfacl mxh
# file: mxh
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
5.为testdirectory目录添加默认的acl权限,此目录下创建目录和文件,user都有rwx权限
setfacl -d -m u:user:rwx testdirectory/
针对用户组
1. 给1.txt文件添加hhhh组rw权限设定
[root@tenor ~]# setfacl -m g:hhhh:rw 1.txt
[root@tenor ~]# getfacl 1.txt
# file: 1.txt
# owner: lars
# group: mxh
user::-wx
user:lars:rwx
group::-wx
group:hhhh:rw-
mask::rwx
other::--x
getfacl
查看acl 权限设定
[root@tenor ~]# mkdir mxh
[root@tenor ~]# useradd lars
[root@tenor ~]# setfacl -m u:lars:rwx mxh
[root@tenor ~]# groupadd hhhh
[root@tenor ~]# setfacl -m g:hhhh:rwx mxh
[root@tenor ~]# getfacl mxh
# file: mxh
# owner: root
# group: root
user::rwx
user:lars:rwx #针对用户具有rwx权限
group::r-x
group:hhhh:rwx #针对group1zu具有rw权限
mask::rwx
other::r-x # 如果没有其他设定,默认属于other
