Linux常用命令-用户与权限类

1.Linux常用命令(四)

1.用户管理命令

useradd 用户名 为系统创建普通用户

系统在创建一个用户时,系统会操作/etc/passwd文件和/etc/shadow文件,变更文件中的相关内容;
  • -u 数字 指定用户UID(系统内唯一,不允许冲突。)
  • -g 组名 指定用户的默认用户组(若使用-g指定基本组,那么基本组必须先存在于系统)
若不指定基本组,则系统默认会创建一个与用户名相同的用户组作为该用户的基本组;
  • -G 组名 指定用户的附加用户组(可以添加多个组,组名间用 , 隔开)
  • -d 家目录 指定创建用户家目录
  • -c "注释内容" 指定创建用户的注释信息
  • -r 创建系统用户,默认无家目录
  • -s 命令解释器 指定用户所使用的命令解释器
  • -M 不为用户创建家目录
-Ms 一般一起使用,用于创建虚拟用户
[root@aspen ~]# useradd -u 666 -Ms /sbin/nologin VitualWeb
[root@aspen ~]# tail -3 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
VitualWeb:x:666:1000::/home/VitualWeb:/sbin/nologin
[root@aspen ~]# ls /home/
[root@aspen ~]# su - VitualWeb
su: warning: cannot change directory to /home/VitualWeb: No such file or directory
This account is currently not available.

userdel 用户名 删除指定用户(默认不删除用户的家目录和邮箱)

  • -r 删除用户的家目录及邮箱
在实际生产环境中删除用户,一般将该用户在/etc/passwd文件中注释,而不是真正的删除该用户
[root@aspen ~]# userdel stu05
[root@aspen ~]# userdel -r stu04
[root@aspen ~]# ls /home/
aspen  stu01  stu02  stu03  stu05
[root@aspen ~]# tail -7 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
VitualWeb:x:666:1000::/home/VitualWeb:/sbin/nologin
aspen:x:1000:1001::/home/aspen:/bin/bash
stu01:x:1001:1002::/home/stu01:/bin/bash
stu02:x:1002:1003::/home/stu02:/bin/bash
stu03:x:1003:1004::/home/stu03:/bin/bash

usermod 用户名 修改指定定用户信息

  • -u 数字 指定修改的用户UID(系统内唯一,不允许冲突。)
  • -g 组名 指定修改用户的默认用户组
  • -G 组名 指定修改用户的附加用户组(覆盖之前的附加组)
  • -aG 组名 指定修改用户的附加用户组(追加至之前的附加组)
  • -m 迁移家目录
  • -d 家目录 指定修改用户家目录
-md 常一起使用,用于迁移用户家目录;
  • -c "注释内容" 指定修改用户的注释信息
  • -l "登录名" 指定修改用户登录名称
  • -L 指定锁定的用户
  • -U 指定解锁的用户
[root@aspen ~]# tail -1 /etc/passwd
stu03:x:1003:1004::/home/stu03:/bin/bash
[root@aspen ~]# usermod -u 2019 -s /sbin/nologin stu03
[root@aspen ~]# tail -1 /etc/passwd
stu03:x:2019:1004::/home/stu03:/sbin/nologin

id 用户名 查看指定用户UID,GID以及归属用户组(默认显示当前用户的相关ID信息)

[root@aspen ~]# id stu02
uid=1002(stu02) gid=1003(stu02) groups=1003(stu02)
[root@aspen ~]# tail -2 /etc/passwd | head -1
#stu02:x:1002:1003::/home/stu02:/bin/bash
[root@aspen ~]# id stu02
id: stu02: no such user

groupadd 组名 为系统创建用户组

组账户信息保存在/etc/gshadow文件和/etc/group文件中;
基本组:用户只能有1个基本组,创建时可通过-g选项指定;若未指定则默认创建一个与用户同名的组。
附加组:用户可以有多个附加组,创建时可通过-G选项指定;当用户基本组无法满足授权要求时,可以将用户加入有权限的附加组,用户顺势继承附加组的权限。
  • -r 创建系统用户组
  • -g 数字 指定用户组GID(系统内唯一,不允许冲突。)
[root@aspen ~]# groupadd -g 2000 www
[root@aspen ~]# grep www /etc/group
www:x:2000:
[root@aspen ~]# useradd -Ms /sbin/nologin -g www -u 2000 www
[root@aspen ~]# grep www /etc/passwd
www:x:2000:2000::/home/www:/sbin/nologin

groupdel 组名 删除用户组

默认删除私有组(即创建用户时,系统自动创建的与用户同名的用户组)
一般情况下,使用userdel指令删除用户时,私有组就会被一起删除。
若要删除基本组,需要先删除基本组中的用户,才可以删除基本组
[root@Tech ~]# id www
id: ‘www’: no such user
[root@Tech ~]# grep www /etc/group
www:x:2000:
[root@Tech ~]# groupdel www
[root@Tech ~]# grep www /etc/group
[root@Tech ~]# useradd test
[root@Tech ~]# grep test /etc/group
test:x:1003:
[root@Tech ~]# groupdel test
groupdel: cannot remove the primary group of user 'test'
[root@Tech ~]# userdel test
[root@Tech ~]# grep test /etc/group

groupmod 组名 修改用户组

  • -g 数字 修改组ID
  • -n 名称 修改组名称
[root@Tech ~]# grep Young /etc/group
Young:x:1000:
[root@Tech ~]# grep Young /etc/group
Young:x:3000:
[root@Tech ~]# groupmod -n ASPEN Young
[root@Tech ~]# grep 3000 /etc/group
ASPEN:x:3000:

passwd 用户名 为指定用户设定/更改密码(默认修改当前用户密码)

  • --stdin 从标准输入获取密码(非交互式设置密码)
--stdin参数仅root用户可用
普通用户仅能更改自身密码;并且对密码的长度(8位以上)复杂性有一定要求;
[root@aspen ~]# passwd aspen 
Changing password for user aspen.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@aspen ~]# echo 123456 | passwd aspen --stdin
Changing password for user aspen.
passwd: all authentication tokens updated successfully.
[aspen@aspen ~]$ passwd --stdin
Only root can do that.
[root@aspen ~]# echo stu{01..5}| xargs -n1 | sed 's#.*#useradd & \&\& p=`tr -cd 'a-zA-Z0-9' </dev/urandom|head -c 8`  \&\& echo $p|passwd & --stdin \&\& echo $p & >>/root/password.txt #g' | bash
Changing password for user stu01.
passwd: all authentication tokens updated successfully.
Changing password for user stu02.
passwd: all authentication tokens updated successfully.
Changing password for user stu03.
passwd: all authentication tokens updated successfully.
Changing password for user stu04.
passwd: all authentication tokens updated successfully.
Changing password for user stu05.
passwd: all authentication tokens updated successfully.
[root@aspen ~]# cat ./password.txt 
nqZCzqi0 stu01
zsqpDoZB stu02
XK1SMRDk stu03
H3KL1uW0 stu04
Re5PpHW1 stu05

mkpasswd 生产随机字符串

mkpasswd指令,不是系统自带指令,需要使用YUM安装
yum intall -y expect
  • -l N 设定密码长度为N个字符
  • -d N 设定密码包含N位数字
  • -c N 设定密码包含N位小写字母
  • -C N 设定密码包含N位大写字母
  • -s N 设定密码包含N位特殊字符
默认生成9位随机字符串;
[root@Tech ~]# mkpasswd 
2R&0dpzgH
[root@Tech ~]# mkpasswd -l 12 -c 3 -C 3 -d 3 -s 2
kk3|1MLN-gs1
[root@Tech ~]# mkpasswd -l 12 -c 3 -C 3 -d 3 -s 3
U]pxHC&b509'
[root@Tech ~]# mkpasswd -l 12 -c 3 -C 3 -d 3 -s 1
1jaz8)WqvGO4

chage 属性 用户名 更改用户密码属性信息

  • -d "yy-mm-dd" 上一次更改的日期。
    -d对应修改的是/etc/shadow文件中第3列的属性
0 表示下次登录系统强制修改密码;
  • -m "n" 密码可更改的最小天数。
    -m对应修改的是/etc/shadow文件中第4列的属性
0 表示任何时候都可以更改密码;
  • -M "n" 密码保持有效的最大天数。
    -M对应修改的是/etc/shadow文件中第5列的属性
  • -W "n" 用户密码到期前,提前收到警告信息的天数。
    -W对应修改的是/etc/shadow文件中第6列的属性
  • -I "n" 设置密码过期时间(单位:天);过期后,密码为失效状态。
    -I对应修改的是/etc/shadow文件中第7列的属性
  • -E "yy-mm-dd" 设置账户过期时间。账户失效后,无法登录。
    -E对应修改的是/etc/shadow文件中第8列的属性
  • -l 显示用户信息。
[root@Tech ~]# useradd aspen
[root@Tech ~]# tail -1 /etc/shadow
aspen:!!:19006:0:99999:7:::
[root@Tech ~]# chage -d "2022-01-14" -m "4" -M "5" -W "6" -I "7" -E "2022-12-31" aspen
[root@Tech ~]# tail -1 /etc/shadow
aspen:!!:19006:4:5:6:7:19357:

su - 用户名 切换至指定用户

su指令的详细说明,请参照用户提权章节

- 表示切换用户时,更换指定用户的环境变量
[root@aspen ~]# su - stu01 #root用户切换至普通用户,不需要输入密码
[stu01@aspen ~]$ su - stu03 #普通用户之间相互切换或切换至root用户,需要输入密码
Password: 

sudo 命令 临时以另外一个用户身份(默认root用户)执行事先在/etc/sudoers文件允许的命令

sudo指令的详细说明,请参照用户提权章节

  • -l 查看当前用户特权命令
visudo编辑/etc/sudoers文件的专属命令
visudo== vi /etc/sudoers
不要在文件中针对同一个用户授予多次权限

sudoers文件书写格式

用户 可登陆主机=(sudo身份) 可执行的命令
aspen ALL=(ALL) ALL
[root@aspen ~]# visudo
......
    root    ALL=(ALL)       ALL
    aspen   ALL=(ALL)       NOPASSWD:ALL
    stu01   ALL=(ALL)       /sbin/* !/sbin/rm !/sbin/vim !/sbin/su
......
[stu01@aspen ~]$ sudo -l #首次查看用户特权命令

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 stu01: 
Matching Defaults entries for stu01 on aspen:
    !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 stu01 may run the following commands on aspen:
    (ALL) /sbin/* !/sbin/rm !/sbin/vim !/sbin/su
[aspen@aspen ~]$ sudo -l
Matching Defaults entries for aspen on aspen:
    !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 aspen may run the following commands on aspen:
    (ALL) NOPASSWD: ALL
[aspen@aspen ~]$ sudo su - root
Last login: Mon May 13 19:21:09 CST 2019 from 10.0.0.1 on pts/2
[root@aspen ~]# 

2.查看系统用户及登录信息的命令

w 显示已经登陆系统的用户列表,并显示用户正在执行的指令

系统平均负载:
1分钟 > 5分钟 > 15分钟,表示系统负载正在提升
1分钟 < 5分钟 < 15分钟,表示系统负载正在降低

w命令对显示区域宽度有要求,如果显示区域宽度不够,执行命令或进行报错
[root@aspen ~]# w
w: 52 column window is too narrow
[root@aspen ~]# w
 19:10:52 up 1 day,  8:05,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         14:09    4.00s  0.58s  0.02s w

who 显示当前系统登录的用户

[root@Tech ~]# who
root     pts/0        2022-01-16 12:39 (10.0.0.1)

whoami 显示当前用户名

[root@aspen ~]# whoami
root
[root@aspen ~]# su - aspen
Last login: Mon May 13 19:16:07 CST 2019 on pts/0
[aspen@aspen ~]$ whoami
aspen

last 显示所有用户的系统登录信息

[root@aspen ~]# last | head -5
root     pts/0        10.0.0.1         Mon May 13 19:46   still logged in   
root     pts/0        10.0.0.1         Mon May 13 19:34 - 19:46  (00:11)    
root     pts/2        10.0.0.1         Mon May 13 19:21 - 19:33  (00:12)    
root     pts/2        10.0.0.1         Mon May 13 19:20 - 19:21  (00:00)    
root     pts/1        10.0.0.1         Mon May 13 19:13 - 19:33  (00:19)  

lastlog 显示系统中所有用户最近一次登录信息

[root@aspen ~]# lastlog | head -2 ; lastlog |tail -4
Username         Port     From             Latest
root             pts/0    10.0.0.1         Mon May 13 19:46:21 +0800 2019
VitualWeb        pts/0                     Mon May 13 18:46:51 +0800 2019
aspen            pts/0                     Mon May 13 19:45:02 +0800 2019
stu01            pts/2                     Mon May 13 19:21:31 +0800 2019
stu03            pts/0                     Mon May 13 19:11:34 +0800 2019

chfn 用户名 交互式修改用户注释信息

[root@Tech ~]# tail -1 /etc/passwd
aspen:x:1002:1002::/home/aspen:/bin/bash
[root@Tech ~]# chfn aspen
Changing finger information for aspen.
Name []: Aspen
Office []: Avigilon
Office Phone []: 010-82****00   
Home Phone []: 17******24

Finger information changed.
[root@Tech ~]# tail -1 /etc/passwd
aspen:x:1002:1002:Aspen,Avigilon,010-82****00,17******24:/home/aspen:/bin/bash

chsh 用户名 交互式修改用户登录的Bash Shell信息

[root@Tech ~]# chsh aspen
Changing shell for aspen.
New shell [/bin/bash]
/sbin/nologin
chsh: Warning: "/sbin/nologin" is not listed in /etc/shells.
Shell changed.
[root@Tech ~]# tail -1 /etc/passwd
aspen:x:1002:1002:Aspen,Avigilon,010-82****00,17******24:/home/aspen:/sbin/nologin
chfnchsh指令,默认没有在系统中安装,需要使用YUM安装;
yum install -y util-linux-user-2.32.1-28.el8.x86_64

finger 用户名 查看用户信息以及登录信息

CentOS 8中无法直接使用YUM安装finger指令,需借助CentOS 7中的RPM包安装该指令。
[root@Tech ~]# finger aspen
Login: aspen                    Name: Aspen
Directory: /home/aspen                  Shell: /sbin/nologin
Office: Avigilon, 010-82****00      Home Phone: 17******24
Last login Sun Jan 16 13:23 (CST) on pts/0
No mail.
No Plan.

3.系统权限及用户授权相关命令

chmod 权限 文件名 修改文件的权限

  • -R 递归修改文件权限
chmod命令支持的权限:r(可读) w(可写) x(可执行) s(set uid) t(粘滞位)
[root@aspen ~]# chmod 644 ./Power.txt 
[root@aspen ~]# ll ./Power.txt 
-rw-r--r-- 1 root root 0 May 13 20:27 ./Power.txt
[root@aspen ~]# chmod a-r ./Power.txt 
[root@aspen ~]# ll ./Power.txt 
--w------- 1 root root 0 May 13 20:27 ./Power.txt
[root@aspen ~]# chmod +x ./Power.txt 
[root@aspen ~]# ll ./Power.txt 
--wx--x--x 1 root root 0 May 13 20:27 ./Power.txt
[root@aspen ~]# chmod ugo+r ./Power.txt 
[root@aspen ~]# ll ./Power.txt 
-rwxr-xr-x 1 root root 0 May 13 20:27 ./Power.txt
[root@aspen ~]# ll -d /tmp/ /bin/passwd 
-rwsr-xr-x.  1 root root 27832 Jun 10  2014 /bin/passwd
drwxrwxrwt. 10 root root   259 May 13 20:33 /tmp/
[root@aspen ~]# chmod +s ./Power.txt 
[root@aspen ~]# ll  Power.txt 
-rwsr-sr-x 1 stu01 stu01 0 May 13 20:27 Power.txt #数字权限:6755
[root@aspen ~]# chmod +t ./Power.txt 
[root@aspen ~]# ll ./Power.txt 
-rwxr-xr-t 1 stu01 stu01 0 May 13 20:27 ./Power.txt #数字权限:1755
[root@aspen ~]# chmod o-x ./Power.txt 
[root@aspen ~]# ll ./Power.txt 
-rwxr-xr-T 1 stu01 stu01 0 May 13 20:27 ./Power.txt #数字权限:1754

chown 用户名.用户组 文件名 修改文件的所有者以及属组

  • -R 递归修改文件属主以及属组权限
[root@aspen ~]# chown aspen ./Power.txt 
[root@aspen ~]# ll ./Power.txt 
-rwxr-xr-x 1 aspen root 0 May 13 20:27 ./Power.txt
[root@aspen ~]# chown stu01.stu01 ./Power.txt 
[root@aspen ~]# ll ./Power.txt 
-rwxr-xr-x 1 stu01 stu01 0 May 13 20:27 ./Power.txt

chgrp 用户组 文件名 修改文件的属组

  • -R 递归修改文件属组
[root@Tech ~]# mkdir test_dir
[root@Tech ~]# touch test_dir/test_file
[root@Tech ~]# ll test_dir/
total 0
-rw-r--r--. 1 root root 0 Jan 19 14:38 test_file
[root@Tech ~]# ll test_dir/ -d
drwxr-xr-x. 2 root root 23 Jan 19 14:38 test_dir/
[root@Tech ~]# chgrp Young test_dir/ -R
[root@Tech ~]# ll -d test_dir/
drwxr-xr-x. 2 root Young 23 Jan 19 14:38 test_dir/
[root@Tech ~]# ll test_dir/
total 0
-rw-r--r--. 1 root Young 0 Jan 19 14:38 test_file

chattr +/- 隐藏权限 文件名 设置指定文件的隐藏属性

chattr命令支持的权限:a(仅追加文件内容权限) i(仅查看文件权限)
[root@aspen ~]# echo 123456 >Power.txt 
[root@aspen ~]# chattr +a Power.txt 
[root@aspen ~]# echo 67890 >Power.txt 
-bash: Power.txt: Operation not permitted
[root@aspen ~]# cat ./Power.txt 
123456
[root@aspen ~]# echo 67890 >>Power.txt 
[root@aspen ~]# cat ./Power.txt 
123456
67890
[root@aspen ~]# chattr +i ./Power.txt 
[root@aspen ~]# cat ./Power.txt 
123456
67890
[root@aspen ~]# echo 13579>> ./Power.txt 
-bash: ./Power.txt: Permission denied
[root@aspen ~]# cat ./Power.txt 
123456
67890

lsattr 查看文件隐藏属性

  • -d 只显示目录本身信息
[root@aspen ~]# ll ./Power.txt 
-rw-r--r-- 1 stu01 stu01 7 May 13 20:40 ./Power.txt
[root@aspen ~]# lsattr ./Power.txt 
-----a---------- ./Power.txt
[root@aspen ~]# lsattr ./Power.txt 
----i----------- ./Power.txt
[root@aspen ~]# rm -f ./Power.txt 
rm: cannot remove ‘./Power.txt’: Operation not permitted

Linux命令要养成操作前备份,操作后检查的好习惯
未完待续...