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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
用法:chmod [选项] ...模式[,模式] ...文件......
或:chmod [选项] ...八进制模式文件...
或:chmod [选项] ... --reference =参考文件文件......
将每个文件的模式更改为MODE。
使用--reference,将每个FILE的模式更改为RFILE的模式。

   -c, - 更改类似于详细信息,但仅在进行更改时报告
   -f, --  silent, -  quiet抑制大多数错误消息
   -v, --  verbose为每个处理的文件输出诊断
       --no-preserve-root不要特别处理'/'(默认值)
       --preserve-root无法在'/'上递归操作
       --reference = RFILE使用RFILE的模式而不是MODE值
   -R, - 递归地递归更改文件和目录
      --help显示此帮助信息并退出
      --version显示版本信息并退出
修改某类用户或某些类用户权限:
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,.....
每个MODE的形式为'[ugoa] *([-+ =]([rwxXst] * | [ugo]))+ | [-+=] [0-7] +'。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@wenhs5479 ~]# ll
总用量 8
-rw-r--r--. 1 root root    0 3月   5 18:35 a
-rw-------. 1 root root 1714 3月   4 17:46 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 3月   5 18:35 b
-rw-r--r--. 1 root root 1762 3月   4 17:50 initial-setup-ks.cfg
drwxr-xr-x. 3 root root   15 3月   5 19:11 w
[root@wenhs5479 ~]# chmod 777 a
[root@wenhs5479 ~]# ll
总用量 8
-rwxrwxrwx. 1 root root    0 3月   5 18:35 a
-rw-------. 1 root root 1714 3月   4 17:46 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 3月   5 18:35 b
-rw-r--r--. 1 root root 1762 3月   4 17:50 initial-setup-ks.cfg
drwxr-xr-x. 3 root root   15 3月   5 19:11 w
[root@wenhs5479 ~]# chmod u-x,g-w,o-r a
[root@wenhs5479 ~]# ll
总用量 8
-rw-r-x-wx. 1 root root    0 3月   5 18:35 a
-rw-------. 1 root root 1714 3月   4 17:46 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 3月   5 18:35 b
-rw-r--r--. 1 root root 1762 3月   4 17:50 initial-setup-ks.cfg
drwxr-xr-x. 3 root root   15 3月   5 19:11 w
  1. 切换到shell脚本所在的目录,执行

  2. 以绝对路径的方式执行

  3. 直接用bash或sh执行

  4. 现行的shell中执行

对于第4种不会创建子进程,而是在父进程中直接执行。

上面的差异是因为子进程不能改变父进程的执行环境,所以CD(内建命令,只有内建命令才可以改变shell 的执行环境)没有成功,但是第4种没有子进程,所以CD成功。

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

chown命令只有管理员可以使用。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[openstack@wenhs5479 ~]$ chown root.root w
chown: 正在更改"w" 的所有者: 不允许的操作
[openstack@wenhs5479 ~]$ sudo chown root.root w

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] openstack 的密码:
openstack 不在 sudoers 文件中。此事将被报告。
[openstack@wenhs5479 ~]$ ll
总用量 2244
-rwsr-xr-x. 1 openstack openstack 2294208 3月   5 19:30 vim
-rw-rw-r--. 1 openstack openstack       0 3月   6 09:31 w
[openstack@wenhs5479 ~]$ 
由此可见,普通账户无法更改文件属主属组
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
用法:chown [选项] ... [所有者] [:[组]]文件......
或:chown [选项] ... --reference =参考文件文件......
将每个文件的所有者和/或组更改为所有者和/或组。
使用--reference,将每个FILE的所有者和组更改为RFILE的所有者和组。

  -c, --changes	类似于详细信息,但仅在进行更改时报告
  -f, --silent, --quiet	抑制大多数错误消息
  -v, --verbose	为每个处理的文件输出诊断
      --deference	会影响每个符号链接的引用(这是
                         默认情况下),而不是符号链接本身
  -h, --no-dereference	影响符号链接而不是任何引用文件
                         (仅适用于可以更改的系统
                         符号链接的所有权)
      --from =当前所有者:当前所属组
                         只当每个文件的所有者和组符合选项所指定时才更改所
有者和组。其中一个可以省略,这时已省略的属性就不
需要符合原有的属性。
      --no-preserve-root	不要特别处理'/'(默认值)
      --preserve-root	无法在'/'上递归操作
      --reference = RFILE使用RFILE的所有者和组而不是
                         指定OWNER:GROUP值
  -R, - 递归地对文件和目录进行递归操作

以下选项修改-R时遍历层次结构的方式
选项也被指定。如果指定了多个,则仅指定最终
一个生效。

  -H		如果命令行参数是符号链接到一个目录,遍历它
  -L		遍历到目录的每个符号链接遇到
  -P		不遍历任何符号链接(默认)

      --help显示此帮助信息并退出
      --version显示版本信息并退出

如果失踪,所有者不变。如果遗失,则组不变,但已更改
如果在符号所有者之后隐含':',则登录组。
OWNER和GROUP可以是数字也可以是符号。

chown root /u		将/u的属主更改为“root”。
chown root:staff /u		和上面类似,但同时也将其属更改为“staff”。
chown -hR root /u		将/u及其子目录下所有文件的属主更改为“root”。

示例下面练习题比较全

2.3 修改文件的属组命令chgrp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
用法:chgrp [选项] ...用户组文件...
或:chgrp [选项] ... --reference =参考文件文件......
将每个FILE的组更改为GROUP。
使用--reference,将每个FILE的组更改为RFILE的组。

  -c, - 更改类似于详细信息,但仅在进行更改时报告
  -f, --silent, --quiet		抑制大多数错误消息
  -v, --verbose	为每个处理的文件输出诊断
      --deference	会影响每个符号链接的引用(这是
                         默认情况下),而不是符号链接本身
  -h, --no-dereference	影响符号链接而不是任何引用文件
                         (仅适用于可以更改的系统
                         符号链接的所有权)
      --no-preserve-root	不要特别处理'/'(默认值)
      --preserve-root	无法在'/'上递归操作
      --reference = RFILE使用RFILE的组而不是指定
                         GROUP值
  -R, --recursive	地对文件和目录进行递归操作

以下选项修改-R时遍历层次结构的方式
选项也被指定。如果指定了多个,则仅指定最终
一个生效。

  -H	如果命令行参数是符号链接到一个目录,遍历它
  -L	遍历到目录的每个符号链接遇到
  -P	不遍历任何符号链接(默认)

      --help	显示此帮助信息并退出
      --version	显示版本信息并退出
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[root@wenhs5479 ~]# chgrp openstack a
[root@wenhs5479 ~]# ll
总用量 8
-rw-r-x-wx. 1 root openstack    0 3月   5 18:35 a
-rw-------. 1 root root      1714 3月   4 17:46 anaconda-ks.cfg
drwxr-xr-x. 2 root root         6 3月   5 18:35 b
-rw-r--r--. 1 root root      1762 3月   4 17:50 initial-setup-ks.cfg
drwxr-xr-x. 3 root root        15 3月   5 19:11 w

只能更改属组,较为鸡肋,推荐使用chown,方便快捷

3. 遮罩码

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

  • 因为有遮罩码的存在,所以默认权限是644和755,遮罩码用来遮盖一些权限,保证文件的安全性
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@wenhs5479 ~]# touch a
[root@wenhs5479 ~]# ll
总用量 8
-rw-r--r--. 1 root root    0 3月   5 18:35 a
-rw-------. 1 root root 1714 3月   4 17:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 1762 3月   4 17:50 initial-setup-ks.cfg
[root@wenhs5479 ~]# mkdir b
[root@wenhs5479 ~]# ll
总用量 8
-rw-r--r--. 1 root root    0 3月   5 18:35 a
-rw-------. 1 root root 1714 3月   4 17:46 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 3月   5 18:35 b
-rw-r--r--. 1 root root 1762 3月   4 17:50 initial-setup-ks.cfg
[root@wenhs5479 ~]# 

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

1
2
[root@wenhs5479 ~]# umask 
0022    \\默认遮罩码

umask: 用法:umask [-p] [-S] [模式]

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

文件最终的权限为:

  • 666-umask

目录最终的权限为:

  • 777-umask

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

修改的权限不在遮罩码范围类,也就是改什么权限,就是什么权限

chattr锁定文件:

  • chattr +i 文件路径锁定文件,不得移动删除等
  • chattr -i 文件路径 解锁文件

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

4.1 linux安全上下文

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

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

4.2 特殊权限

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

SUID(4)(给程序的特殊权限) //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主

1
2
3
chmod u+s file
chmod u-s file
如果file本身原来就有执行权限,则SUID显示为s,否则显示为S
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@wenhs5479 ~]# chown openstack.openstack /home/openstack/vim 
[root@wenhs5479 ~]# ls -al /home/openstack/
总用量 2256
drwx------. 3 openstack openstack      89 3月   5 19:30 .
drwxr-xr-x. 4 root      root           35 3月   5 18:21 ..
-rw-------. 1 openstack openstack      18 3月   5 18:21 .bash_logout
-rw-------. 1 openstack openstack     193 3月   5 18:21 .bash_profile
-rw-------. 1 openstack openstack     231 3月   5 18:21 .bashrc
drwx------. 4 openstack openstack      39 3月   5 18:21 .mozilla
-rwxr-xr-x. 1 openstack openstack 2294208 3月   5 19:30 vim
[root@wenhs5479 ~]# chmod 4755 /home/openstack/vim 
[root@wenhs5479 ~]# ls -al /home/openstack/
总用量 2256
drwx------. 3 openstack openstack      89 3月   5 19:30 .
drwxr-xr-x. 4 root      root           35 3月   5 18:21 ..
-rw-------. 1 openstack openstack      18 3月   5 18:21 .bash_logout
-rw-------. 1 openstack openstack     193 3月   5 18:21 .bash_profile
-rw-------. 1 openstack openstack     231 3月   5 18:21 .bashrc
drwx------. 4 openstack openstack      39 3月   5 18:21 .mozilla
-rwsr-xr-x. 1 openstack openstack 2294208 3月   5 19:30 vim
[root@wenhs5479 ~]# /home/openstack/vim s
------------------------------------------------------------------------
[root@wenhs5479 ~]# ps -ef |grep vim
opensta+ 116362 109853  0 19:32 pts/1    00:00:00 /home/openstack/vim s
root     116420 116367  0 19:32 pts/2    00:00:00 grep --color=auto vim

SGID(2)(给目录的特殊权限) //运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组

1
2
3
4
5
6
默认情况下,用户创建文件时,其属组为此用户所属的基本组;
一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组 \
为此设定了SGID的目录的属组
chmod g+s DIR
chmod g-s DIR
如果file本身原来就有执行权限,则SGID显示为s,否则显示为S
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@wenhs5479 ~]# chmod g+s w
[root@wenhs5479 ~]# ll
总用量 8
-rw-r-x-wx. 1 root      openstack    0 3月   5 18:35 a
-rw-------. 1 root      root      1714 3月   4 17:46 anaconda-ks.cfg
drwxr-xr-x. 2 root      root         6 3月   5 18:35 b
-rw-r--r--. 1 root      root      1762 3月   4 17:50 initial-setup-ks.cfg
drwxr-sr-x. 3 openstack openstack   15 3月   5 19:11 w
[root@wenhs5479 ~]# cd w
[root@wenhs5479 w]# ls
e
[root@wenhs5479 w]# ll
总用量 0
drwxr-xr-x. 3 openstack openstack 15 3月   5 19:11 e
[root@wenhs5479 w]# touch 1
[root@wenhs5479 w]# ll
总用量 0
-rw-r--r--. 1 root      openstack  0 3月   6 09:44 1
drwxr-xr-x. 3 openstack openstack 15 3月   5 19:11 e
[root@wenhs5479 w]# mkdir 2
[root@wenhs5479 w]# ll
总用量 0
-rw-r--r--. 1 root      openstack  0 3月   6 09:44 1
drwxr-sr-x. 2 root      openstack  6 3月   6 09:45 2
drwxr-xr-x. 3 openstack openstack 15 3月   5 19:11 e
[root@wenhs5479 w]# 

Sticky(1) (给目录的特殊权限) //在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件

1
2
3
chmod o+t DIR
chmod o-t DIR
如果DIR本身原来就有执行权限,则Sticky显示为t,否则显示为T
1
2
3
4
5
4755    //有SUID,文件权限为755
2755    //有SGID,文件权限为755
1755    //有Sticky,文件权限为755
7755    //有SUID、SGID、Sticky,文件权限为755
这里前面的4、2、1分别表示SUID、SGID、Sticky
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[test@wenhs5479 test]$ ll
总用量 0
-rw-rw-r-T. 1 openstack openstack 0 3月   6 09:51 openstack
-rw-rw-r--. 1 test      test      0 3月   6 09:53 test2
[test@wenhs5479 test]$ rm -rf openstack 
rm: 无法删除"openstack": 不允许的操作
[test@wenhs5479 test]$ sudo rm -rf openstack 
[sudo] test 的密码:
[test@wenhs5479 test]$ ll
总用量 0
-rw-rw-r--. 1 test test 0 3月   6 09:53 test2
[test@wenhs5479 test]$ 

管理员的权限是一个流氓用户,一般情况下都可以为所欲为,普通账号的话,无法删除别人创建的东西

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[test@wenhs5479 test]$ touch openstack
[test@wenhs5479 test]$ sudo chown openstack.openstack openstack 
[test@wenhs5479 test]$ ll
总用量 0
-rw-rw-r--. 1 openstack openstack 0 3月   6 09:57 openstack
-rw-rw-r--. 1 test      test      0 3月   6 09:53 test2
[test@wenhs5479 test]$ sudo chmod 7777 openstack 
[test@wenhs5479 test]$ ll
总用量 0
-rwsrwsrwt. 1 openstack openstack 0 3月   6 09:57 openstack
-rw-rw-r--. 1 test      test      0 3月   6 09:53 test2
[test@wenhs5479 test]$ sudo rm -rf openstack 
[test@wenhs5479 test]$ ll
总用量 0
-rw-rw-r--. 1 test test 0 3月   6 09:53 test2
[test@wenhs5479 test]$ 

5. 文件系统访问控制列表facl

facl(Filesystem Access Control List),利用文件扩展保存额外的访问控制权限。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
语法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
    -m      //设定,修改文件的当前ACL
        u:UID:perm
        g:GID:perm
    setfacl -m u:test:rw file
    setfacl -m g:test:rw file
    如果要为某个目录设定默认的访问控制列表,只需要设定时在u或g前面加上d即可。 如://setfacl -dm u:test:rw file,此时在此目录中创建的文件均继承此访问控制列表所设置的权限
    -x      //取消,从文件的ACL中删除条目
        u:UID
        g:GID
    setfacl -x u:test file
    setfacl -x g:test file
    -b      //Remove all ,删除所有扩展ACL条目
     -d, --default	操作适用于默认ACL    
语法:getfacl [-aceEsRLPtpndvh] file ...
getfacl file


文件权限应用次序:
默认情况下:
    Owner --> Group --> Other
有设置facl的情况下:
    Owner --> facl,user --> Group --> facl,group --> Other
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[root@wenhs5479 ~]# setfacl -m u:openstack:rwx jbgsn 
[root@wenhs5479 ~]# ll
总用量 8
-rwxrwxrwx. 1 root root 1714 3月   4 17:46 anaconda-ks.cfg
-rwxrwxrwx. 1 root root 1762 3月   4 17:50 initial-setup-ks.cfg
-rw-rwxr--+ 1 root root    0 3月   6 10:29 jbgsn
drwxr-xr-x. 2 root root    6 3月   6 10:28 wenhs
[root@wenhs5479 ~]# getfa
getfacl   getfattr  
[root@wenhs5479 ~]# getfacl jbgsn 
# file: jbgsn
# owner: root
# group: root
user::rw-
user:openstack:rwx
group::r--
mask::rwx
other::r--
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[root@wenhs5479 ~]# setfacl -x u:openstack jbgsn 
[root@wenhs5479 ~]# ll
总用量 8
-rwxrwxrwx. 1 root root 1714 3月   4 17:46 anaconda-ks.cfg
-rwxrwxrwx. 1 root root 1762 3月   4 17:50 initial-setup-ks.cfg
-rw-r--r--+ 1 root root    0 3月   6 10:29 jbgsn
drwxr-xr-x. 2 root root    6 3月   6 10:28 wenhs
[root@wenhs5479 ~]# getfacl jbgsn 
# file: jbgsn
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@wenhs5479 ~]# setfacl -b jbgsn 
[root@wenhs5479 ~]# ll
总用量 8
-rwxrwxrwx. 1 root root 1714 3月   4 17:46 anaconda-ks.cfg
-rwxrwxrwx. 1 root root 1762 3月   4 17:50 initial-setup-ks.cfg
-rw-r--r--. 1 root root    0 3月   6 10:29 jbgsn
drwxr-xr-x. 2 root root    6 3月   6 10:28 wenhs
[root@wenhs5479 ~]# getfacl jbgsn 
# file: jbgsn
# owner: root
# group: root
user::rw-
group::r--
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别名
  • 命令别名:
    • Cmnd_Alias =
    • 命令路径
    • 目录(此目录内的所有命令)
    • 其它已定义的命令别名
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
sudo - 以其他用户身份执行一条命令

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 ...

选项:
  -A, --askpass                 使用助手程序进行密码提示
  -b, --background              在后台运行命令
  -C, --close-from=num          关闭所有 >= num 的文件描述符
  -E, --preserve-env            在执行命令时保留用户环境
      --preserve-env=list       保留特定的环境变量
  -e, --edit                    编辑文件而非执行命令
  -g, --group=group             以指定的用户组或 ID 执行命令
  -H, --set-home                将 HOME 变量设为目标用户的主目录。
  -h, --help                    显示帮助消息并退出
  -h, --host=host               在主机上运行命令(如果插件支持)
  -i, --login                   以目标用户身份运行一个登录 shell;可同时指定一条命令
  -K, --remove-timestamp        完全移除时间戳文件
  -k, --reset-timestamp         无效的时间戳文件,默认认证信息在5分钟后失效
  -l, --list                    列出用户权限或检查某个特定命令;对于长格式,使用两次
  -n, --non-interactive         非交互模式,不提示
  -P, --preserve-groups         保留组向量,而非设置为目标的组向量
  -p, --prompt=prompt           使用指定的密码提示
  -r, --role=role               以指定的角色创建 SELinux 安全环境
  -S, --stdin                   从标准输入读取密码
  -s, --shell                   以目标用户运行 shell;可同时指定一条命令
  -t, --type=type               以指定的类型创建 SELinux 安全环境
  -T, --command-timeout=timeout 在达到指定时间限制后终止命令
  -U, --other-user=user         在列表模式中显示用户的权限
  -u, --user=user               以指定用户或 ID 运行命令(或编辑文件),默认为root
  -V, --version                 显示版本信息并退出
  -v, --validate                更新用户的时间戳而不执行命令,因为sudo在第一次执行时或是在N分钟内没有执行(N默认为5)会问密码,这个参数,是重新做一次确认,如果超过N分钟,也会问密码
  --                            停止处理命令行参数

7. 管理命令

1
2
3
4
5
6
7
w   //显示当前登录到系统的用户有哪些,以及其正在做什么 
[root@wenhs5479 ~]# w
 18:50:08 up 11:16,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
test     :0       :0               一17   ?xdm?   5:31   0.49s /usr/libexec/gnome-session-binary --session gnome-classic
root     pts/1    192.168.131.100  17:51    0.00s  0.48s  0.04s w
root     pts/0    192.168.131.100  13:59    1:45m  0.26s  0.26s -bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
sleep   //睡眠,写脚本为防止上一个命令没执行完下一命令就开始执行时可以加上sleep #,表示停顿#秒后再执行后面的命令
sleep NUMBER[SUFFIX]...
SUFFIX:
      s:秒,默认
      m:分
      h:小时
      d:天

[root@wenhs5479 ~]# echo wenhs;sleep 5s;echo qingjiubaba
wenhs
qingjiubaba
[root@wenhs5479 ~]# 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
last    //显示/var/log/wtmp文件,显示用户登录历史及系统重启历史                
-n #        //显示最近#次的相关信息  

[root@wenhs5479 ~]# last
root     pts/1        192.168.131.100  Tue Mar  5 17:51   still logged in   
root     pts/0        192.168.131.100  Tue Mar  5 13:59   still logged in   
root     pts/3        192.168.131.100  Tue Mar  5 09:51 - 15:54  (06:02)    
root     pts/2        192.168.131.100  Tue Mar  5 09:06 - 15:54  (06:47)    
root     pts/1        192.168.131.100  Tue Mar  5 09:05 - 11:05  (02:00)    
test     pts/1        :0               Tue Mar  5 09:05 - 09:05  (00:00)    
root     pts/0        192.168.131.100  Mon Mar  4 14:24 - 11:04  (20:39)    
test     pts/0        :0               Mon Mar  4 14:23 - 14:24  (00:00)    
root     pts/1        192.168.131.100  Mon Mar  4 09:53 - 16:34  (06:40)    
test     pts/0        :0               Mon Mar  4 09:52 - 09:55  (00:02)    
test     :0           :0               Mon Mar  4 17:52   still logged in   
reboot   system boot  3.10.0-957.el7.x Mon Mar  4 17:50 - 18:54 (1+01:04)   

wtmp begins Mon Mar  4 17:50:11 2019
[root@wenhs5479 ~]# 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
lastb   //显示/var/log/btmp文件,显示用户错误的登录尝试                
-n #        //显示最近#次的相关信息  

[root@wenhs5479 ~]# lastb

btmp begins Mon Mar  4 17:50:18 2019
[root@wenhs5479 ~]# lastb -n 10

btmp begins Mon Mar  4 17:50:18 2019
[root@wenhs5479 ~]# 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
lastlog //显示每个用户最近一次成功登录信息                
-u username     //显示特定用户最近的登录信息      

[root@wenhs5479 ~]# lastlog 
用户名           端口     来自             最后登陆时间
root             pts/1    192.168.131.100  二 3月  5 17:51:22 +0800 2019
bin                                        **从未登录过**
daemon                                     **从未登录过**
adm                                        **从未登录过**
lp                                         **从未登录过**
sync                                       **从未登录过**
shutdown                                   **从未登录过**
halt                                       **从未登录过**
mail                                       **从未登录过**
operator                                   **从未登录过**
games                                      **从未登录过**
ftp                                        **从未登录过**
nobody                                     **从未登录过**
systemd-network                            **从未登录过**
dbus                                       **从未登录过**
polkitd                                    **从未登录过**
libstoragemgmt                             **从未登录过**
colord                                     **从未登录过**
rpc                                        **从未登录过**
saned                                      **从未登录过**
gluster                                    **从未登录过**
amandabackup                               **从未登录过**
saslauth                                   **从未登录过**
abrt                                       **从未登录过**
rtkit                                      **从未登录过**
pulse                                      **从未登录过**
radvd                                      **从未登录过**
unbound                                    **从未登录过**
chrony                                     **从未登录过**
rpcuser                                    **从未登录过**
nfsnobody                                  **从未登录过**
qemu                                       **从未登录过**
tss                                        **从未登录过**
usbmuxd                                    **从未登录过**
geoclue                                    **从未登录过**
ntp                                        **从未登录过**
sssd                                       **从未登录过**
setroubleshoot                             **从未登录过**
gdm                                        **从未登录过**
gnome-initial-setup :0                        一 3月  4 17:50:45 +0800 2019
sshd                                       **从未登录过**
avahi                                      **从未登录过**
postfix                                    **从未登录过**
tcpdump                                    **从未登录过**
test             pts/0                     二 3月  5 16:47:27 +0800 2019
openstack        pts/1                     二 3月  5 18:21:56 +0800 2019

[root@wenhs5479 ~]# lastlog -u test
用户名           端口     来自             最后登陆时间
test             pts/0                     二 3月  5 16:47:27 +0800 2019
[root@wenhs5479 ~]# 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
basename        //显示路径最后文件名  
dirname			//显示目录名称

[root@wenhs5479 ~]# mkdir -p w/e/n/h/s/;touch w/e/n/h/s/1.txt
[root@wenhs5479 ~]# ls
a  anaconda-ks.cfg  b  initial-setup-ks.cfg  w
[root@wenhs5479 ~]# basename w/e/n/h/s/1.txt 
1.txt
[root@wenhs5479 ~]# dirname w/e/n/h/s/1.txt 
w/e/n/h/s
[root@wenhs5479 ~]#

示例:


1、新建一个没有家目录的用户openstack

1
2
3
4
5
6
[root@wenhs5479 ~]# useradd -M  openstack
[root@wenhs5479 ~]# su - openstack
su: 警告:无法更改到 /home/openstack 目录: 没有那个文件或目录
-bash-4.2$ pwd
/root
-bash-4.2$ 

2、复制/etc/skel为/home/openstack

1
2
3
4
5
6
7
8
[root@wenhs5479 ~]# cp -r /etc/skel/ /home/openstack/
[root@wenhs5479 ~]# ls /home/
openstack  test
[root@wenhs5479 ~]# su - openstack
上一次登录:二 3月  5 17:56:51 CST 2018pts/1 上
[openstack@wenhs5479 ~]$ pwd
/home/openstack
[openstack@wenhs5479 ~]$ 

3、改变/home/openstack及其内部文件的属主属组均为openstack

1
2
3
4
5
6
7
8
9
[root@wenhs5479 ~]# chown -R openstack.openstack /home/openstack/
[root@wenhs5479 ~]# ls -al /home/openstack/
总用量 12
drwxr-xr-x. 3 openstack openstack  78 3月   5 18:02 .
drwxr-xr-x. 4 root  root   31 3月   5 18:02 ..
-rw-r--r--. 1 openstack openstack  18 3月   5 18:02 .bash_logout
-rw-r--r--. 1 openstack openstack 193 3月   5 18:02 .bash_profile
-rw-r--r--. 1 openstack openstack 231 3月   5 18:02 .bashrc
drwxr-xr-x. 4 openstack openstack  39 3月   5 18:02 .mozilla

4、设置/home/openstack及其内部的文件,属组和其它用户没有任何访问权限

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
[root@wenhs5479 ~]# chmod -R g-rwx /home/openstack/
[root@wenhs5479 ~]# chmod -R o-rwx /home/openstack/
[root@wenhs5479 ~]# ls -al /home/openstack/
总用量 12
drwx------. 3 openstack openstack  78 3月   5 18:21 .
drwxr-xr-x. 4 root      root       35 3月   5 18:21 ..
-rw-------. 1 openstack openstack  18 3月   5 18:21 .bash_logout
-rw-------. 1 openstack openstack 193 3月   5 18:21 .bash_profile
-rw-------. 1 openstack openstack 231 3月   5 18:21 .bashrc
drwx------. 4 openstack openstack  39 3月   5 18:21 .mozilla
[root@wenhs5479 ~]# ls -al /home/
总用量 4
drwxr-xr-x.  4 root      root        35 3月   5 18:21 .
dr-xr-xr-x. 17 root      root       224 3月   4 17:44 ..
drwx------.  3 openstack openstack   78 3月   5 18:21 openstack
drwx------. 16 test      test      4096 3月   5 09:56 test
[root@wenhs5479 ~]#