权限管理

权限管理

1.权限简介

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

[En]

The permissions of the file are mainly defined for three types of objects:

owner 属主 u group 属组 g other 其它 o

每个文件为每个访问者定义了三个权限:

[En]

Each file defines three permissions for each visitor:

权限 对应的操作对象 权限说明 r 文件 可读

可以使用类似cat等命令查看文件内容 w 文件 可写

可以编辑或删除此文件 x 文件 可执行,eXacutable

可以在命令提示符下

当作命令提交给内核运行 r 目录 可以对此目录执行ls以列出内部的所有文件 w 目录 可以在此目录中创建文件

也可删除此目录中的文件 x 目录 可以使用cd切换进此目录

也可以使用ls -l查看内部文件的详细信息

权限的二进制到十进制转换:

[En]

Binary to decimal conversion of permissions:

权限管理

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@lnh ~]# ll
total 24
-rw-r--r--. 1 root root     0 Jul  4 12:22 111
-rw-r--r--. 1 root root     0 Jul  4 12:20 222
-rw-------. 1 root root  1003 Jun 28 04:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 15032 Jul  4 08:33 outfile
-rw-r--r--. 1 root root   156 Jul  3 07:38 test
drwxr-xr-x. 2 root root     6 Jul  3 12:00 tushanbu
[root@lnh ~]# chmod u-w 111
[root@lnh ~]# ll
total 24
-r--r--r--. 1 root root     0 Jul  4 12:22 111
-rw-r--r--. 1 root root     0 Jul  4 12:20 222
-rw-------. 1 root root  1003 Jun 28 04:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 15032 Jul  4 08:33 outfile
-rw-r--r--. 1 root root   156 Jul  3 07:38 test
drwxr-xr-x. 2 root root     6 Jul  3 12:00 tushanbu
//不要111的属主写权限
[root@lnh ~]# chmod o+w 111
[root@lnh ~]# ll
total 24
-r--r--rw-. 1 root root     0 Jul  4 12:22 111
-rw-r--r--. 1 root root     0 Jul  4 12:20 222
-rw-------. 1 root root  1003 Jun 28 04:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 15032 Jul  4 08:33 outfile
-rw-r--r--. 1 root root   156 Jul  3 07:38 test
drwxr-xr-x. 2 root root     6 Jul  3 12:00 tushanbu
//给111其他这里赋予它可以写的权限
[root@lnh ~]# ll
total 24
-r--r--rw-. 1 root root     0 Jul  4 12:22 111
-rw-r--r--. 1 root root     0 Jul  4 12:20 222
-rw-------. 1 root root  1003 Jun 28 04:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 15032 Jul  4 08:33 outfile
-rw-r--r--. 1 root root   156 Jul  3 07:38 test
drwxr-xr-x. 2 root root     6 Jul  3 12:00 tushanbu
[root@lnh ~]# chmod g=wx 222
[root@lnh ~]# ll
total 24
-r--r--rw-. 1 root root     0 Jul  4 12:22 111
-rw--wxr--. 1 root root     0 Jul  4 12:20 222
-rw-------. 1 root root  1003 Jun 28 04:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 15032 Jul  4 08:33 outfile
-rw-r--r--. 1 root root   156 Jul  3 07:38 test
drwxr-xr-x. 2 root root     6 Jul  3 12:00 tushanbu
//给222的属组赋予可写和可执行权限,它之前可读权限消失了
[root@lnh ~]# chmod ugo=rwx 222
[root@lnh ~]# ll
total 24
-r--r--rw-. 1 root root     0 Jul  4 12:22 111
-rwxrwxrwx. 1 root root     0 Jul  4 12:20 222
-rw-------. 1 root root  1003 Jun 28 04:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 15032 Jul  4 08:33 outfile
-rw-r--r--. 1 root root   156 Jul  3 07:38 test
drwxr-xr-x. 2 root root     6 Jul  3 12:00 tushanbu
//给222赋予可读可写可执行权限
[root@lnh ~]# chmod a=rwx 111
[root@lnh ~]# ll
total 24
-rwxrwxrwx. 1 root root     0 Jul  4 12:22 111
-rwxrwxrwx. 1 root root     0 Jul  4 12:20 222
-rw-------. 1 root root  1003 Jun 28 04:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 15032 Jul  4 08:33 outfile
-rw-r--r--. 1 root root   156 Jul  3 07:38 test
drwxr-xr-x. 2 root root     6 Jul  3 12:00 tushanbu
//给111赋予可读可写可执行权限
//a=u属主+g属组+o其他
[root@lnh ~]# chmod -R a=rwx tushanbu/333
[root@lnh ~]# ll tushanbu/333
-rwxrwxrwx. 1 root root 0 Jul  4 12:49 tushanbu/333
//递归修改权限
//给tushanbu目录下的333文件赋予可读可写可执行权限
[root@lnh ~]# chmod 666 111
[root@lnh ~]# ll
total 24
-rw-rw-rw-. 1 root root     0 Jul  4 12:56 111
-rwxrwxrwx. 1 root root     0 Jul  4 12:20 222
-rw-------. 1 root root  1003 Jun 28 04:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 15032 Jul  4 08:33 outfile
-rw-r--r--. 1 root root   156 Jul  3 07:38 test
drwxr-xr-x. 2 root root    17 Jul  4 12:49 tushanbu
//也可以通过数字的方式赋予文件111可读可写权限

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

chown命令只有管理员可以使用。
chown 用户名.属组 文件名
-R //chown 用户名.属组 目录/文件名
chown 用户名:属组 文件名

[root@lnh ~]# ll
total 28
-rw-rw-rw-. 1 root root     0 Jul  4 12:56 111
-rwxrwxrwx. 1 root root     0 Jul  4 12:20 222
-rw-------. 1 root root  1003 Jun 28 04:46 anaconda-ks.cfg
-rw-------. 1 lxb  root  1003 Jul  4 13:18 lxb
-rw-r--r--. 1 root root 15032 Jul  4 08:33 outfile
-rw-r--r--. 1 root root   156 Jul  3 07:38 test
drwxr-xr-x. 2 root root    17 Jul  4 12:49 tushanbu
[root@lnh ~]# chown lxb.lxb 111
[root@lnh ~]# ll
total 28
-rw-rw-rw-. 1 lxb  lxb      0 Jul  4 12:56 111
-rwxrwxrwx. 1 root root     0 Jul  4 12:20 222
-rw-------. 1 root root  1003 Jun 28 04:46 anaconda-ks.cfg
-rw-------. 1 lxb  root  1003 Jul  4 13:18 lxb
-rw-r--r--. 1 root root 15032 Jul  4 08:33 outfile
-rw-r--r--. 1 root root   156 Jul  3 07:38 test
drwxr-xr-x. 2 root root    17 Jul  4 12:49 tushanbu
//修改111的用户和属组为lxb
[root@lnh ~]# chown -R lxb.lxb tushanbu/333
[root@lnh ~]# ll tushanbu/333
-rwxrwxrwx. 1 lxb lxb 0 Jul  4 12:49 tushanbu/333
//修改tushanbu目录下的333文件用户和属组为lxb
[root@lnh ~]# chown .lxb 222
[root@lnh ~]# ll
total 28
-rw-rw-rw-. 1 lxb  lxb      0 Jul  4 12:56 111
-rwxrwxrwx. 1 root lxb      0 Jul  4 12:20 222
-rw-------. 1 root root  1003 Jun 28 04:46 anaconda-ks.cfg
-rw-------. 1 lxb  root  1003 Jul  4 13:18 lxb
-rw-r--r--. 1 root root 15032 Jul  4 08:33 outfile
-rw-r--r--. 1 root root   156 Jul  3 07:38 test
drwxr-xr-x. 2 root root    17 Jul  4 12:49 tushanbu
//修改文件222的属组为lxb

3. 遮罩码

为什么在创建文件之后是默认许可644?

[En]

Why is the default permission 644 after the file is created?

为什么在创建目录之后是默认许可755?

[En]

Why is the default permission 755 after the directory is created?

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

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

文件最终的权限为:

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

777-umask
默认情况下,该文件不能有执行权限,如果计算结果有执行权限,则将其权限作为一个整体添加。

[En]

The file cannot have execute permission by default, and if the calculated result has execute permission, add its permission as a whole.

[root@lnh tushanbu]# umask
0022  //遮罩码
[root@lnh tushanbu]# umask 011
[root@lnh tushanbu]# mkdir 876
[root@lnh tushanbu]# touch 345
[root@lnh tushanbu]# ll
total 0
-rw-r--r--. 1 root root 0 Jul  4 13:54 123
drwxr-xr-x. 2 root root 6 Jul  4 13:54 234
-rwxrwxrwx. 1 lxb  lxb  0 Jul  4 12:49 333
-rw-rw-rw-. 1 root root 0 Jul  4 13:54 345
drwxrw-rw-. 2 root root 6 Jul  4 13:54 876
[root@lnh tushanbu]# ll
total 0
-rw-r--r--. 1 root root 0 Jul  4 13:54 123
drwxr-xr-x. 2 root root 6 Jul  4 13:54 234
-rw-rw-rw-. 1 root root 0 Jul  4 13:54 345
drwxrw-rw-. 2 root root 6 Jul  4 13:54 876
//因为文件的满权限是666,如果有x执行权限在那么就会整体权限加一,
目录的满权限是777,可以看见遮罩码是只能改变后面创建的文件或者目录权限,之前已经存在的不会改变

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

4.1 linux安全上下文

前提:流程有所有者和组;文档有所有者和组

[En]

Premise: the process has owners and groups; documents have owners and groups

是否可以将任何可执行程序文件作为进程启动,取决于启动器是否对该程序文件具有可执行权限。

[En]

Whether any executable program file can be started as a process depends on whether the initiator has executable permission to the program file.

作为流程启动后,流程的所有者是发起人,下级组是发起人所属的组

[En]

After starting as a process, the owner of the process is the initiator, and the subordinate group is the group to which the initiator belongs

进程访问文件的权限取决于进程的发起者:

[En]

The permissions of the process to access the file depend on the initiator of the process:

当进程的发起者是文件的所有者时,将应用文件所有者权限

[En]

When the initiator of the process is the owner of the file, the file owner permissions are applied

当进程的发起者是属于某个文件的组时,将应用该文件属于组的权限

[En]

When the initiator of a process is a group belonging to a file, the file belongs to group permissions are applied

应用文件”其它”权限

4.2 特殊权限

linux默认权限是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则。
SUID(4) //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主
chmod u+s file
chmod u-s file
//如果file本身原来就有执行权限,则SUID显示为s,否则显示为S

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

4755 //有SUID,文件权限为755
2755 //有SGID,文件权限为755
1755 //有Sticky,文件权限为755
//这里前面的4、2、1分别表示SUID、SGID、Sticky
SUID:

权限管理
权限管理
//可以看见sleep这个命令程序本来的属主是root,但是你在另外一个用户上面启动这个命令程序后它的进程属主变成了启动它的用户而不是root本来这个属主,不过你可以给这个命令程序赋予suid权限后,再次进行测试发现最终其属主还是root本身
//此处w后面出现一个小s代表赋予执行权限,如果是大S那么就是这条命令本来就没有执行权限

权限管理
//可以看见通过设置u-s可以取消那个权限也可以设置755权限后就没有suid权限然后这条执行命令的用户回到了lxb

SGID:

[root@lnh tushanbu]# mkdir abc
[root@lnh tushanbu]# ll abc
total 0
[root@lnh tushanbu]# touch abc/123
[root@lnh tushanbu]# ll abc/
total 0
-rw-r--r--. 1 root root 0 Jul  4 17:20 123
[root@lnh tushanbu]# chown .lxb abc/   //这里我们将abc的属组设置成为了lxb
[root@lnh tushanbu]# ll
total 0
drwxr-xr-x. 2 root lxb 17 Jul  4 17:20 abc
[root@lnh tushanbu]# touch abc/234
[root@lnh tushanbu]# ll abc/
total 0
-rw-r--r--. 1 root root 0 Jul  4 17:20 123
-rw-r--r--. 1 root root 0 Jul  4 17:21 234    //按道理说这里234的属组应该是lxb,但是我们的默认情况下会让root为属组
[root@lnh tushanbu]# chmod 2755 abc  //赋予abc这个命令sgid权限
[root@lnh tushanbu]# ll
total 0
drwxr-sr-x. 2 root lxb 28 Jul  4 17:21 abc
[root@lnh tushanbu]# touch abc/456
[root@lnh tushanbu]# ll abc/
total 0
-rw-r--r--. 1 root root 0 Jul  4 17:20 123
-rw-r--r--. 1 root root 0 Jul  4 17:21 234
-rw-r--r--. 1 root lxb  0 Jul  4 17:23 456  //可以看见456的属组还是lxb本身
//正常情况下我们就算是修改了属组但是默认下还是之前目录本身没有修改前的属组,但是加上sgid权限后可以把修改后的属组变成它修改后的属组
[root@lnh tushanbu]# ll
total 0
drwxr-sr-x. 2 root lxb 28 Jul  4 14:55 abc
[root@lnh tushanbu]# chmod g-x abc
[root@lnh tushanbu]# ll
total 0
drwxr-Sr-x. 2 root lxb 28 Jul  4 14:55 abc //没有执行权限是大写S
[root@lnh tushanbu]# chmod g+x abc
[root@lnh tushanbu]# ll
total 0
drwxr-sr-x. 2 root lxb 28 Jul  4 14:55 abc
//有执行权限是小写s

Sticky:

[root@lnh tmp]# ll /
total 16
lrwxrwxrwx.   1 root root    7 May 19  2020 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 Jun 27 21:10 boot
drwxr-xr-x.  20 root root 3140 Jun 30 04:30 dev
drwxr-xr-x.  77 root root 8192 Jul  4 13:01 etc
drwxr-xr-x.   5 root root   44 Jul  4 13:01 home
lrwxrwxrwx.   1 root root    7 May 19  2020 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 May 19  2020 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 May 19  2020 media
drwxr-xr-x.   2 root root    6 May 19  2020 mnt
drwxr-xr-x.   2 root root    6 Jul  4 13:17 opt
dr-xr-xr-x. 193 root root    0 Jun 29 18:58 proc
dr-xr-x---.   4 root root  258 Jul  4 14:45 root
drwxr-xr-x.  23 root root  660 Jun 29 18:58 run
lrwxrwxrwx.   1 root root    8 May 19  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 May 19  2020 srv
dr-xr-xr-x.  13 root root    0 Jun 29 18:58 sys
drwxrwxrwt.   7 root root  136 Jul  4 15:03 tmp
drwxr-xr-x.  12 root root  144 Jun 27 21:06 usr
drwxr-xr-x.  20 root root  278 Jun 27 21:10 var
//tmp有Sticky权限,就是说在这个公共目录中,你可以创建并且删除自己的东西,其他的还是需要管理员给予权限
[root@lnh tmp]# ll
total 8
-rw-r--r--. 1 root root  15 Jul  3 08:40 hello.out
-rwx------. 1 root root 701 Jun 27 21:09 ks-script-mnbhyjqk
[root@lnh tmp]# touch xbd
[root@lnh tmp]# ll
total 8
-rw-r--r--. 1 root root  15 Jul  3 08:40 hello.out
-rwx------. 1 root root 701 Jun 27 21:09 ks-script-mnbhyjqk
-rw-rw-rw-. 1 root root   0 Jul  4 15:06 xbd
[root@lnh tmp]# rm -f xbd
[root@lnh tmp]# ll
total 8
-rw-r--r--. 1 root root  15 Jul  3 08:40 hello.out
-rwx------. 1 root root 701 Jun 27 21:09 ks-script-mnbhyjqk
//可以删除自己的东西和修改自己的东西权限

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@lnh tmp]# ll
total 8
-rw-rw-rw-. 1 lxb  lxb    0 Jul  4 15:14 111
-rw-rw-rw-. 1 root root   0 Jul  4 15:14 222
-rw-r--r--. 1 root root  15 Jul  3 08:40 hello.out
-rwx------. 1 root root 701 Jun 27 21:09 ks-script-mnbhyjqk
[root@lnh tmp]# setfacl -m u:lxb:x 111 //设置lxb这个用户对111有执行权限
[root@lnh tmp]# getfacl 111
file: 111
owner: lxb
group: lxb
user::rw-
user:lxb:--x
group::rw-
mask::rwx
other::rw-
//可以查看是否更改成功
[root@lnh tmp]# setfacl -b 111
[root@lnh tmp]# getfacl 111
file: 111
owner: lxb
group: lxb
user::rw-
group::rw-
other::rw
//-b 清除了它的所有权限

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,运行哪些命令
别名必须为ALL,并且只能与大写字母组合,可以用感叹号反转

[En]

Aliases must be all and can only be combined with uppercase letters, which can be reversed with an exclamation point

别名分类:

用户别名:
User_Alias NETWORKADMIN =
用户的用户名
组名,使用%引导
您还可以使用已定义的其他用户别名

[En]

You can also use other user aliases that have been defined

主机别名:
Host_Alias =
主机名
IP地址
网络地址
其它主机别名
Runas别名:
Runas_Alias =
用户名
%组名
其它的Runas别名
命令别名:
Cmnd_Alias =
命令路径
目录(此目录中的所有命令)

[En]

Directory (all commands in this directory)

其它已定义的命令别名
//sudo命令语法:sudo [options] COMMAND
-V //显示版本编号
-h //会显示版本编号及指令的使用方式说明
-l //列出当前用户可以使用的所有sudo类命令
-v //因为sudo在第一次执行时或是在N分钟内没有执行(N默认为5)会问密码,这个参数
//是重新做一次确认,如果超过N分钟,也会问密码
-k //让认证信息失效,如果不指定-k,默认认证信息在5分钟后失效
-b //将要执行的指令放在后台执行
-u USERNAME //以指定的用户名执行命令,默认为root
通过visudo命令进入:

权限管理
//设置允许lxb用户使用/usr/sbin/useradd这个命令
[lxb@lnh ~]$ useradd  ml
useradd: Permission denied.

useradd: cannot lock /etc/passwd; try again later.

[lxb@lnh ~]$ sudo useradd ml

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 lxb:
Sorry, try again.

[sudo] password for lxb:
sudo: 1 incorrect password attempt
//要设置lxb的密码
[lxb@lnh ~]$ su - root
Password:
Last login: Mon Jul  4 15:50:37 CST 2022 on pts/1
[root@lnh ~]# echo "redhat" | passwd --stdin lxb
Changing password for user lxb.

passwd: all authentication tokens updated successfully.

[root@lnh ~]# su - lxb
Last login: Mon Jul  4 15:50:51 CST 2022 on pts/1
[lxb@lnh ~]$ sudo useradd ml
//因为刚刚输入了密码所以这里不用
[lxb@lnh ~]$ sudo userdel -r  ml
Sorry, user lxb is not allowed to execute '/sbin/userdel -r ml' as root on lnh.

//只能创建,不能删除用户
[lxb@lnh ~]$ sudo -V
Sudo version 1.8.29
Sudoers policy plugin version 1.8.29
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.29
//显示版本编号
[lxb@lnh ~]$ sudo -h
sudo - execute a command as another user

usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user]
            [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host]
            [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s]
            [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p
            prompt] [-T timeout] [-u user] file ...

Options:
  -A, --askpass                 use a helper program for password prompting
  -b, --background              run command in the background
  -B, --bell                    ring bell when prompting
  -C, --close-from=num          close all file descriptors >= num
  -E, --preserve-env            preserve user environment when running
                                command
      --preserve-env=list       preserve specific environment variables
  -e, --edit                    edit files instead of running a command
  -g, --group=group             run command as the specified group name or ID
  -H, --set-home                set HOME variable to target user's home dir
  -h, --help                    display help message and exit
  -h, --host=host               run command on host (if supported by plugin)
  -i, --login                   run login shell as the target user; a
                                command may also be specified
  -K, --remove-timestamp        remove timestamp file completely
  -k, --reset-timestamp         invalidate timestamp file
  -l, --list                    list user's privileges or check a specific
                                command; use twice for longer format
  -n, --non-interactive         non-interactive mode, no prompts are used
  -P, --preserve-groups         preserve group vector instead of setting to
                                target's
  -p, --prompt=prompt           use the specified password prompt
  -r, --role=role               create SELinux security context with
                                specified role
  -S, --stdin                   read password from standard input
  -s, --shell                   run shell as the target user; a command may
                                also be specified
  -t, --type=type               create SELinux security context with
                                specified type
  -T, --command-timeout=timeout terminate command after the specified time
                                limit
  -U, --other-user=user         in list mode, display privileges for user
  -u, --user=user               run command (or edit file) as specified user
                                name or ID
  -V, --version                 display version information and exit
  -v, --validate                update user's timestamp without running a
                                command
  --                            stop processing command line arguments
//&#x4F1A;&#x663E;&#x793A;&#x7248;&#x672C;&#x7F16;&#x53F7;&#x53CA;&#x6307;&#x4EE4;&#x7684;&#x4F7F;&#x7528;&#x65B9;&#x5F0F;&#x8BF4;&#x660E;
[lxb@lnh ~]$ sudo -l
[sudo] password for lxb:
Matching Defaults entries for lxb on lnh:
    !visiblepw, always_set_home, match_group_by_gid,
    always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME
    HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG
    LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION
    LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC
    LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS
    _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User lxb may run the following commands on lnh:
    (ALL) /usr/sbin/useradd
//&#x56E0;&#x4E3A;sudo&#x5728;&#x7B2C;&#x4E00;&#x6B21;&#x6267;&#x884C;&#x65F6;&#x6216;&#x662F;&#x5728;N&#x5206;&#x949F;&#x5185;&#x6CA1;&#x6709;&#x6267;&#x884C;&#xFF08;N&#x9ED8;&#x8BA4;&#x4E3A;5&#xFF09;&#x4F1A;&#x95EE;&#x5BC6;&#x7801;&#xFF0C;&#x8FD9;&#x4E2A;&#x53C2;&#x6570; &#x662F;&#x91CD;&#x65B0;&#x505A;&#x4E00;&#x6B21;&#x786E;&#x8BA4;&#xFF0C;&#x5982;&#x679C;&#x8D85;&#x8FC7;N&#x5206;&#x949F;&#xFF0C;&#x4E5F;&#x4F1A;&#x95EE;&#x5BC6;&#x7801;

7. 管理命令

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@lnh ~]# sleep 3
//&#x7761;&#x7720;3&#x79D2;
[root@lnh ~]# sleep 3;echo 123
123
//3&#x79D2;&#x540E;&#x6253;&#x5370;123
[root@lnh ~]# time sleep 3

real    0m3.021s
user    0m0.000s
sys 0m0.003s
//&#x7EDF;&#x8BA1;&#x8FD9;&#x4E2A;&#x547D;&#x4EE4;&#x6267;&#x884C;&#x7684;&#x65F6;&#x95F4;
[root@lnh ~]# whoami
root
//&#x6211;&#x662F;&#x8C01;
[root@lnh ~]# who am i
root     pts/0        2022-06-30 11:24 (192.168.222.1)
//&#x6211;&#x5728;&#x54EA;&#x91CC;&#x767B;&#x5F55;&#x7684;  &#x767B;&#x5F55;&#x7684;&#x65F6;&#x95F4;  &#x5728;&#x54EA;&#x4E2A;&#x4E3B;&#x673A;&#x4E0A;&#x9762;&#x767B;&#x5F55;&#x7684;
[root@lnh ~]# who
root     tty1         2022-06-29 23:00
root     pts/0        2022-06-30 11:24 (192.168.222.1)
//&#x6709;&#x54EA;&#x4E9B;&#x767B;&#x5F55;&#x4E86;&#x6211;&#x8FD9;&#x4E2A;&#x7EC8;&#x7AEF;
[root@lnh ~]# w
 15:55:29 up 20:56,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                Wed23   11:24m  0.02s  0.02s -bash
root     pts/0    192.168.222.1    11:24    1.00s  0.69s  0.00s w
&#x5728;&#x54EA;&#x91CC;&#x767B;&#x5F55;           &#x767B;&#x5F55;&#x7684;ip&#x5730;&#x5740;     &#x4EC0;&#x4E48;&#x65F6;&#x95F4;&#x70B9;  &#x767B;&#x5F55;&#x65F6;cpu&#x7684;&#x8FD0;&#x884C;&#x65F6;&#x95F4;  &#x8FD9;&#x4E2A;&#x5BB6;&#x4F19;&#x5728;&#x5E72;&#x5565;
[root@lnh ~]# last 111

wtmp begins Mon Jun 27 21:10:32 2022
last    //&#x663E;&#x793A;/var/log/wtmp&#x6587;&#x4EF6;&#xFF0C;&#x663E;&#x793A;&#x7528;&#x6237;&#x767B;&#x5F55;&#x5386;&#x53F2;&#x53CA;&#x7CFB;&#x7EDF;&#x91CD;&#x542F;&#x5386;&#x53F2;
[root@lnh ~]# last -n 111
root     pts/0        192.168.222.1    Mon Jul  4 15:43 - 15:49  (00:06)
root     pts/0        192.168.222.1    Mon Jul  4 15:40 - 15:42  (00:01)
root     pts/0        192.168.222.1    Mon Jul  4 14:20 - 14:45  (00:25)
root     pts/1        192.168.222.1    Mon Jul  4 11:43   still logged in
root     pts/2        192.168.222.1    Mon Jul  4 10:16 - 13:58  (03:41)
root     pts/0        192.168.222.1    Mon Jul  4 08:38 - 13:58  (05:19)
root     pts/3        192.168.222.1    Mon Jul  4 06:29 - 10:49  (04:19)
root     pts/1        192.168.222.1    Mon Jul  4 05:28 - 10:50  (05:21)
root     pts/2        192.168.222.1    Mon Jul  4 01:50 - 07:42  (05:51)
root     pts/2        192.168.222.1    Mon Jul  4 01:43 - 01:45  (00:01)
root     pts/0        192.168.222.1    Sun Jul  3 23:58 - 07:42  (07:44)
root     pts/2        192.168.222.1    Sun Jul  3 23:55 - 23:55  (00:00)
root     pts/0        192.168.222.1    Sun Jul  3 23:54 - 23:55  (00:00)
root     pts/1        192.168.222.1    Sun Jul  3 20:42 - 02:10  (05:28)
root     pts/0        192.168.222.1    Sun Jul  3 19:56 - 22:53  (02:57)
root     pts/0        192.168.222.1    Sun Jul  3 19:01 - 19:55  (00:54)
root     pts/0        192.168.222.1    Sun Jul  3 16:43 - 19:01  (02:17)
root     pts/1        192.168.222.1    Sun Jul  3 13:33 - 18:57  (05:24)
root     pts/0        192.168.222.1    Sun Jul  3 09:53 - 15:45  (05:52)
root     pts/1        192.168.222.1    Sun Jul  3 05:29 - 12:03  (06:33)
root     pts/0        192.168.222.1    Sun Jul  3 02:17 - 07:40  (05:22)
root     pts/1        192.168.222.1    Sat Jul  2 23:08 - 04:28  (05:19)
root     pts/0        192.168.222.1    Thu Jun 30 11:24 - 01:20 (2+13:56)
root     pts/1        192.168.222.1    Thu Jun 30 04:34 - 13:36  (09:02)
root     pts/1        192.168.222.1    Thu Jun 30 04:34 - 04:34  (00:00)
root     pts/1        192.168.222.1    Thu Jun 30 04:33 - 04:33  (00:00)
root     pts/1        192.168.222.1    Thu Jun 30 04:31 - 04:32  (00:00)
root     pts/0        192.168.222.1    Thu Jun 30 01:24 - 06:45  (05:21)
root     pts/1        192.168.222.1    Wed Jun 29 23:00 - 03:35  (04:34)
root     tty1                          Wed Jun 29 23:00    gone - no logout
root     pts/0        192.168.222.1    Wed Jun 29 18:59 - 01:13  (06:13)
reboot   system boot  4.18.0-257.el8.x Wed Jun 29 18:58   still running
root     pts/0        192.168.222.1    Tue Jun 28 03:56 - crash (1+15:02)
root     pts/3        192.168.222.1    Tue Jun 28 01:48 - 06:03  (04:15)
root     pts/2        192.168.222.1    Tue Jun 28 01:29 - 02:05  (00:35)
root     pts/0        192.168.222.1    Mon Jun 27 23:49 - 03:42  (03:53)
root     pts/1        192.168.222.1    Mon Jun 27 23:24 - 02:00  (02:35)
root     pts/1        192.168.222.1    Mon Jun 27 22:02 - 23:24  (01:22)
root     pts/1        192.168.222.1    Mon Jun 27 21:20 - 22:01  (00:41)
root     pts/0        192.168.222.1    Mon Jun 27 21:15 - 23:30  (02:15)
root     tty1                          Mon Jun 27 21:10 - crash (1+21:47)
reboot   system boot  4.18.0-257.el8.x Mon Jun 27 21:10   still running

wtmp begins Mon Jun 27 21:10:32 2022
//-n&#x663E;&#x793A;&#x76F8;&#x5173;&#x4FE1;&#x606F;
[root@lnh ~]# lastb
root     ssh:notty    192.168.222.1    Sun Jul  3 23:55 - 23:55  (00:00)

btmp begins Sun Jul  3 23:55:21 2022
[root@lnh ~]# lastb -n 111
root     ssh:notty    192.168.222.1    Sun Jul  3 23:55 - 23:55  (00:00)

btmp begins Sun Jul  3 23:55:21 2022
[root@lnh ~]# lastlog
Username         Port     From             Latest
root             pts/1                     Mon Jul  4 16:09:26 +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**
systemd-coredump                           **Never logged in**
systemd-resolve                            **Never logged in**
tss                                        **Never logged in**
polkitd                                    **Never logged in**
sssd                                       **Never logged in**
sshd                                       **Never logged in**
rngd                                       **Never logged in**
xxb                                        **Never logged in**
tsb              pts/0                     Sun Jul  3 19:52:58 +0800 2022
xxxb             pts/0                     Sun Jul  3 19:52:08 +0800 2022
tushanbu         pts/0                     Sun Jul  3 20:01:44 +0800 2022
lxb              pts/1                     Mon Jul  4 15:55:06 +0800 2022
ml                                         **Never logged in**
[root@lnh ~]# lastlog -u lxb
Username         Port     From             Latest
lxb              pts/1                     Mon Jul  4 15:55:06 +0800 2022
[root@lnh ~]# a=/opt/software/xx.tar.gz
[root@lnh ~]# basename $a
xx.tar.gz
[root@lnh ~]# dirname $a
/opt/software
//&#x663E;&#x793A;&#x8DEF;&#x5F84;&#x57FA;&#x540D;

Original: https://www.cnblogs.com/tushanbu/p/16456831.html
Author: 涂山布
Title: 权限管理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523167/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球