Linux用户概念
Linux 用户类型
Linux下有两种用户:管理员用户(root)、系统用户、普通用户。
管理员用户(root):可以在linux系统下做任何事情,不受限制,管理员UID为
0
。
系统用户:Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会由独立的系统用户负责运行,进而有效控制被破坏范围。系统用户UID为1~999
。
普通用户:由管理员创建的用于日常工作的用户,只能在linux下做有限的事情,UID从1000
开始累加。
# 查看用户的UID id 用户名
需要注意的是,UID是不能冲突的,而且管理员创建的普通用户的UID默认是从
1000
开始的(即使前面有闲置的号码)。
用户组
为了方便管理属于同一组的用户,Linux系统中还引入了用户组的概念。通过使用用户组号码(GID,Group IDentification),可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。假设一个公司中有多个部门,每个部门中又有很多员工,如果只想让员工访问本部门内的资源,则可以针对部门而非具体的员工来设置权限。例如,通过对技术部门设置权限,使得只有技术部门的员工可以访问公司的数据库信息等。
另外,在Linux系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳到其他用户组,则这个其他用户组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满足日常的工作需要。
注意:基本用户组就像是原生家庭,是在创建账号(出生)时就自动生成的;而扩展用户组则像工作单位,为了完成工作,需要加入到各个不同的群体中,这是需要手动添加的。
切换用户
# 切换用户 su [用户名]
超级用户的命令提示符是
#
,普通用户的命令提示符是$
。例如,要从
root
用户切换到普通用户user
,则使用su [用户名]
,不需要密码。如果要从普通用户user
切换到root
用户则使用su root
,需要输入root
用户的密码。
# 不切换用户而以`root`用户身份执行指令 sudo [用户名]
注意:
sudo
指令输入当前普通用户的密码,然后可以不切换用户而以root
用户身份执行指令,可以短暂提权。只要带sudo
,任何指令都可以root身份执行。不过要注意,这个是让普通用户短暂提权到root用户权限,对root
用户没用。如果执行失败了,说明当前系统不相信你这个用户,需要将当前用户添加到/etc/sudoers中。就相当于黑名单和白名单,未添加到白名单的话就是处在黑名单,就不给你提权的权限。sudo的意义在于给受信任的用户提供最少的执行障碍。
一、新增用户
创建用户有两条命令:adduer
和useradd
,对应着两条删除用户的命令:deluser
和userdel
。
这两种命令之间的区别:
adduser
:会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。useradd
:需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。
一、adduser 和 useradd 的区别
对于 Debian 或 Ubuntu ,主要的区别在使用方式上:
adduser
是一个 perl 脚本,通过交互式菜单设定一些用户参数。在输入adduser 用户名
后,会自动创建用户主目录(并复制/etc/skel
目录下的文件)、指定系统 shell,提示输入用户密码,很简单的就添加了一个标准的普通用户。useradd
是一个指令,如果不使用任何选项,创建的用户将无密码、无主目录、没有指定 shell。如果你需要正常使用这个账户,就还需要设置密码、创建家目录等额外操作。对于 CentOS 来说是没有区别的,
adduser
通过符号链接指向useradd
,即 CentOS 只有useradd
。
1.1、使用 useradd 添加用户
useradd
如果不使用任何选项,创建的用户将无密码、无主目录、没有指定 shell。为了和 adduser
一样添加一个标准的普通用户就需要指定选项,或者手动进行额外操作,这样添加的用户才能正常使用。所以对于 useradd
添加标准的普通用户有使用选项和不使用选项两种方式。
1.2.1 使用选项
1.2.1.1、以添加用户名为 wuke
的用户为例子,输入命令添加用户、添加用户目录、指定 bash 为 shell
# 如果使用普通用户,则需要使用sudo授权给普通用户权限去创建新用户
[wuke@aliyun /]$ sudo useradd -m -s /bin/bash wuke
# 如果是ROOT用户,则可以直接去创建新用户
# `-m` 自动创建用户的家目录,并将/etc/skel中的文件复制到家目录中
# `-s` 指定用户登入后所使用的 shell
[root@aliyun /]# useradd -m -s /bin/bash wuke
1.2.2.2、然后对该用户设置密码,输入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 个字段。
[root@aliyun /]# passwd [选项] 用户名
例如,我们使用 root 账户修改 wuke 普通用户的密码,可以使用如下命令:
[root@aliyun /]# passwd wuke
Changing password for user wuke.
New password: # 直接输入新的密码,但屏幕不会显示(因为密码被保密)
BAD PASSWORD: it is WAY too short # 密码太简单或过短的错误!这里只是警告信息,输入的密码依旧能用
Retype new password: #再次验证输入的密码,再输入一次即可。
passwd: all authentication tokens updated successfully. # 提示修改密码成功
1.2.2.3、查看用户密码的状态
[root@aliyun /]# passwd -S wuke
wuke PS 2022-10-17 99999 7 -1 (Password set, SHA512 crypt.)
#上面这行代码的意思依次是:用户名(wuke) 密码(PS) 设定时间(2024-10-17) 密码修改间隔时间(0) 密码有效期(99999) 警告时间(7) 密码不失效(-1) 密码已使用(Password set, SHA512 crypt.)
"-S"选项会显示出密码状态,这里的密码修改间隔时间、密码有效期、警告时间、密码宽限时间其实分别是/etc/shadow 文件的第四、五、六、七个字段的内容。 当然,passwd 命令是可以通过命令选项修改这几个字段的值的,例如:
#修改wuke的密码,使其具有 60 天变更、10 天密码失效
[root@aliyun /]# passwd -x 60 -i 10 wuke
[root@aliyun /]# passwd -S wukw
wuke PS 2024-10-17 0 60 7 10 (Password set, SHA512 crypt.)
# 锁定 wuke 用户
[root@aliyun /]# passwd -l wuke
Locking password for user wuke.
passwd:Successg
# 用"-S"选项査看状态
[root@aliyun /]# passwd -S lamp
wuke LK 2022-10-17 0 99999 7 -1 (Password locked.) # 很清楚地提示密码已被锁定
[root@aliyun /]# grep "wuke" /etc/shadow
wuke:!! $6$ZTq7o/9o $lj07iZ0bzW.D1zBa9CsY43d04onskUCzjwiFMNt8PX4GXJoHX9zA1S C9.i Yzh9LZA4fEM2lg92hM9w/p6NS50.:15711:0:99999:7:::
# 可以看到,锁定其实就是在加密密码之前加入了"!!",让密码失效而已。
暂时锁定 wuke 用户后,此用户就不能登录系统了。但是可以使用如下命令进行解锁即可:
# 解锁 wuke 用户。
[root@aliyun /]# passwd -u wuke
Unlocking password for user wuke.
passwd:Success
[root@aliyun /]# passwd -S wuke
wuke PS 2022-10-17 0 99999 7 -1 (Password set, SHA512 crypt.)
# 可以看到,锁定状态消失。
[root@aliyun /]# grep "wuke" /etc/shadow
wuke: $6$ZTq7cV9o $lj07iZ0bzW.D1zBa9CsY43d04onskUCzjwiFMNt8PX4GXJoHX9zA1S C9.iYz h9LZA4fEM2lg92hM9w/p6NS50.:15711:0:99999:7:::
# 密码前面的 "!!" 删除了。
可以用该命令查看所有用户:
# 生成所有已定义的用户账号列表
[root@aliyun /]# compgen -u
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
chrony
nscd
tcpdump
wuke
1.2.2、不使用选项
在不使用选项的情况下,添加一个标准的普通用户的过程相总共有 6 个步骤,略显麻烦,也没必要这样操作。但可以从中了解添加一个用户具体做了哪些事情,对解决一些问题有参考价值。
1.2.2.1、以添加用户名为wuke
的用户为例子,输入命令添加用户
useradd wuke
1.2.2.2、设置密码
passwd wuke
1.2.2.3、创建家目录
mkdir /home/wuke
1.2.2.4、将/etc/skel
目录下的文件复制到该用户目录
cp -r /etc/skel/. /home/wuke
1.2.2.5、更改家目录归属
chown -R wuke:wuke /home/wuke
1.2.2.6、指定 Shell 为/bin/bash
usermod -s /bin/bash wuke
二、修改用户名称以及密码
2.1、修改用户名称
Linux将用户名修改后,还需要修改 组名 + 家目录 + UID
,这只会更改用户名,而其他的东西,比如用户组,家目录,UID 等都保持不变。
2.1.1、修改用户名之前,你需要从要改名的帐号中登出并杀掉该用户的所有进程,要杀掉该用户的所有进程可以执行下面命令
$ sudo pkill -u 旧用户名
$ sudo pkill -9 -u 旧用户名
2.1.2、修改用户名
usermod -l 新用户 旧用户
2.1.3、修改家目录
usermod -d /home/新用户名 -m 新用户名
2.1.4、修改组名
groupmod -n 新用户名 旧用户名
2.1.5、修改UID
sudo usermod -u 1000 新用户名
2.1.6、检查
id 新用户名
2.2、修改用户密码
2.2.1、Linux修改密码用 passwd
命令,用root用户运行passwd
,passwd username
可以设置或修改任何用户的密码,普通用户运行passwd
只能修改它自己的密码。
[root@aliyun /]# passwd # 修改root用户密码
Changing password for user root..
New password: # 输入新密码
Retype new password: # 再次确认新密码
passwd: all authentication tokens updated successfully.
12345
[root@aliyun /]# passwd wuke # 修改wuke用户密码
Changing password for user hadoop.
New password: # 输入新密码
Retype new password: # 再次确认新密码
passwd: all authentication tokens updated successfully.
12345
一、passwd
常用参数如下:
-k #keep-tokens keep non-expired authentication tokens
注:保留即将过期的用户在期满后能仍能使用;-d #delete delete the password for the named account (root only)
注:删除用户密码,仅能以root权限操作;-l #lock lock the named account (root only)
注:锁住用户无权更改其密码,仅能通过root权限操作;-u #unlock unlock the named account (root only)
注:解除锁定;-f #force force operation
注:强制操作;仅root权限才能操作;-x #maximum=DAYS maximum password lifetime (root only)
注:两次密码修正的最大天数,后面接数字;仅能root权限操作;-n #minimum=DAYS minimum password lifetime (root only)
注:两次密码修改的最小天数,后面接数字,仅能root权限操作;-w #warning=DAYS
注:在距多少天提醒用户修改密码;仅能root权限操作;-i #inactive=DAYS
注:在密码过期后多少天,用户被禁掉,仅能以root操作;-S #status report password status on the named account (root only)
注:查询用户的密码状态,仅能root用户操作;
2.2.2、例如让某个用户不能修改密码,可以用-l
参数来锁定:
[root@aliyun /]# passwd -l wuk # 锁定用户wuke不能更改密码。
Locking password for user wuke.
passwd: Success # 锁定成功。
[wuke@aliyun ~]$ su - wuke # su切换到wuke用户。
[wuke@aliyun ~]$ passwd # wuke用户更改密码。
Changing password for user wuke.
Changing password for wuke
(current) UNIX password: # 输入wuke的当前密码。
passwd: Authentication token manipulation error # 失败,不能更改密码。
123456789
例如清除一个用户的密码 用参数-d
,密码清除后登录就无需密码。
[root@aliyun /]# passwd -d wuke # 清除wuke用户密码。
Removing password for user wuke.
passwd: Success # 清除成功。
[root@aliyun /]# passwd -S wuke # 查询wuke用户密码状态。
Empty password. # 空密码,没有密码
12345
2.2.3、密码时效命令:chage
,修改用户密码有效期限;chage
命令格式:chage [-l] [-m 最小天数] [-M 最大天数] [-W 警告] [-I 失效日] [-E 过期日] [-d 最后日] 用户
-m days
: 密码可更改的最小天数。为零时代表任何时候都可以更改密码。-M days
: 指定口令有效的最多天数。当该选项指定的天数加上-d选项指定的天数小于当前的日期时,用户在使用该帐号前就必须改变口令。-d days
: 指定从1970年1月1日起,口令被改变的天数。-I days
: 指定口令过期后,帐号被锁前不活跃的天数。如果值为0,帐号在口令过期后就不会被锁。-E date
: 指定帐号被锁的日期。日期格式YYYY-MM-DD。若不用日期,也可以使用自1970年1月1日后经过的天数。-W days
: 指定口令过期前要警告用户的天数。-l
: 列出指定用户当前的口令时效信息,以确定帐号何时过期。
例如设置用户wuke
两天内不能更改口令,并且口令最长的存活期为30天,并且口令过期前5天通知用户的命令:chage -m 2 -M 30 -W 5 wuke
查看用户wuke
当前的口令时效信息:chage -l wuke
备注:1.可以用chage user_name
进入交互模式修改用户的口令时效; 2.修改口令实质上就是修改口令文件/etc/shadow
中与口令时效相关的字段值。
2.2.4、passwd
修改密码
如果报错 passwd:Authentication token manipulation error
身份验证令牌操作错误,一般是密码文件的权限的问题,或者是该用户锁定不能修改密码,或者是根目录空间满了。
首先查看磁盘空间是否满了df -hl
,如果满了,查找出占用较大的无用文件清空或删除;常用到命令:
du -lh --max-depth=1
:查看当前目录下各文件大小du -sh
:查看当前目录总的大小du -sh * | sort -n
:统计当前目录下文件大小,并按文件大小排序du -sk file_name
:查看指定的file文件大小 2.可以用lsattr
命令查看存放用户和密码的文件属性lsattr /etc/passwd
、lsattr /etc/shadow
,(i
:不得任意更动文件或目录),如果有i
选项,则会导致所有的用户都不能修改密码,因为没有权限允许; 可以用chattr
命令将i权限撤销chattr -i /etc/passwd
、chattr -i /etc/shadow
,然后再修改用户密码。
三、删除用户
如果因为错误的方式添加了用户,而不知道如何解决,可以删除这个用户。以删除 wuke
这个用户为例子,首先终结该用户所有进程。
3.1、终止该用户所有进程
pkill -u wuke
3.2、输入删除命令
# `-r` 表示删除用户的同时,将其宿主目录和系统内与其相关的内容删除。
userdel -r wuke