Linux 用户操作

49 阅读11分钟

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的意义在于给受信任的用户提供最少的执行障碍。

一、新增用户

创建用户有两条命令:addueruseradd,对应着两条删除用户的命令:deluseruserdel
这两种命令之间的区别:

  • 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用户运行passwdpasswd 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/passwdlsattr /etc/shadow,(i:不得任意更动文件或目录),如果有i选项,则会导致所有的用户都不能修改密码,因为没有权限允许; 可以用chattr命令将i权限撤销 chattr -i /etc/passwdchattr -i /etc/shadow,然后再修改用户密码。

三、删除用户

如果因为错误的方式添加了用户,而不知道如何解决,可以删除这个用户。以删除 wuke 这个用户为例子,首先终结该用户所有进程。

3.1、终止该用户所有进程

pkill -u wuke

3.2、输入删除命令

# `-r` 表示删除用户的同时,将其宿主目录和系统内与其相关的内容删除。
userdel -r wuke