无论是在linux中还是windows中,用户权限管理一直是一个很重要的问题
用户权限
了解一下/etc/passwd 和 /etc/shadow
用户文件 /etc/passwd
在linux系统中,所创建的用户帐号和其相关信息 (密码除外) 均是存放在/etc/passwd 配置文件中。由于所有用户对 passwd文件均可读的权限,因此密码信息并未保存在该文件中,而是保存在了/etc/shadow 的配置文件中。该文件除了root用户可以修改以外,其他用户无法修改,虽然所有用户都可以查看,但是内容是md5加密后的
[root@gogogo ~]# ls -al /etc | grep passwd -rw-r--r--. 1 root root 1545 11月 7 11:43 passwd -rw-r--r--. 1 root root 1545 11月 7 11:52 passwd- [root@gogogo ~]# ls -al /etc | grep shadow ----------. 1 root root 548 11月 7 11:42 gshadow ----------. 1 root root 535 11月 7 11:39 gshadow- ----------. 1 root root 989 11月 7 12:01 shadow ----------. 1 root root 798 11月 7 11:52 shadow-
在 passwd 文件中,一行定义一个用户帐号,每行均由多个不同的字段构成,各字段值间用 ":” 分隔,每个字段均代表该帐号某方面的信息。
在刚安装完成的 linux 系统中,passwd 配置文件已有很多帐号信息了,这些帐号是由系统自动创建的,他们是 linux 进程或部分服务程序正常工作所需要使用的账户,这些账户的最后一个字段的值一般为/sbin/nologin,表示该帐号不能用来登录 linux 系统。
用户账号 : 用户密码 : 用户ID : 用户组ID : 用户名全称 : 用户主目录 : 用户所使用的shell
- 用户账户,即你创建的账号,在刚安装好的linux中会存在一些需要的账号身份
- 密码由于/etc/passwd下面的每个用户都可以改,所以密码是不会放在这里的,用x占位,用户真实的密码采用MD5加密算法加密后,保存在/etc/shadow配置文件中,只有root用户可以读取。
- 用户id指的是用户的uid,是用户身份的标识号,比如root的身份就是0,如果你创建了一个用户hzj,并把他的uid改成0,那么系统就会认为root和hzj是同一个账户身份。0是超级用户(root)的标识号,1~499由系统保留,作为管理账号,普通用户的标识号从500开始 用户组id叫做gid,与/etc/group中对应,
- 同样的gid也是从500开始,划分规则和uid类似。
- 用户主目录表示用户登陆后所处的目录 root的目录是/root,普通用户的家目录则是/home/username,如果你需要更改,在/etc/passwd下面更改就行了
用户组账号文件 /etc/group
用户组账号文件保存在/etc/group中,任何用户都可以读取
用户密码 /ect/shadow
[root@gogogo etc]# ls -al /etc/ | grep shadow ----------. 1 root root 523 8月 21 10:39 gshadow ----------. 1 root root 513 7月 12 17:57 gshadow- ----------. 1 root root 737 9月 3 14:48 shadow ----------. 1 root root 737 9月 3 14:48 shadow-
你会发现他们的文件属性是0000,但是root用户可以访问和更改
用户组密码 /etc/gshadow
用户组的真实密码保存在/etc/gshadow配置文件中
其中第一字段表示用户组的名称,第二字段为x,第三字段为用户组的ID号,第四个为该用户组的用户成员列表,逗号隔开
文件 /etc/shells
系统某些服务在运行过程中,会去检查用户能够使用的 shells,而这些 shell 的查询就是借助 /etc/shells 这个文件,我们所创建的用户所使用的shells也都存放在/etc/shells这个文件中
/bin/false本身是不存在/etc/shells中的,如果要使用,可以添加进去
echo '/bin/false' > /etc/shells echo '/bin/true' > /etc/shells
/bin/false是最严格的禁止login选项,一切服务都不能用。将用户的shell设置为/bin/false,用户会无法登录,并且不会有任何提示。
sbin/nologin只是不允许login系统,即使给了密码也不行。所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。举例来说,各个系统账号中,打印作业有lp这个账号管理,www服务器有apache这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已。
如果我想要让某个具有 /sbin/nologin 的用户知道,他们不能登陆主机时,可以新建 /etc/nologin.txt 这个文件,在文件内面写上不能登陆的原因,当用户登录时,屏幕上就会出现这个文件里面的内容。
touch /etc/nologin.txt && echo 'no permission login ..' > /etc/nologin.txt
用户和用户组的管理
新增一个组 groupadd
groupadd [-g gid] groupname
新增一个用户 useradd
useradd username [-u uid] [-g gid] [-d home] [-s]
-c 注释
-d 家目录
-m 若家目录不存在,则创建他
-M 不建立家目录
-e date指定账户过期的日期
-g 用户组 指定将用户加入到哪个用户组,该用户组必须存在
-G 用户组列表 指定用户同时加入的用户组列表,各组用逗分隔
-n 不为用户创建私有用户组
-s shell 指定用户登录时使用的 shell,默认为 / bin/bash
-r 创建一个用户 ID 小于 500 的系统账户,默认不创建对应的主目录
-u 用户 ID 手动指定新用户的 ID 值,该值必须唯一,且大于 499
-p password 为新建用户指定登录密码。此处的 password 是对应登录密码经 MD5 加密后所得到的密码值,不实真实密码原文,因此在实际应用中,该参数选项使用较少,通常单独使用 passwd 命令来为用户设置登录密码。
删除一个用户 userdel
userdel [-r] username
-r 删除账户的时候连带账户的家目录一起删除
删除一个组 groupdel
groupdel groupname
如果组下还存在其他的账户,则不能删除组
创建和修改一个用户的密码
passwd
[hzj@gogogo ~]$ passwd --help 用法: passwd [选项...] <帐号名称> -k, --keep-tokens 保持身份验证令牌不过期 -d, --delete 删除已命名帐号的密码(只有根用户才能进行此操作) -l, --lock 锁定指名帐户的密码(仅限 root 用户) -u, --unlock 解锁指名账户的密码(仅限 root 用户) -e, --expire 终止指名帐户的密码(仅限 root 用户) -f, --force 强制执行操作 -x, --maximum=DAYS 密码的最长有效时限(只有根用户才能进行此操作) -n, --minimum=DAYS 密码的最短有效时限(只有根用户才能进行此操作) -w, --warning=DAYS 在密码过期前多少天开始提醒用户(只有根用户才能进行此操作) -i, --inactive=DAYS 当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作) -S, --status 报告已命名帐号的密码状态(只有根用户才能进行此操作) --stdin 从标准输入读取令牌(只有根用户才能进行此操作) Help options: -?, --help Show this help message --usage Display brief usage message
root可以修改其他账户的密码,其他账户只能修改自己的密码
密码生成器
mkpasswd 密码生成工具,如果自己定义的密码并不完美,或者说容易被猜出来,那么你可以用密码生成器来生成无规律的密码
# 下载 yum install -y expect # 使用 [root@gogogo ~]# mkpasswd Bmb2^Wuu4 [root@gogogo ~]# mkpasswd Wk05aOxj/
用户权限命令
介绍一些用户权限操作中经常用到的命令
切换用户
su (选项) (参数) -c command user 切换成user并使用command后返回当前用户 -user 改变成user后进入到user的家目录
查看当前用户名称
whoami == id -un
显示用户的id以及群组id
id (选项) user -g 显示用户所属群组的id -un 显示当前用户名称