linux权限管理

2022/7/9 5:21:42

本文主要是介绍linux权限管理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 1. 权限介绍
  • 2. 权限管理命令
    • 2.1 修改权限的命令chmod
    • 2.2 修改文件属主和属组的命令chown
  • 3. 遮罩码
  • 4. linux安全上下文与特殊权限
    • 4.1 linux安全上下文
    • 4.2 特殊权限
  • 5.文件系统访问控制列表facl
  • 6.sudo
  • 管理命令


1. 权限介绍

文件的权限主要针对三类对象进行定义

  • owner:属主,u
  • group:属组,g
  • other:其它,o
[root@YL ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Jul  7 21:29 ly
[root@YL ~]# chmod u-w,g-r,o-x ly
[root@YL ~]# ll
total 0
dr-x--xr--. 2 root root 6 Jul  7 21:29 ly

每个文件针对每个访问者都定义了三种权限

权限 对应的操作对象 权限说明
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
[root@YL ~]# chmod 644 ly
[root@YL ~]# ll
total 0
drw-r--r--. 2 root root 6 Jul  7 21:29 ly

2. 权限管理命令

2.1 修改权限的命令chmod

修改三类用户的权限:
语法:chmod MODE file,...
-R 递归修改权限

修改某类用户或某些类用户权限:
u,g,o,a(用户类别)

chmod 用户类别=MODE file,.....
chmod 用户类别=MODE,用户类别=MODE file,.....

修改某类的用户某位或某些位权限:
u,g,o,a(用户类别)

chmod 用户类别+|-MODE file,.....
chmod 用户类别+|-MODE,用户类别+|-MODE file,.....
chmod +|-MODE file,...

[root@YL ~]# chmod u-r ly
[root@YL ~]# ll
total 0
d-w-r--r--. 2 root root 6 Jul  7 21:29 ly

2.2 修改文件属主和属组的命令chown

chown命令只有管理员可以使用。
chown USERNAME file,...
-R 修改目录及其内部文件的属主

chown USERNAME:GROUPNAME file,...
chown USERNAME.GROUPNAME file,...

[root@YL ~]# chown lt:lt ly	//设置ly这个文件的所属组和所属主为lt
[root@YL ~]# ll
total 0
d-w-r--r--. 2 lt lt 6 Jul  7 21:29 ly

3. 遮罩码

为什么文件创建以后默认权限是644?
为什么目录创建以后默认权限是755?

这是由遮罩码umask来控制的。

从名字就能看出来,遮罩码umask是用来隐藏一些权限的。举例:如果你不想让人家认出你,你会怎么办?

文件最终的权限为:

  • 666-umask
    目录最终的权限为:
  • 777-umask

文件默认是不能具有执行权限的,如果算得的结果有执行权限则将其权限整体加1。

[root@YL ~]# umask 0033
[root@YL ~]# echo ll > liu
[root@YL ~]# ll
total 4
-rw-r--r--. 1 root root 3 Jul  7 21:39 liu	//文件默认的权限值为666减掉033之后变成633但是文件默认时不能有执行权限的所以会整体加1然后变成了644
drwxr--r--. 2 root root 6 Jul  7 21:39 ly  // 目录创建时的权限值为777然后减掉033变成744

4. linux安全上下文与特殊权限

4.1 linux安全上下文

前提:进程有属主和属组;文件有属主和属组

  • 任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;
  • 启动为进程后,其进程的属主为发起者,属组为发起者所属的组
  • 进程访问文件时的权限取决于进程的发起者:
    • 进程的发起者是文件的属主时,则应用文件属主权限
    • 进程的发起者是文件的属组时,则应用文件属组权限
    • 应用文件“其它”权限

4.2 特殊权限

linux默认权限是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则。

SUID(4) 运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主
chmod u+s file
chmod u-s file
如果file本身原来就有执行权限,则SUID显示为s,否则显示为S

  [root@YL ~]# ll /usr/bin/sleep //查看sleep的绝对路径
-rwsr-xr-x. 1 root root 38424 Apr 27  2020 /usr/bin/sleep
[root@YL ~]# ps -ef| grep sleep	
root        1826    1680  0 09:21 pts/1    00:00:00 sleep 1000
root        1837    1524  0 09:22 pts/0    00:00:00 grep --color=auto sleep
[lt@YL ~]$ sleep 1000  //即使在lt这个用户启动他的属主依然是root

SGID(2) 运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组
默认情况下,用户创建文件时,其属组为此用户所属的基本组;
一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组
为此设定了SGID的目录的属组
chmod g+s DIR
chmod g-s DIR
如果file本身原来就有执行权限,则SGID显示为s,否则显示为S

[lt@YL ~]$ ll
total 0
drwxrwsr-x. 2 lt   lt   15 Jul  8 09:56 ll
[root@YL ll]# ll
total 0
-rw-r--r--. 1 root lt 0 Jul  8 09:56 m
[root@YL ll]# cd
[root@YL ~]# ll		//当给lt用户的ll组一个SGID时无论你在什么用户下进入这个目录创建文件,他的属组依然时lt
total 0
drwxr-xr-x. 2 root root 6 Jul  8 09:54 ly

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@YL ~]# chmod o+t /opt/abc/	// 给/opt/abc这个公共目录一个o+t权限其他普通用户就可以在里面创建和删除文件但是只能删除所属主是自己的
[root@YL ~]# ll
total 0
-rw-r--r--. 1 root root 0 Jul  8 10:22 123
drwxr-xr-x. 2 root root 6 Jul  8 09:54 ly
[root@YL ~]# ll -d /opt/abc/
drwxrwxrwt. 2 root root 6 Jul  8 10:26 /opt/abc/
[root@YL ~]# ls
123  ly
[root@YL ~]# cd /opt/
[root@YL opt]# cd /opt/abc/
[root@YL abc]# ls
[root@YL abc]# 
[root@YL abc]# touch 111
[root@YL abc]# ll
total 0
-rw-r--r--. 1 root root 0 Jul  8 10:29 111
-rw-rw-r--. 1 lt   lt   0 Jul  8 10:29 aab
-rw-rw-r--. 1 liu  liu  0 Jul  8 10:29 kkk
[lt@YL abc]$ touch  aab
[lt@YL abc]$ 
[liu@YL abc]$ touch  kkk
[liu@YL abc]$ rm -rf *
rm: cannot remove '111': Operation not permitted
rm: cannot remove 'aab': Operation not permitted

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
setfacl -m g:test:rw file
如果要为某个目录设定默认的访问控制列表,只需要设定时在u或g前面加上d即可。 如:
setfacl -m d:u:test:rw file,此时在此目录中创建的文件均继承此访问控制列表所设置的权限
-x 取消
u:UID
g:GID
setfacl -x u:test file
setfacl -x g:test file
-b Remove all

语法:getfacl [-aceEsRLPtpndvh] file ...
getfacl file

[root@YL opt]# cat > aaa <<EOF	//在公共目录下创建一个名aaa的文件
> aaa
> bbb
> ccc
> EOF
[root@YL opt]# setfacl -m u:lt:r-- aaa	
[lt@YL opt]$ cat aaa
aaa
bbb
ccc
[liu@YL opt]$ cat aaa
cat: aaa: Permission denied
[lll@YL ~]$ cat /opt/aaa 
cat: /opt/aaa: Permission denied

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,运行哪些命令
lt      ALL=(ALL)       NOPASSWD:/usr/sbin/useradd
[lt@YL ~]$ sudo useradd lm
[liu@YL ~]$ sudo useradd ok

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for liu: 
liu is not in the sudoers file.  This incident will be reported.

别名必须全部而且只能使用大写英文字母的组合,可以使用感叹号取反
别名分类:

  • 用户别名:
    • User_Alias NETWORKADMIN =
      • 用户的用户名
      • 组名,使用%引导
      • 还可以其它已经定义的用户别名
  • 主机别名:
    • Host_Alias =
      • 主机名
      • IP地址
      • 网络地址
      • 其它主机别名
  • Runas别名:
    • 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

管理命令

w //显示当前登录到系统的用户有哪些,以及其正在做什么
sleep //睡眠,写脚本为防止上一个命令没执行完下一命令就开始执行时可以加上sleep #
//表示停顿#秒后再执行后面的命令
sleep NUMBER[SUFFIX]...
SUFFIX:
s:秒,默认
m:分
h:小时
d:天
last //显示/var/log/wtmp文件,显示用户登录历史及系统重启历史
-n # //显示最近#次的相关信息
lastb //显示/var/log/btmp文件,显示用户错误的登录尝试
-n # //显示最近#次的相关信息
lastlog //显示每个用户最近一次成功登录信息
-u username //显示特定用户最近的登录信息
basename //显示路径基名

[root@YL ~]# a=/usr/local/src/ly
[root@YL ~]# basename $a
ly
[root@YL ~]# dirname $a
/usr/local/src
[root@YL ~]# 


这篇关于linux权限管理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程