Linux权限管理
文章目录
权限简介
文件的权限主要针对三类对象进行定义:
owner:属主,u
group:属组,g
other :其它,o
每个文件针对每个访问者都定义了三种权限:
权限 | 对应的操作对象 | 权限说明 |
---|---|---|
r | 文件 | 可读,可以使用类似cat等命令查看文件内容 |
w | 文件 | 可写,可以编辑或删除此文件 |
x | 文件 | 可执行,eXacutable,可以在命令提示符下当作命令提交给内核运行 |
r | 目录 | 可以对此目录执行ls以列出内部的所有文件 |
w | 目录 | 可以在此目录中创建文件,也可删除此目录中的文件 |
x | 目录 | 可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息 |
权限的二进制与十进制转换:
权限 | 二进制 | 十进制 |
---|---|---|
— | 000 | 0 |
–x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r– | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
权限管理命令
- 修改权限的命令chmod
chmod MODE file,… - 修改某类用户或某些类用户权限:
u:用户,g:组,o:其他,a:所有//chmod +|-|= MODE file,…(=会覆盖原来权限)
[doom@hostnamectl abc]$ ll
总用量 0
-rw-rw-r--. 1 doom doom 0 9月 21 12:16 a
-rw-rw-r--. 1 doom doom 0 9月 21 12:16 b
-rw-rw-r--. 1 doom doom 0 9月 21 12:16 c
-rw-rw-r--. 1 doom doom 0 9月 21 12:16 d
[doom@hostnamectl abc]$ chmod u+x a
[doom@hostnamectl abc]$ chmod g+x b
[doom@hostnamectl abc]$ chmod o+x c
[doom@hostnamectl abc]$ chmod a+x d
[doom@hostnamectl abc]$ ll
总用量 0
-rwxrw-r--. 1 doom doom 0 9月 21 12:16 a
-rw-rwxr--. 1 doom doom 0 9月 21 12:16 b
-rw-rw-r-x. 1 doom doom 0 9月 21 12:16 c
-rwxrwxr-x. 1 doom doom 0 9月 21 12:16 d
[doom@hostnamectl taday]$ ll
总用量 0
-rw-rw-r--. 1 doom doom 0 9月 21 12:11 1
-rw-rw-r--. 1 doom doom 0 9月 21 12:11 2
-rw-rw-r--. 1 doom doom 0 9月 21 12:11 3
[doom@hostnamectl taday]$ chmod 700 1
[doom@hostnamectl taday]$ chmod 770 2
[doom@hostnamectl taday]$ chmod 777 3
[doom@hostnamectl taday]$ ll
总用量 0
-rwx------. 1 doom doom 0 9月 21 12:11 1
-rwxrwx---. 1 doom doom 0 9月 21 12:11 2
-rwxrwxrwx. 1 doom doom 0 9月 21 12:11 3
- -R:递归修改权限
[doom@hostnamectl ~]$ ll
drwxrwxr-x. 2 doom doom 42 9月 21 12:16 abc
[doom@hostnamectl ~]$ cd abc/
[doom@hostnamectl abc]$ ll
总用量 0
-rwxrw-r--. 1 doom doom 0 9月 21 12:16 a
-rw-rwxr--. 1 doom doom 0 9月 21 12:16 b
-rw-rw-r-x. 1 doom doom 0 9月 21 12:16 c
-rwxrwxr-x. 1 doom doom 0 9月 21 12:16 d
[doom@hostnamectl abc]$ chmod -R 777 /home/doom/abc
[doom@hostnamectl abc]$ ll /home/doom/
总用量 0
drwxrwxrwx. 2 doom doom 42 9月 21 12:16 abc
[doom@hostnamectl abc]$ ll
总用量 0
-rwxrwxrwx. 1 doom doom 0 9月 21 12:16 a
-rwxrwxrwx. 1 doom doom 0 9月 21 12:16 b
-rwxrwxrwx. 1 doom doom 0 9月 21 12:16 c
-rwxrwxrwx. 1 doom doom 0 9月 21 12:16 d
修改文件属主和属组的命令chown
chown命令只有管理员可以使用
- chown USERNAME file,…
-R 修改目录及其内部文件的属主
chown USERNAME:GROUPNAME file,… //用 . 或者 : 都可以
chown USERNAME.GROUPNAME file,…
[root@hostnamectl ~]# ll /home/doom/
总用量 0
drwxrwxrwx. 2 doom doom 42 9月 21 12:16 abc
[root@hostnamectl ~]# chown guilai:guilai /home/doom/abc
[root@hostnamectl ~]# ll /home/doom/
总用量 0
drwxrwxrwx. 2 guilai guilai 42 9月 21 12:16 abc
[root@hostnamectl ~]# ll /home/doom/abc/
总用量 0
-rwxrwxrwx. 1 doom doom 0 9月 21 12:16 a
-rwxrwxrwx. 1 doom doom 0 9月 21 12:16 b
-rwxrwxrwx. 1 doom doom 0 9月 21 12:16 c
-rwxrwxrwx. 1 doom doom 0 9月 21 12:16 d
只修改属组
[root@hostnamectl ~]# chown -R .Devil /home/doom/abc
[root@hostnamectl ~]# ll /home/doom/abc/
总用量 0
-rwxrwxrwx. 1 guilai Devil 0 9月 21 12:16 a
-rwxrwxrwx. 1 guilai Devil 0 9月 21 12:16 b
-rwxrwxrwx. 1 guilai Devil 0 9月 21 12:16 c
-rwxrwxrwx. 1 guilai Devil 0 9月 21 12:16 d
- -R修改目录及其内部文件的属主
[root@hostnamectl ~]# chown -R guilai.guilai /home/doom/abc
[root@hostnamectl ~]# ll /home/doom/abc/
总用量 0
-rwxrwxrwx. 1 guilai guilai 0 9月 21 12:16 a
-rwxrwxrwx. 1 guilai guilai 0 9月 21 12:16 b
-rwxrwxrwx. 1 guilai guilai 0 9月 21 12:16 c
-rwxrwxrwx. 1 guilai guilai 0 9月 21 12:16 d
修改文件的属组命令chgrp
- -R修改目录及其内部文件的属主
(这个命令只能修改属组,所以一般用上面一个命令)
[root@hostnamectl ~]# chgrp -R doom /home/doom/abc
[root@hostnamectl ~]# ll /home/doom/abc/
总用量 0
-rwxrwxrwx. 1 guilai doom 0 9月 21 12:16 a
-rwxrwxrwx. 1 guilai doom 0 9月 21 12:16 b
-rwxrwxrwx. 1 guilai doom 0 9月 21 12:16 c
-rwxrwxrwx. 1 guilai doom 0 9月 21 12:16 d
遮罩码
为什么文件创建以后默认权限是644?
为什么目录创建以后默认权限是755?
这是由遮罩码umask来控制的。
从名字就能看出来,遮罩码umask是用来隐藏一些权限的。举例:如果你不想让人家认出你,你会怎么办?
文件最终的权限为:
666-umask
目录最终的权限为:
777-umask
文件默认是不能具有执行权限的,如果算得的结果有执行权限则将其权限整体加1
[root@hostnamectl a]# umask
0022
[root@hostnamectl a]# touch a
[root@hostnamectl a]# ll
总用量 0
-rw-r--r--. 1 root root 0 9月 21 13:13 a
[root@hostnamectl a]# umask 033
[root@hostnamectl a]# touch b
[root@hostnamectl a]# ll
总用量 0
-rw-r--r--. 1 root root 0 9月 21 13:13 a
-rw-r--r--. 1 root root 0 9月 21 13:13 b
[root@hostnamectl a]# umask
0033
[root@hostnamectl a]# umask 011
[root@hostnamectl a]# touch c
[root@hostnamectl a]# ll
总用量 0
-rw-r--r--. 1 root root 0 9月 21 13:13 a
-rw-r--r--. 1 root root 0 9月 21 13:13 b
-rw-rw-rw-. 1 root root 0 9月 21 13:13 c
linux安全上下文与特殊权限
-
linux安全上下文
-
前提:进程有属主和属组;文件有属主和属组
-
任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;
-
启动为进程后,其进程的属主为发起者,属组为发起者所属的组
-
进程访问文件时的权限取决于进程的发起者:
- 进程的发起者是文件的属主时,则应用文件属主权限
- 进程的发起者是文件的属组时,则应用文件属组权限
- 应用文件“其它”权限
-
inux默认权限是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则
运行文件时是以文件所属者的身份运行
- SUID(4) //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主
chmod u+s file
chmod u-s file
//如果file本身原来就有执行权限,则SUID显示为s,否则显示为S
[doom@hostnamectl ~]$ vi a
[root@hostnamectl a]# ps -ef |grep vi
root 798 1 0 12:09 ? 00:00:00 /usr/bin/VGAuthService -s
doom 1776 1751 0 13:21 pts/1 00:00:00 vi a
root 1778 1598 0 13:21 pts/0 00:00:00 grep --color=auto vi
[root@hostnamectl a]# chmod u+s /bin/vi
[root@hostnamectl a]# ll /bin/vi
-rws-wx--x. 1 root root 910088 1月 20 2017 /bin/vi
[doom@hostnamectl ~]$ vi a
[root@hostnamectl a]# ps -ef |grep vi
root 798 1 0 12:09 ? 00:00:00 /usr/bin/VGAuthService -s
root 1771 1751 0 13:20 pts/1 00:00:00 vi a
root 1774 1598 0 13:20 pts/0 00:00:00 grep --color=auto vi
或者
[root@hostnamectl a]# chmod 4731 /bin/vi
[root@hostnamectl a]# ll /bin/vi
-rws-wx--x. 1 root root 910088 1月 20 2017 /bin/vi
运行文件时是以文件所属组的身份运行
- SGID(2) //运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组
//默认情况下,用户创建文件时,其属组为此用户所属的基本组;
//一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组 \
//为此设定了SGID的目录的属组
chmod g+s DIR
chmod g-s DIR
//如果file本身原来就有执行权限,则SGID显示为s,否则显示为S
同上(只能是目录)
公共文件夹下只能修改自己的文件或目录
- Sticky(1) //在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
chmod o+t DIR
chmod o-t DIR
如果DIR本身原来就有执行权限,则Sticky显示为t,否则显示为T
[root@hostnamectl ~]# chmod 1777 /opt/haha
[doom@hostnamectl ~]$ touch /opt/haha/{a..b}
[guilai@hostnamectl ~]$ touch /opt/haha/{c..d}
[guilai@hostnamectl ~]$ ll /opt/
总用量 0
drwxrwxrwt. 2 root root 24 9月 21 13:39 haha
[doom@hostnamectl ~]$ ll /opt/haha/
总用量 0
-rw-rw-r--. 1 doom doom 0 9月 21 13:38 a
-rw-rw-r--. 1 doom doom 0 9月 21 13:44 b
-rw-r--r--. 1 guilai tianxaidiyi 0 9月 21 13:42 c
-rw-r--r--. 1 guilai tianxaidiyi 0 9月 21 13:44 d
[doom@hostnamectl ~]$ rm -f /opt/haha/a
[doom@hostnamectl ~]$ rm -f /opt/haha/d
rm: 无法删除"/opt/haha/d": 不允许的操作
[doom@hostnamectl ~]$ ll /opt/haha/
总用量 0
-rw-rw-r--. 1 doom doom 0 9月 21 13:44 b
-rw-r--r--. 1 guilai tianxaidiyi 0 9月 21 13:42 c
-rw-r--r--. 1 guilai tianxaidiyi 0 9月 21 13:44 d
[guilai@hostnamectl ~]$ rm -f /opt/haha/c
[guilai@hostnamectl ~]$ rm -f /opt/haha/b
rm: 无法删除"/opt/haha/b": 不允许的操作
[guilai@hostnamectl ~]$ ll /opt/haha/
总用量 0
-rw-rw-r--. 1 doom doom 0 9月 21 13:44 b
-rw-r--r--. 1 guilai tianxaidiyi 0 9月 21 13:44 d
4755 //有SUID,文件权限为755
2755 //有SGID,文件权限为755
1755 //有Sticky,文件权限为755
7755 //有SUID、SGID、Sticky,文件权限为755
文件系统访问控制列表facl
默认情况下:
Owner --> Group --> Other
有设置facl的情况下:
Owner --> facl,user --> Group --> facl,group --> Other
-m -u:usernma/UID:perm添加用户或组-g对文件过目录的权限
设置目录权限时需要加- d,//setfacl -dm u:usenme:prem,此时在此目录中创建的文件均继承此访问控制列表所设置的权限,我用的是redhat7.4版本不用加默认有-d,加-d反而没用
[root@hostnamectl ~]# ll /opt/
总用量 0
[root@hostnamectl ~]# touch /opt/abc
[root@hostnamectl ~]# setfacl -m u:guilai:rw /opt/abc
[root@hostnamectl ~]# ll /opt/
总用量 0
-rw-rw-r--+ 1 root root 0 9月 23 14:05 abc
-R表示递归 -m表示设置文件acl规则
setfacl -R -m d:u:qhfz:rwx /data2/ResourceCase
setfacl -R -m d:u: ResourceCase:rwx /data2/ResourceCase
[root@hostnamectl ~]# getfacl /opt/abc
getfacl: Removing leading '/' from absolute path names
# file: opt/abc
# owner: root
# group: root
user::rw-
user:guilai:rw- //用户guilai有读写权限
group::r--
mask::rw-
other::r--
[guilai@hostnamectl ~]$ cd /opt/
[guilai@hostnamectl opt]$ ll
总用量 0
-rw-rw-r--+ 1 root root 0 9月 23 14:05 abc
[guilai@hostnamectl opt]$ echo asfdsad>abc
[guilai@hostnamectl opt]$ cat abc
asfdsad
[doom@hostnamectl ~]$ cd /opt/
[doom@hostnamectl opt]$ echo abcdef>abc
-bash: abc: 权限不够
-x删除用户(或组)对文件或目录的权限
后面不接权限
[root@hostnamectl ~]# setfacl -x u:guilai /opt/abc
[root@hostnamectl ~]# getfacl /opt/abc
getfacl: Removing leading '/' from absolute path names
# file: opt/abc
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
[guilai@hostnamectl opt]$ echo asfdsad>abc
-bash: abc: 权限不够
- -b删除所有设置的所有用户和组的权限
[root@hostnamectl ~]# getfacl /opt/abc
getfacl: Removing leading '/' from absolute path names
# file: opt/abc
# owner: root
# group: root
user::rw-
user:guilai:rw-
group::r--
group:guilai:rw-
group:doom:rw-
mask::rw-
other::r--
[root@hostnamectl ~]# setfacl -b /opt/abc
[root@hostnamectl ~]# getfacl /opt/abc
getfacl: Removing leading '/' from absolute path names
# file: opt/abc
# owner: root
# group: root
user::rw-
group::r--
other::r--
sudo
sudo可以实现某个用户能够以另外哪一个用户的身份通过哪些主机执行什么命令
sudo的配置文件:/etc/sudoers
使用visudo命令进行sudo的配置,每一行就是一个sudo条目,条目格式如下:
- who which_hosts=(runas) command
- who:User_Alias,表示运行命令者的身份
- which_hosts:Host_Alias,通过哪些主机
- runas:Runas_Alias,以哪个用户的身份
- command:Cmnd_Alias,运行哪些命令
别名必须全部而且只能使用大写英文字母的组合,可以使用感叹号取反
别名分类:
- 用户别名:
-
- User_Alias NETWORKADMIN =
- 用户的用户名
- 组名,使用%引导
- 还可以其它已经定义的用户别名
- User_Alias NETWORKADMIN =
- 主机别名:
- Host_Alias =
- 主机名
- IP地址
- 网络地址
- 其它主机别名
- Host_Alias =
- Runas别名:
- Runas_Alias =
- 用户名
- %组名
- Runas_Alias =
- 其它的Runas别名
- 命令别名:
- Cmnd_Alias =
- 命令路径
- 目录(此目录内的所有命令)
- 其它已定义的命令别名
- 命令别名:
-
- sudo命令语法:sudo [options] COMMAND
- -V: 显示版本编号
- -h : 会显示版本编号及指令的使用方式说明
- -l : 列出当前用户可以使用的所有sudo类命令
- -v : 因为sudo在第一次执行时或是在N分钟内没有执行(N默认为5)会问密码,这个参数
是重新做一次确认,如果超过N分钟,也会问密码 - -k : //让认证信息失效,如果不指定-k,默认认证信息在5分钟后失效
- -b: //将要执行的指令放在后台执行
- -u USERNAME : //以指定的用户名执行命令,默认为root
编辑方法
[root@hostnamectl ~]# visudo //推荐使用
[root@hostnamectl ~]# vi /etc/sudoers //也可以使用vi/vim直接编辑,但不推荐
- 进入后
[root@hostnamectl ~]# visudo
...
## Allow root to run any commands anywhere //用户
root ALL=(ALL) ALL
guilai ALL=(doom) /bin/mkdir //允许用户guilai以doom身份创建目录
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL //组前面要加%
...
[root@hostnamectl ~]# ll /home/doom/
总用量 0
[guilai@hostnamectl opt]$ sudo mkdir /home/doom/aaa //如果不加-u 默认以root用户执行
对不起,用户 guilai 无权以 root 的身份在 hostnamectl 上执行 /bin/mkdir /home/doom/aaa。
[guilai@hostnamectl opt]$ sudo -u doom mkdir abc
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] guilai 的密码:
[guilai@hostnamectl opt]$ sudo -u doom mkdir /home/doom/aaa
[root@hostnamectl ~]# ll /home/doom/
总用量 0
drwxr-xr-x. 2 doom doom 6 9月 23 15:42 aaa
- last显示/var/log/wtmp文件,显示用户登录历史及系统重启历史
-
- -n # :显示最近#次的相关信息
[root@hostnamectl ~]# last
root pts/3 192.168.213.1 Mon Sep 23 15:32 - 16:11 (00:38)
root pts/2 192.168.213.1 Mon Sep 23 14:16 - 16:10 (01:54)
root pts/1 192.168.213.1 Mon Sep 23 14:07 - 16:10 (02:03)
root pts/0 192.168.213.1 Mon Sep 23 13:57 still logged in
reboot system boot 3.10.0-693.el7.x Mon Sep 23 13:57 - 16:39 (02:41)
root tty1 Mon Sep 23 12:49 - 12:49 (00:00)
root pts/0 192.168.213.1 Mon Sep 23 12:47 - crash (01:10)
reboot system boot 3.10.0-693.el7.x Mon Sep 23 12:46 - 16:39 (03:52)
root pts/0 192.168.213.1 Mon Sep 23 12:04 - down (00:37)
- lastb显示/var/log/btmp文件,显示用户错误的登录尝试
- -n #: 显示最近#次的相关信息
[root@hostnamectl ~]# lastb
(unknown tty1 Mon Sep 23 10:06 - 10:06 (00:00)
root tty1 Fri Sep 20 14:21 - 14:21 (00:00)
guilai ssh:notty 192.168.213.1 Fri Sep 20 09:23 - 09:23 (00:00)
guilai ssh:notty 192.168.213.1 Fri Sep 20 09:21 - 09:21 (00:00)
tom pts/0 Mon Sep 16 14:35 - 14:35 (00:00)
jerry pts/0 Mon Sep 16 14:32 - 14:32 (00:00)
tom ssh:notty 192.168.213.1 Mon Sep 16 10:02 - 10:02 (00:00)
tom ssh:notty 192.168.213.1 Mon Sep 16 10:01 - 10:01 (00:00)
(unknown tty1 Thu Sep 12 13:59 - 13:59 (00:00)
(unknown tty1 Thu Sep 12 13:59 - 13:59 (00:00)
(unknown tty1 Sun Sep 8 09:56 - 09:56 (00:00)
- lastlog显示每个用户最近一次成功登录信息
-u username //显示特定用户最近的登录信息
[root@hostnamectl ~]# lastlog -u guilai
用户名 端口 来自 最后登陆时间
guilai pts/1 一 9月 23 14:07:24 +0800 2019