权限管理
文章目录
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 MODE file,...
-R //递归修改权限
//修改某类用户或某些类用户权限:
//u,g,o,a(用户类别)
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 0 Jul 5 10:47 1
drwxr-xr-x. 2 root root 4096 Jul 4 20:35 a
-rw-------. 1 root root 1092 Jun 28 14:21 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Jul 7 18:30 runtime
[root@localhost ~]# chmod u-w runtime
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 0 Jul 5 10:47 1
drwxr-xr-x. 2 root root 4096 Jul 4 20:35 a
-rw-------. 1 root root 1092 Jun 28 14:21 anaconda-ks.cfg
-r--r--r--. 1 root root 0 Jul 7 18:30 runtime
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 0 Jul 5 10:47 1
drwxr-xr-x. 2 root root 4096 Jul 4 20:35 a
-rw-------. 1 root root 1092 Jun 28 14:21 anaconda-ks.cfg
-r--r--r--. 1 root root 0 Jul 7 18:30 runtime
[root@localhost ~]# chmod g+w runtime
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 0 Jul 5 10:47 1
drwxr-xr-x. 2 root root 4096 Jul 4 20:35 a
-rw-------. 1 root root 1092 Jun 28 14:21 anaconda-ks.cfg
-r--rw-r--. 1 root root 0 Jul 7 18:30 runtime
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 0 Jul 5 10:47 1
drwxr-xr-x. 2 root root 4096 Jul 4 20:35 a
-rw-------. 1 root root 1092 Jun 28 14:21 anaconda-ks.cfg
-r--rw-r--. 1 root root 0 Jul 7 18:30 runtime
[root@localhost ~]# chmod o+w runtime
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 0 Jul 5 10:47 1
drwxr-xr-x. 2 root root 4096 Jul 4 20:35 a
-rw-------. 1 root root 1092 Jun 28 14:21 anaconda-ks.cfg
-r--rw-rw-. 1 root root 0 Jul 7 18:30 runtime
//chmod 用户类别=MODE file,.....
//chmod 用户类别=MODE,用户类别=MODE file,.....
//修改某类的用户某位或某些位权限:
//u,g,o,a(用户类别)
//chmod 用户类别+|-MODE file,.....
//chmod 用户类别+|-MODE,用户类别+|-MODE file,.....
//chmod +|-MODE file,...
[root@localhost ~]# ll
total 8
-rw-r-----. 1 root root 0 Jul 5 10:47 1
drwxr-xr-x. 2 root root 4096 Jul 4 20:35 a
-rw-------. 1 root root 1092 Jun 28 14:21 anaconda-ks.cfg
[root@localhost ~]# chmod 644 1
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 0 Jul 5 10:47 1
drwxr-xr-x. 2 root root 4096 Jul 4 20:35 a
-rw-------. 1 root root 1092 Jun 28 14:21 anaconda-ks.cfg
2.2修改问价你属主和属组的命令chown
chown命令是由管理员可以使用
修改文件的属主和属组
[root@localhost tmp]# ll
total 8
-rw-rw-r--. 1 www www 0 Jul 7 18:48 123
-rwx------. 1 root root 701 Jun 28 14:21 ks-script-htn3bwki
-rwx------. 1 root root 291 Jun 28 14:21 ks-script-s10ge1er
drwx------. 2 root root 6 Jun 30 09:06 vmware-root_932-2722632322
[root@localhost tmp]# chown root. 123
[root@localhost tmp]# ll
total 8
-rw-rw-r--. 1 root root 0 Jul 7 18:48 123
3.遮罩码
为什么文件创建以后默认权限是644?
为什么目录创建以后默认权限是755?
这是由遮罩码umask来控制的。
从名字就能看出来,遮罩码umask是用来隐藏一些权限的。举例:如果你不想让人家认出你,你会怎么办?
文件最终的权限为:
- 666-umask
[root@localhost ~]# ll //修改umask后默认权限为664
total 8
-rw-r--r--. 1 root root 0 Jul 5 10:47 1
drwxr-xr-x. 2 root root 4096 Jul 4 20:35 a
-rw-------. 1 root root 1092 Jun 28 14:21 anaconda-ks.cfg
-r--rw-rw-. 1 root root 0 Jul 7 18:30 runtime
[root@localhost ~]# umask 002
[root@localhost ~]# touch hehe
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 0 Jul 5 10:47 1
drwxr-xr-x. 2 root root 4096 Jul 4 20:35 a
-rw-------. 1 root root 1092 Jun 28 14:21 anaconda-ks.cfg
-rw-rw-r--. 1 root root 0 Jul 7 18:55 hehe
-r--rw-rw-. 1 root root 0 Jul 7 18:30 runtime
目录的最终权限为
- 777-umask
[root@localhost ~]# mkdir xixi //修改后默认权限为775
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 0 Jul 5 10:47 1
drwxr-xr-x. 2 root root 4096 Jul 4 20:35 a
-rw-------. 1 root root 1092 Jun 28 14:21 anaconda-ks.cfg
-rw-rw-r--. 1 root root 0 Jul 7 18:55 hehe
-r--rw-rw-. 1 root root 0 Jul 7 18:30 runtime
drwxrwxr-x. 2 root root 6 Jul 7 18:56 xixi
文件默认是不能具有执行权限的,如果算得的结果有执行权限则将其权限整体加1。
4.Linux安全上下文与特殊权限
4.1Linux安全上下文
前提:进程有属主和属组;文件有属主和属组
- 任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;
- 启动为进程后,其进程的属主为发起者,属组为发起者所属的组
- 进程访问文件时的权限取决于进程的发起者:
- 进程的发起者是文件的属主时,则应用文件属主权限
- 进程的发起者是文件的属组时,则应用文件属组权限
- 应用文件“其它”权限
4.2特殊权限
linux默认权限是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则。
SUID(4) //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主
chmod u+s file
chmod u-s file
//如果file本身原来就有执行权限,则SUID显示为s,否则显示为S
[root@localhost ~]# ll /usr/bin/sleep
-rwxr-xr-x. 1 root root 38296 Jul 14 2021 /usr/bin/sleep
[root@localhost ~]# chmod u+s /usr/bin/sleep
[root@localhost ~]# ll /usr/bin/sleep
-rwsr-xr-x. 1 root root 38296 Jul 14 2021 /usr/bin/sleep
[root@localhost ~]# ps -ef| grep sleep //所有者还是root
root 2540 2435 0 19:13 pts/1 00:00:00 sleep 100
root 2542 2357 0 19:14 pts/0 00:00:00 grep --color=auto sleep
[root@localhost ~]# chmod u-s /usr/bin/sleep //删除特殊权限
[root@localhost ~]# ll /usr/bin/sleep
-rwxr-xr-x. 1 root root 38296 Jul 14 2021 /usr/bin/sleep
SGID(2) //运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组
//默认情况下,用户创建文件时,其属组为此用户所属的基本组;
//一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组 \
//为此设定了SGID的目录的属组
chmod g+s DIR
chmod g-s DIR
//如果file本身原来就有执行权限,则SGID显示为s,否则显示为S
[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir abc //创建一个目录,他的属组是root
[root@localhost opt]# ll
total 0
drwxrwxr-x. 2 root root 6 Jul 7 19:31 abc
[root@localhost opt]# chown .www abc //修改它的属组为www
[root@localhost opt]# ll
total 0
drwxrwxr-x. 2 root www 6 Jul 7 19:31 abc
[root@localhost opt]# touch abc/123 //在abc目录创建文件,他的属组还是root,因为还没有改它的权限
[root@localhost opt]# ll abc/123
-rw-rw-r--. 1 root root 0 Jul 7 19:31 abc/123
[root@localhost opt]# chmod 2755 abc //给abc目录sgid权限
[root@localhost opt]# ll
total 0
drwxr-sr-x. 2 root www 17 Jul 7 19:31 abc
[root@localhost opt]# touch abc/456
[root@localhost opt]# ll abc/456 //创建的文件属组为www
-rw-rw-r--. 1 root www 0 Jul 7 19:32 abc/456
[root@localhost ~]# chmod g-s /opt/abc //删除sgid权限
[root@localhost ~]# ll /opt/
total 0
drwxr-xr-x. 2 root www 28 Jul 7 19:32 abc
Sticky(1) //在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
chmod o+t DIR
chmod o-t DIR
//如果DIR本身原来就有执行权限,则Sticky显示为t,否则显示为T
4755 //有SUID,文件权限为755
2755 //有SGID,文件权限为755
1755 //有Sticky,文件权限为755
//这里前面的4、2、1分别表示SUID、SGID、Sticky
[root@localhost opt]# mkdir fff /创建一个目录
[root@localhost opt]# ll
total 0
drwxrwxr-x. 2 root root 6 Jul 7 19:55 fff
[root@localhost opt]# chmod 777 fff //将目录权限修改为777
[root@localhost opt]# ll
total 0
drwxrwxrwx. 2 root root 6 Jul 7 19:55 fff
[root@localhost opt]# chmod o+t fff //给fff权限
[root@localhost opt]# cd fff
[root@localhost fff]# touch 123 //创建文件时属于root的
[root@localhost fff]# ll
total 0
-rw-rw-r--. 1 root root 0 Jul 7 19:56 123
[www@localhost ~]$ cd /opt/
[www@localhost opt]$ ll
total 0
drwxrwxrwt. 2 root root 17 Jul 7 19:56 fff
[www@localhost opt]$ cd fff
[www@localhost fff]$ ll
total 0
-rw-rw-r--. 1 root root 0 Jul 7 19:56 123
[www@localhost fff]$ touch 456 //创建一个www的文件
[www@localhost fff]$ ll
total 0
-rw-rw-r--. 1 root root 0 Jul 7 19:56 123
-rw-r--r--. 1 www www 0 Jul 7 19:58 456
[www@localhost fff]$ rm -f 456 //可以删除自己的文件
[www@localhost fff]$ ls
123
5.文件系统访问控制刘表facl
facl(Filesystem Access Control List),利用文件扩展保存额外的访问控制权限
/语法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m //设定
u:UID:perm
g:GID:perm
[root@localhost opt]# touch 444
[root@localhost opt]# setfacl -m u:www:rwx 444
[root@localhost opt]# getfacl 444
# file: 444
# owner: root
# group: root
user::rw-
user:www:rwx
group::rw-
mask::rwx
other::r--
[www@localhost opt]$ cat 444
1231
123
123
13
1
[root@localhost opt]# setfacl -x u:www 444
[root@localhost opt]# getfacl 444
# file: 444
# owner: root
# group: root
user::rw-
group::rw-
mask::rw-
other::r--
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,运行哪些命令
别名必须全部而且只能使用大写英文字母的组合,可以使用感叹号取反
别名分类:
- 用户别名:
- User_Alias NETWORKADMIN =
- 用户的用户名
- 组名,使用%引导
- 还可以其它已经定义的用户别名
- 主机别名:
- Host_Alias =
- 主机名
- IP地址
- 网络地址
- 其它主机别名
- Runas别名:
- Runas_Alias =
- 用户名
- %组名
- 其它的Runas别名
- Runas_Alias =
- 命令别名:
- Cmnd_Alias =
- 命令路径
- 目录(此目录内的所有命令)
- 其它已定义的命令别名
sudo命令语法:sudo [options] COMMAND
-V //显示版本编号
-h //帮助信息,会显示版本编号及指令的使用方式说明
-l //列出当前用户可以使用的所有sudo类命令
-v //重新做一次密码确认,如果超过N(默认为5)分钟,也会问密码
-k //立刻清除认证信息,如果不指定-k,默认认证信息在5分钟后失效
-b //将要执行的指令放在后台执行
u USERNAME //以指定的用户名执行命令,默认为root
- Cmnd_Alias =
[root@localhost ~]# visudo //给www用户借权
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
www ALL=(ALL) /usr/sbin/useradd
[www@localhost ~]$ sudo useradd ji //创建用户
[sudo] password for www:
[www@localhost ~]$ id ji
uid=1002(ji) gid=1002(ji) groups=1002(ji)
[www@localhost ~]$
7.管理命令
w //显示当前登录到系统的用户有哪些,以及其正在做什么
[root@localhost ~]# w
20:36:30 up 9:27, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 08:57 6:25m 0.01s 0.01s -bash
root pts/0 192.168.159.1 18:07 0.00s 0.31s 0.00s w
www pts/1 192.168.159.1 18:48 1:49 0.07s 0.07s -bash
sleep //睡眠,写脚本为防止上一个命令没执行完下一命令就开始执行时可以加上sleep #
//表示停顿#秒后再执行后面的命令
sleep NUMBER[SUFFIX]…
SUFFIX:
s:秒,默认
m:分
h:小时
d:天
[www@localhost ~]$ sleep 100 //正在睡眠,默认时秒
last //显示/var/log/wtmp文件,显示用户登录历史及系统重启历史
-n # //显示最近#次的相关信息
[root@localhost ~]# last -5 //显示5行
www pts/1 192.168.159.1 Thu Jul 7 18:48 still logged in
root pts/0 192.168.159.1 Thu Jul 7 18:07 still logged in
www pts/0 192.168.159.1 Thu Jul 7 16:53 - 17:03 (00:09)
root pts/1 192.168.159.1 Thu Jul 7 14:11 - 17:03 (02:51)
root pts/0 192.168.159.1 Thu Jul 7 08:57 - 15:06 (06:08)
wtmp begins Tue Jun 28 14:21:50 2022
[root@localhost ~]#
lastb //显示/var/log/btmp文件,显示用户错误的登录尝试
-n # //显示最近#次的相关信息
[root@localhost ~]# lastb -n5
www ssh:notty 192.168.159.1 Thu Jul 7 18:48 - 18:48 (00:00)
www ssh:notty 192.168.159.1 Thu Jul 7 16:53 - 16:53 (00:00)
tty1 Wed Jul 6 10:22 - 10:22 (00:00)
root[A tty1 Wed Jul 6 10:22 - 10:22 (00:00)
root tty1 Mon Jul 4 10:20 - 10:20 (00:00)
btmp begins Mon Jul 4 10:20:24 2022
lastlog //显示每个用户最近一次成功登录信息
-u username //显示特定用户最近的登录信息
[root@localhost ~]# lastlog
Username Port From Latest
root pts/0 192.168.159.1 Thu Jul 7 18:07:50 +0800 2022
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
operator **Never logged in**
games **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
dbus **Never logged in**
basename //显示路径基名
[root@localhost ~]# basename /usr/local/lib
lib
**Never logged in**
operator **Never logged in**
games **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
dbus **Never logged in**
basename //显示路径基名
[root@localhost ~]# basename /usr/local/lib
lib