用户账号管理

  • 为新员工创建账号
  • 修改账号密码策略
  • 禁用休假员工账号
  • 删除离职员工账号
  • 设置账号访问权限

每个人保管自己的密码

  • 不要将密码泄露给任何人
  • 保证密码复杂度
  • 不要将密码写在纸条贴在显示器上

Root账号

  • 能做任何事情(甚至删除操作系统自身)
  • 大部分Linux发行版本安装时要求使用设置root账号密码
  • Ubuntu默认禁用Root账号
    • 可sudo或临时切换为root账号
    • 可手动启用root账号
  • 平时以普通员工账号管理计算机

在安装过程中会创建普通账号,作为日常管理使用

创建、删除账号

1
2
3
4
5
6
7
8
9
10
11
sudo useradd user01 -m

sudo useradd -d /home/user02 -m user01

-d # 账号主目录(复制于/etc/skel),指定主目录位置
-m # 同时创建主目录(默认首次登录时创建主目录,获得一个bash),如果不加-m参数,用户下次登录时会获得一个sh,建议加上-m参数
-c # 全名(描述信息)
-e # 账号过期YYYY-MM-DD
-N # 不创建同名组账号
-g # 指定主组(必须已经存在)
-G # 额外组,创建用户的同时,把用户加入到另一个组
  • 账号名最长32个字符
  • 用户主目录下的内容拷贝自/etc/skel
1
2
3
4
5
6
cat /etc/passwd

cwz:x:1000:1000:cwz,,,:/home/cwz:/bin/zsh

# 显示的含义:都是以;隔开
用户名:密码:UID:GID:全名/描述,房间号,公司电话,住宅电话,others:主目录:shell

注意:密码这里用x占位,因为/etc/passwd这个文件普通用户也能看,如果显示密码就会不安全。这个文件只存放用户账号

查看密码相关的信息

例如:

1
2
3
4
5
sudo cat /etc/shadow


root:!:18283:0:99999:7:::
cwz:$6$IeEjtb19$Vy8xkm5JqjIgzYTfQiOYQOrKsqvDWp1oI/Wm.YKxXdxIt8Ehn1P/2LQ7Z.1oNjLm0rlLd8aVwst04lkwFLB0h.:18283:0:99999:7:::

每一列的意思:

  • 用户名:密码
    • 密码为!*的账号不能直接登录系统
    • !:表示密码锁定
  • :上次修改的日期
    • 从1970-01-01起到修改的天数
    • 如果是0表示用户下次登录时需要修改密码,空表示关闭密码过期功能
  • :密码最小使用期限:密码最长使用期
    • 后值小于前值时,用户无法更改密码
  • :密码过期前几天提醒,默认是7天
  • :密码过期几天后账号会被锁定
    • 账号过期用户不能登录,密码过期看此设置是否锁定账号
  • :账号过期日(距1970-01-01的天数)
  • :保留

设置账号密码

1
2
3
4
5
6
7
8
9
10
11
12
sudo passwd user01      # 为user01设置密码

# 更多的参数
-l # 锁定账号密码
-u # 解锁账号
-d # 删除密码(账号无密码也能登录)
-n / -x # 密码最小 / 最大使用期限
-w # 密码过期前几天发出警告
-i # 密码过期几天后锁账号
-e # 密码立刻过期(下次登录必须修改密码)
-S # 查看账号的密码状态
sudo passwd -aS # 显示所有账号的信息(L表示锁定状态的账号、P表示活动)

添加账户的另一个命令adduser

1
sudo adduser user02
  • 基于useradd的pel脚本

  • 并非所有Linux发行版本中都包含

  • 向导方式运行(不需要记忆命令参数)

1
sudo vi /usr/sbin/adduser

批量添加账号newusers

1
2
3
4
5
6
7
8
# users.txt
user11:pass11:::zhangsan1:/home/user11:/bin/bash
user12:pass12:::zhangsan2:/home/user12:/bin/bash
user13:pass13:::zhangsan3:/home/user13:/bin/bash



sudo newusers users.txt # 批量添加

可以事先把账号密码设置好,用newusers批量添加账号

删除账号

1
2
3
sudo userdel user01  # 删除用户名时没有同时删除用户主目录,需要进行文件备份
sudo rm -rf /home/user01 # 删除用户主目录
sudo userdel -r user01 # 删除账号同时删除主目录

切换到root账号

1
2
3
4
5
6
7
# 切换到root账号
su # 需要输入root密码,需要先给root设置密码
sudo su # 输入当前账号密码
sudo -i # 同上
sudo -s # 同上
su user01 # 切换到其他账号
sudo su user01 # 切换到其他账号

组账号管理

查看组

  • 将用户账号分组管理和指派权限

  • 用户创建时同时生成同名的组账号

  • 每个文件有唯一的所属账号和所属组(属主、属组)

    • 每个用户可以同属多个组,但只有一个主组
  • groups 查看当前用户所属哪些组

1
2
3
4
5
6
cat /etc/group

sudo:x:27:cwz

# 含义:
组名:密码(通常不使用):GID:逗号分隔的成员用户账号

组管理

1
2
3
4
5
6
7
8
9
sudo groupadd gname    # 添加组
sudo groupdel gname # 删除组
sudo gpasswd -a user gname # 将用户user加入额外组gname
sudo usermod -aG gname user # 将用户user加入额外组gname

sudo usermod -g gname user # 修改用户主组
sudo usermod -d /home/u2 u1 -m # 将主目录内容移动到新目录/home/u2
sudo usermod -l u2 u1 # 将用户u1修改为u2,原来的权限不变
sudo gpasswd -d uname gname # 将用户从组中删除

密码策略

使用足够复杂的密码

使用技术手段强制使得客户端设置密码足够复杂

需要安装模块:Pluggable Authentication Module (PAM)

有人虽然把密码设的足够复杂,但是每次设置密码来来回回就固定的几个,时间长了,可能会被攻击者破解出来。

可以利用程序,可以指定一个次数,要求连续多少次不与前100次密码相同

1
2
3
4
5
sudo apt install libpam-cracklib
sudo vim /etc/pam.d/common-password

# 增加配置
password required pam_pwhistory.so remember=9 use_authok # 设置历史密码

权限、属主和属组

权限

权限决定你能访问哪些资源

  • 每个文件和文件夹拥有唯一的属主和属组 ls -l
  • 权限类型
    • r、w、x 读、写、执行
    • u、g、o 属主、属组、其他
权限 文件 文件夹
r 读取文件内容、拷贝 列出目录内容
w 更改文件内容 创建、删除文件及文件夹
x 作为应用程序执行文件 cd进入;读取文件权限和属性

修改权限的命令

1
2
3
4
5
6
chmod u+rw a.txt
chmod g-w a.txt

chmod 664 a.txt # -rw-rw-r-- 所有主权限二进制数110 110 100,十进制664

chmod 770 -R path/ # 递归设置文件夹内权限

权限与搜索

1
2
3
4
5
6
7
8
9
find /path/ -perm 664   # 在path路径下搜索权限为664的

find /path -type f -perm 664 -user cwz -group cwz -exec ls -l {} \;
# 找到664权限的所属所组 的文件, 执行ls -l

find /path -type f -perm 664 -user cwz -group cwz -exec chmod 770 {} \; # 找到664权限的所属所组 的文件权限设置为770

sudo find /home/ -nouser -exec rm -rf {} \;
# 查看没有 有效属主对象(在账号删除的情况下),删除没有账号下的文件

修改属主和属组

1
2
3
4
5
sudo chown user01 a.txt       # 将a.txt的属主改为user01
sudo chown -R user01 /path # 递归将文件家内文件更改属主
sudo chgrp user01 a.txt # 将a.txt的属组改为user01

sudo chown user01:user01 a.txt # 属主和属组一起改

特殊权限

setuid (4)

  • 主要针对可执行程序
  • 一旦可执行程序被设置为setuid,任何用户执行程序时都能使用属主的权限
  • 设置setuid命令:sudo chmod u+s a.sh或者 sudo chmod 4777 a.sh,原来权限不变,前面加4

例子:

passwd是可执行程序,任何人使用passwd命令,都可以暂时的拥有root权限,只有有了root权限,才可以更改密码。

setgid (2)

  • 主要针对可执行程序和目录
  • 应用于目录时可实现共享访问效果(新建文件的属组继承目录属组),同一组的用户相互查看。
  • 设置命令:sudo chmod g+s path/ 或者 sudo chmod 2775 path/

sticky bit(1)

  • 针对目录的受限删除位(root、属主可以删除),其他用户创建的文件你删除不了,只有自己和root能删除。
  • /tmp 目录即为典型例子
  • 设置命令:chmod o+t path/ 或者 chmod 1775 path/

权限掩码

新建的文件权限默认是664,新建的文件夹权限默认是775

权限掩码umask 默认是0002,文件666减去2,文件夹777减去2

umask 007 可临时设置掩码007,一旦退出会话,就会失效

永久设置可以编辑/etc/login.defs

  • UMASK 022
  • USERGROUPS_ENAB yes 一旦USERGROUPS_ENAB设置成yes,就会使用属主的掩码权限覆盖属组的掩码权限,也就是022变为002
  • USERGROUPS_ENAB参数改为no,就会是原来的022
  • 用户名与组名相同、UID与GID相同,也会使属主的掩码权限覆盖属组的掩码权限,推荐使用这种方法使得用户名与组名不相同、UID与GID不相同。