持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情
前言
本文就来分享一波笔者对于Linux下用户和权限的学习经验和心得,本篇系第一篇。
笔者水平有限,难免存在纰漏,欢迎指正交流。
Linux用户与权限(一)
Linux用户概念
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以在linux系统下做任何事情,不受限制(root用户)
普通用户:只能在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令: su [用户名] 功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user,不需要密码。
要从普通用户user切换到root用户则使用 su(不切换路径)或su -(重新登陆到root用户),需要输入密码。
sudo 指令输入当前普通用户的密码,然后可以不切换用户而以root用户身份执行指令,可以短暂提权。只要带sudo,任何指令都可以root身份执行。不过要注意,这个是让普通用户短暂提权到root用户权限,对root用户没用。
如果执行失败了,说明当前系统不相信你这个用户,需要将当前用户添加到/etc/sudoers中。就相当于黑名单和白名单,未添加到白名单的话就是处在黑名单,就不给你提权的权限。
sudo的意义在于给受信任的用户提供最少的执行障碍。
既然信任了,为什么不直接给root账户呢?因为要留一手,为了更好地管理与监管用户。
添加与删除用户
adduser 和 useradd 的区别
对于 Debian 或 Ubuntu ,主要的区别在使用方式上:
adduser是一个 perl 脚本,通过交互式菜单设定一些用户参数。在输入adduser 用户名后,会自动创建用户主目录(并复制/etc/skel目录下的文件)、指定系统 shell,提示输入用户密码,很简单的就添加了一个标准的普通用户。useradd是一个指令,如果不使用任何选项,创建的用户将无密码、无主目录、没有指定 shell。如果你需要正常使用这个账户,就还需要设置密码、创建家目录等额外操作。
对于 CentOS 来说是没有区别的,adduser 通过符号链接指向 useradd,即 CentOS 只有 useradd。
由于我这里用的是CentOS7,所以就只演示useradd。
使用 useradd 添加用户
前面提到,useradd 如果不使用任何选项,创建的用户将无密码、无主目录、没有指定 shell。为了和 adduser 一样添加一个标准的普通用户就需要指定选项,或者手动进行额外操作,这样添加的用户才能正常使用。
所以对于 useradd 添加标准的普通用户有使用选项和不使用选项两种方式。
使用选项
以添加用户名为 p3terx 的用户为例子,输入命令添加用户、添加用户目录、指定 bash 为 shell
useradd -m -s /bin/bash p3terx
-m自动创建用户的家目录,并将/etc/skel中的文件复制到家目录中
-s指定用户登入后所使用的 shell
然后对该用户设置密码,输入命令后会提示输入两次密码
使用passwd设置密码
基本操作
passwd 命令的基本格式如下:
passwd [选项] 用户名
- 如果只省略“选项”参数时可以设置指定用户的密码
- 如果省略“选项”和“用户名”时可以设置当前用户的密码
例如,我们使用 root 账户修改 lamp 普通用户的密码,可以使用如下命令:
[root@VM-8-7-centos ~]#passwd lamp
Changing password for user lamp.
New password: <==直接输入新的密码,但屏幕不会显示(因为密码被保密)
BAD PASSWORD: it is WAY too short <==密码太简单或过短的错误!这里只是警告信息,输入的密码依旧能用Retype new password: <==再次验证输入的密码,再输入一次即可
passwd: all authentication tokens updated successfully. <==提示修改密码成功
注意,普通用户只能使用 passwd 命令修改自己的密码,而不能修改其他用户的密码(root用户改谁的都可以)。
与使用 root 账户修改普通用户的密码不同,普通用户修改自己的密码需要先输入自己的旧密码,只有旧密码输入正确才能输入新密码。不仅如此,此种修改方式对密码的复杂度有严格的要求,新密码太短、太简单,都会被系统检测出来并禁止用户使用。
passwd 命令还提供了一些选项,用于实现不同功能:
- -S:查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用。
- -l:暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!",使密码失效,仅 root 用户可用。
- -u:解锁用户,和 -l 选项相对应,也是只能 root 用户使用。
- --stdin:可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用。
- -n 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段。
- -x 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段。
- -w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段。
- -i 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。
【例1】
查看用户密码的状态
[root@VM-8-7-centos ~]# passwd -S lamp
lamp PS 2022-10-17 99999 7 -1 (Password set, SHA512 crypt.)
#上面这行代码的意思依次是:用户名(lamp) 密码(PS) 设定时间(2022-10-17) 密码修改间隔时间(0) 密码有效期(99999) 警告时间(7) 密码不失效(-1) 密码已使用(Password set, SHA512 crypt.)
"-S"选项会显示出密码状态,这里的密码修改间隔时间、密码有效期、警告时间、密码宽限时间其实分别是/etc/shadow 文件的第四、五、六、七个字段的内容。 当然,passwd 命令是可以通过命令选项修改这几个字段的值的,例如:
#修改 lamp的密码,使其具有 60 天变更、10 天密码失效
[root@VM-8-7-centos ~]# passwd -x 60 -i 10 lamp
[root@VM-8-7-centos ~]# passwd -S lamp
lamp PS 2022-10-17 0 60 7 10 (Password set, SHA512 crypt.)
【例2】
#锁定 lamp 用户
[root@VM-8-7-centos ~]# passwd -l lamp
Locking password for user lamp.
passwd:Successg
#用"-S"选项査看状态
[root@VM-8-7-centos ~]# passwd -S lamp
lamp LK 2022-10-17 0 99999 7 -1 (Password locked.)#很清楚地提示密码已被锁定
[root@VM-8-7-centos ~]# grep "lamp" /etc/shadow
lamp:!! $6$ZTq7o/9o $lj07iZ0bzW.D1zBa9CsY43d04onskUCzjwiFMNt8PX4GXJoHX9zA1S C9.i Yzh9LZA4fEM2lg92hM9w/p6NS50.:15711:0:99999:7:::
#可以看到,锁定其实就是在加密密码之前加入了"!!",让密码失效而已
暂时锁定 lamp 用户后,此用户就不能登录系统了。那么,怎么解锁呢?也一样简单,使用如下命令即可:
#解锁 lamp 用户
[root@VM-8-7-centos ~]# passwd -u lamp
Unlocking password for user lamp.
passwd:Success
[root@VM-8-7-centos ~]# passwd -S lamp
lamp PS 2022-10-17 0 99999 7 -1 (Password set, SHA512 crypt.)
#可以看到,锁定状态消失
[root@VM-8-7-centos ~]# grep "lamp" /etc/shadow
lamp: $6$ZTq7cV9o $lj07iZ0bzW.D1zBa9CsY43d04onskUCzjwiFMNt8PX4GXJoHX9zA1S C9.iYz h9LZA4fEM2lg92hM9w/p6NS50.:15711:0:99999:7:::
#密码前面的 "!!" 删除了
可以用下面命令查看所有用户:
不使用选项
在不使用选项的情况下,添加一个标准普的通用户的过程相总共有 6 个步骤,略显麻烦,也没必要这样操作。但可以从中了解添加一个用户具体做了哪些事情,对解决一些问题有参考价值。
- 以添加用户名为
p3terx的用户为例子,输入命令添加用户
useradd p3terx
- 设置密码
passwd p3terx
- 创建家目录
mkdir /home/p3terx
- 将
/etc/skel目录下的文件复制到该用户目录
cp -r /etc/skel/. /home/p3terx
- 更改家目录归属
chown -R p3terx:p3terx /home/p3terx
- 指定 Shell 为
/bin/bash
usermod -s /bin/bash p3terx
删除用户
如果因为错误的方式添加了用户,而不知道如何解决,可以删除这个用户。
以删除 p3terx 这个用户为例子,首先终结该用户所有进程
pkill -u p3terx
然后输入删除命令
userdel -r p3terx
-r表示删除用户的同时,将其宿主目录和系统内与其相关的内容删除。
什么是权限
人之间在各种方面和各种事情上不可避免的存在等级差别,不同等级的人具有不同的权限,权限可以拆分为权和限,权在于等级高的可以有更多的权利干更多的事情,而限在于等级低的则不具备这一系列的权利,也干不了一些事情,
权限是约束人的(个人或群体),同时也和目标对象是否具有某些属性(业务)有关,比如你能在音乐app上刷算法题吗?即使你是vip也不能吧。
事物权限 = 人 + 事物属性
我们想一想,人具有某种权限是因为人本身么?你能在视频app上观看会员电影是因为你是某某某么?不是的,因为你是该app的vip才能够具有这种权限,也就是说,权限是落实到某种角色上的,人只要具有某种角色属性,就具有了对应的权限。
拿文件举例:文件权限 = 人 + 文件属性
简而言之,权限即一件事情是否允许被谁来做。
为什么要有权限?——构造一种层次结构,便于对用户的管理,以便系统进行安全管理。
以上就是本文全部内容,感谢观看,你的支持就是对我最大的鼓励~