权限管理
权限管理
1.权限简介
文件的权限主要针对三类对象进行定义:
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
2.权限管理命令
2.1 修改权限命令chmod
命令:chmod [权限] [username] 修改文件和目录权限
2.2修改文件属主和属组的命令chown
chown命令只有管理员可以使用。
两种修改命令格式
chown [USERNAME:GROUPNAME] file,…
chown [USERNAME.GROUPNAME] file,…
2.3 修改文件的属组命令chgrp
语法:chgrp [OPTION]… GROUP FILE…
3遮罩码
为什么文件创建以后默认权限是644?
为什么目录创建以后默认权限是755?
这是由遮罩码umask来控制的。
从名字就能看出来,遮罩码umask是用来隐藏一些权限的。
文件最终的权限为:666-umask
目录最终的权限为:777-umask
遮罩码为022,所以文件创建以后默认权限是644,目录创建以后默认权限是755。
文件默认是不能具有执行权限的,如果算得的结果有执行权限则将其权限整体加1。
4. linux安全上下文与特殊权限
4.1 linux安全上下文
前提:进程有属主和属组;文件有属主和属组
任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;
启动为进程后,其进程的属主为发起者,属组为发起者所属的组
进程访问文件时的权限取决于进程的发起者:
进程的发起者是文件的属主时,则应用文件属主权限
进程的发起者是文件的属组时,则应用文件属组权限
应用文件“其它”权限
4.2 特殊权限
linux默认权限是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则。
SUID(4) 运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主
chmod u s file
chmod u-s file
如果file本身原来就有执行权限,则SUID显示为s,否则显示为S,只能对可执行文件使用。
示例:
给vi设置权限
[root@localhost ~]# chmod u s /usr/bin/vi
在另一个用户连接下使用vi打开文件a
[tom@localhost ~]$ vi a
在root用户下查看vi进程
[root@localhost ~]# ps -ef|grep vi
root 744 1 0 15:28 ? 00:00:00 /usr/bin/VGAuthService -s
root 1515 1496 0 15:41 pts/1 00:00:00 vi a
root 1517 1447 0 15:41 pts/0 00:00:00 grep --color=auto 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用户下创建共享目录,并给其他用户写的权限
[root@localhost tmp]# mkdir gx
[root@localhost tmp]# ll
总用量 0
drwxr-xr-x. 2 root root 6 9月 21 16:20 gx
[root@localhost tmp]# chmod o t gx
[root@localhost tmp]# ll
总用量 0
drwxr-xr-t. 2 root root 6 9月 21 16:20 gx
[root@localhost tmp]# chmod o w gx
在tom用户下,在共享目录中创建一个文件aaa
[tom@localhost gx]$ touch aaa
在www用户下,在共享目录中,删除aaa时权限不足,创建自己的文件bbb,可以顺利删除
[www@localhost gx]$ rm -f aaa
rm: 无法删除"aaa": 不允许的操作
[www@localhost gx]$ touch bbb
[www@localhost gx]$ rm -f bbb
4755 有SUID,文件权限为755
2755 有SGID,文件权限为755
1755 有Sticky,文件权限为755
7755 有SUID、SGID、Sticky,文件权限为755
这里前面的4、2、1分别表示SUID、SGID、Sticky
5. 文件系统访问控制列表facl
facl(Filesystem Access Control List),利用文件扩展保存额外的访问控制权限。
语法:setfacl [-bkndRLP] { -m|-M|-x|-X … } file …
-m 设定访问权限
u:UID:perm
g:GID:perm
给指定用户添加访问权限:setfacl -m u:test:rw file
示例:[root@localhost tmp]# getfacl a
# file: a
# owner: root
# group: root
user::rw-
group::r--
other::r--
[root@localhost tmp]# setfacl -m u:tom:rw a
[root@localhost tmp]# getfacl a
# file: a
# owner: root
# group: root
user::rw-
user:tom:rw-
group::r--
mask::rw-
other::r--
[tom@localhost tmp]$ cat a
1
2
3
[tom@localhost tmp]$ vi a
[tom@localhost tmp]$ cat a
1
2
3
1234
给指定组添加访问权限:setfacl -m g:test:rw file
示例:[root@localhost tmp]# setfacl -m g:www:rw a
[root@localhost tmp]# getfacl a
# file: a
# owner: root
# group: root
user::rw-
user:tom:rw-
group::r--
group:www:rw-
mask::rw-
other::r--
[www@localhost tmp]$ cat a
1
2
3
1234
[www@localhost tmp]$ vi a
[www@localhost tmp]$ cat a
1
2
3
1234
234567
如果要为某个目录设定默认的访问控制列表,只需要设定时在u或g前面加上d即可。如:
setfacl -m du:test:rw file,此时在此目录中创建的文件均继承此访问控制列表所设置的权限
-x 取消访问权限
u:UID
g:GID
取消设定用户权限:setfacl -x u:test file
示例:[root@localhost tmp]# setfacl -x u:tom a
[root@localhost tmp]# getfacl a
# file: a
# owner: root
# group: root
user::rw-
group::r--
group:www:rw-
mask::rw-
other::r--
取消设定用户权限:setfacl -x g:test file
示例:[root@localhost tmp]# setfacl -x g:www a
[root@localhost tmp]# getfacl a
# file: a
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
删除所有权限命令-b Remove all
示例:
[root@localhost tmp]# setfacl -b a
语法:getfacl [-aceEsRLPtpndvh] file …
[root@localhost tmp]# getfacl a
# file: a
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
文件权限应用次序:
默认情况下:
Owner --> Group --> Other
有设置facl的情况下:
Owner --> facl,user --> Group --> facl,group --> Other
6. 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,运行哪些命令
别名必须全部而且只能使用大写英文字母的组合,可以使用感叹号取反
7.管理命令
w 显示当前登录到系统的用户有哪些,以及其正在做什么
示例:
[root@localhost ~]# w
18:59:03 up 3:30, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.80.1 15:30 7.00s 0.19s 0.00s w
root pts/1 192.168.80.1 15:40 19:03 0.18s 0.16s -bash
root pts/2 192.168.80.1 16:05 1:13m 0.09s 0.06s -bash
sleep 睡眠,写脚本为防止上一个命令没执行完下一命令就开始执行时可以加上sleep # 表示停顿#秒后再执行后面的命令
示例:
[tom@localhost tmp]$ sleep 10
last 显示/var/log/wtmp文件,显示用户登录历史及系统重启历史
[root@localhost ~]# last
root pts/2 192.168.80.1 Sat Sep 21 16:05 still logged in
root pts/1 192.168.80.1 Sat Sep 21 15:40 still logged in
root pts/0 192.168.80.1 Sat Sep 21 15:30 still logged in
reboot system boot 3.10.0-693.el7.x Sat Sep 21 15:28 - 19:01 (03:32)
root pts/0 192.168.80.1 Fri Sep 20 17:04 - 17:20 (00:15)
reboot system boot 3.10.0-693.el7.x Fri Sep 20 17:02 - 17:20 (00:17)
...
[root@localhost ~]# last -n3
root pts/2 192.168.80.1 Sat Sep 21 16:05 still logged in
root pts/1 192.168.80.1 Sat Sep 21 15:40 still logged in
root pts/0 192.168.80.1 Sat Sep 21 15:30 still logged in
wtmp begins Wed Aug 8 21:28:54 2018
lastb 显示/var/log/btmp文件,显示用户错误的登录尝试
[root@localhost ~]# lastb
root pts/1 Wed Sep 18 17:05 - 17:05 (00:00)
root pts/1 Wed Sep 18 17:04 - 17:04 (00:00)
root tty1 Sun Sep 15 19:21 - 19:21 (00:00)
btmp begins Sun Sep 15 19:21:34 2019
[root@localhost ~]# lastb -n2
root pts/1 Wed Sep 18 17:05 - 17:05 (00:00)
root pts/1 Wed Sep 18 17:04 - 17:04 (00:00)
btmp begins Sun Sep 15 19:21:34 2019
lastlog 显示每个用户最近一次成功登录信息
-u username 显示特定用户最近的登录信息
示例:
[root@localhost ~]# lastlog
用户名 端口 来自 最后登陆时间
root pts/2 192.168.80.1 六 9月 21 16:05:34 0800 2019
bin **从未登录过**
daemon **从未登录过**
adm **从未登录过**
root1 pts/1 三 9月 18 17:01:01 0800 2019
tom pts/1 六 9月 21 15:41:01 0800 2019
www pts/2 六 9月 21 16:06:07 0800 2019
oppo pts/2 五 9月 20 16:36:37 0800 2019
[root@localhost ~]# lastlog -u root
用户名 端口 来自 最后登陆时间
root pts/2 192.168.80.1 六 9月 21 16:05:34 0800 2019
[root@localhost ~]# basename /a/b/c/efg
efg
[root@localhost ~]# dirname /a/b/c/efg
/a/b/c
来源:https://www./content-4-462451.html