linux用户权限

我的梦境 提交于 2019-12-04 19:59:28

无论是在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

  1. 用户账户,即你创建的账号,在刚安装好的linux中会存在一些需要的账号身份
  2. 密码由于/etc/passwd下面的每个用户都可以改,所以密码是不会放在这里的,用x占位,用户真实的密码采用MD5加密算法加密后,保存在/etc/shadow配置文件中,只有root用户可以读取。
  3. 用户id指的是用户的uid,是用户身份的标识号,比如root的身份就是0,如果你创建了一个用户hzj,并把他的uid改成0,那么系统就会认为root和hzj是同一个账户身份。0是超级用户(root)的标识号,1~499由系统保留,作为管理账号,普通用户的标识号从500开始 用户组id叫做gid,与/etc/group中对应,
  4. 同样的gid也是从500开始,划分规则和uid类似。
  5. 用户主目录表示用户登陆后所处的目录 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 显示当前用户名称
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!