linux用户管理

        用户在操作系统中是非常重要的,我们登录系统、访问共享文件夹等都需要用户进行验证。所以,掌握管理用户的知识是非常有必要的。

        说到用户,我们会提到两个名词:账户信息和密码信息。

        (1)账户信息:以QQ为例,可以理解为QQ号码、QQ签名、QQ中填写的个人资料等。

        (2)密码信息:以QQ为例,就是登录QQ的密码。

        用户的账户信息是存储在/etc/passwd中的,在此文件中一行一个用户信息,各字段用“:”隔开,如下图

        1:用户名。

        2:原来此处用于存储用户的密码,因为安全性问题,这里统一用x作为占位符。

        3:用户的uid,每个用户都会有一个 user id,简称为uid。root的uid为0.

        4:用户的gid,每个组也都会有一个 group id,简称为 gid.

        5:用户的描述信息。

        6:用户的家目录。

        7:用户的shell。

        上面的命令也可以通过“getent passwd 用户名”来获取

[root@jiayi ~]# getent passwd jiayi
jiayi:x:1000:1000:jiayi:/home/jiayi:/bin/bash

        用户的密码信息存储在/etc/shadow中

[root@jiayi ~]# grep jiayi /etc/shadow
jiayi:$6$U682vTTTdXRA/ANv$AP1ZUmJ23/iClcruwlsNE2GZwpA7DqNmWEkA86IgdWOqyxvbKENM76RFYgfxrw9Z4QDxXL6yxP6H9CBRjHUBU/::0:99999:7:::

        上面第一个和第二个冒号之间的斜体字就是被加密后的密码。上面的信息也可以通过"“getent shadow用户名”来获取

[root@jiayi ~]# getent shadow jiayi
jiayi:$6$U682vTTTdXRA/ANv$AP1ZUmJ23/iClcruwlsNE2GZwpA7DqNmWEkA86IgdWOqyxvbKENM76RFYgfxrw9Z4QDxXL6yxP6H9CBRjHUBU/::0:99999:7:::

        判断一个用户是否存在,可以使用“id 用户名”命令,如下所示。

[root@jiayi ~]# id tom
id: “tom”:无此用户

        这里tom用户不存在,则显示无此用户。如果用户存在,则显示用户信息

        1:显示用户的uid信息。

        2:显示用户的gid信息。

        3:显示用户的gid信息。

如果id后面没有跟用户,则显示当前用户自己的信息。

[root@jiayi ~]# id
uid=0(root) gid=0(root) 组=0(root)

1.管理用户

管理用户包括创建用户和修改用户属性。

        利用useradd命令可以创建用户,useradd中常见的选项包括8种。

        (1)-d:指定用户的家目录,默认为/home/用户名。

        (2)-m:创建家目录,这是默认选项,一般不用指定。

        (3)-M:不为用户创建家目录,即创建好用户之后没有“/home/用户名”。

        (4)-s:指定用户的shell,默认为/bin/bash。

        (5)-c:用来指定备注信息,不指定则为空。

        (6)-u:指定用户的uid。

        (7)-g:默认情况下,创建用户时会创建一个同名组。例如,创建tom用户,则会创建一个tom组,然后把 tom用户加人 tom组中。如果指定了-g root,则创建用户时直接把tom加入root组,就不会再创建tom组,此时 tom只属于一个组。

        (8)-G:指定附属组,即把用户加人一个额外的组,此时 tom属于两个组。如果同时指定-g和-G选项,如-g root-G users,这里的意思是不再为tom创建命名组,直接加入root组,同时再额外地加入users组,此时tom 就属于两个组,即root和users组。

        下面创建tom用户

[root@jiayi ~]# useradd -d /tom -s /sbin/nologin \
> -c "Im tom" -u 2000 -g root -G users tom

        这里创建一个tom用户,因为命令太长,所以最后加一个反斜线后按【Enter】键,这里虽然换行了,但是系统会认为仍然是一行的。

        记住,反斜线后面不能有空格,按【Enter】键之后前面会自动出现一个提示符“>”,这个“>”不是我们输入的。

        现在查看tom用户的属性

[root@jiayi ~]# grep tom /etc/passwd
tom:x:2000:0:Im tom:/tom:/sbin/nologin

        可以看到,这里tom用户的属性完全是按照我们的要求创建出来的。

        查看密码信息

[root@jiayi ~]# grep tom /etc/shadow
tom:!!:19692:0:99999:7:::

        因为我们在创建用户时,并没有指定用户的密码,所以这里密码为空。当我们创建用户时,没有给这个用户设置密码,则这个用户是处于被锁定状态,即不能登录

[root@jiayi ~]# passwd -S tom
tom LK 2023-11-30 0 99999 7 -1 (密码已被锁定。)

        现在为 tom用户设置密码,可以使用

[root@jiayi ~]# passwd tom
更改用户 tom 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

        这里把密码设置为jiayi001,或者使用

[root@jiayi ~]# echo jiayi001 | passwd --stdin tom
更改用户 tom 的密码 。
passwd:所有的身份验证令牌已经成功更新。

        再次查看用户的状态

[root@jiayi ~]# passwd -S tom
tom PS 2023-11-30 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

        这里显示了用户已经设置了密码。查看密码信息

[root@jiayi ~]# grep tom /etc/shadow
tom:$6$HktM5SJ6MXe7Dfz5$wwFmxdy7.M5t8XDvOSsZUw3jm447RudXZ.HY/KRfp8WPdPJk3UKdcC7plSlaHAfw1kRhmUAWU5z9a7NslZn3a.:19692:0:99999:7:::

        这里已经有了密码。

        但是现在用户仍然是不能登录的,所以用su命令切换到tom用户。

[root@jiayi ~]# su - tom
This account is currently not available.

        这是因为tom用户的shell被设置为了/sbin/nologin,任何用户的shell 被设置为/sbin/nologin,则此用户是不能登录系统的。那么,创建此用户的意义何在?很多时候我们搭建了服务,如用samba共享了一个目录,希望其他主机来访问此共享目录时不能以匿名用户访问,必须输入相关的用户名和密码,但又不想让他能登录系统,这种情况下就可以用到了

2.修改用户属性

        如果想修改用户属性,可以使用usermod命令。usermod命令所能用到的选项与useradd是差不多的,下面讲最常见的5个选项。

        (1)-c:修改注释信息。

        (2)-s:修改shell信息。

        (3)-d:修改家目录。

        (4)-L:锁定用户。

        (5)-U:解锁用户。

        把tom的shell改成/bin/bash,并把备注信息改成hello tom

[root@jiayi ~]# usermod -s /bin/bash -c "Hello Tom" tom
[root@jiayi ~]# grep tom /etc/passwd
tom:x:2000:0:Hello Tom:/tom:/bin/bash

1、锁定用户

[root@jiayi ~]# usermod -L tom
[root@jiayi ~]# passwd -S tom
tom LK 2023-11-30 0 99999 7 -1 (密码已被锁定。)

        锁定用户,使用root用户是可以用su命令切换过去的,但是使用其他用户是不能用su命令切换过去的

[root@jiayi ~]# su - tom
[tom@jiayi ~]$ exit
注销

        再打开一个终端,这个终端中是以jiayi用户登录的,然后通过su命令切换到tom用户

[jiayi@jiayi ~]$ su - tom
密码:
su: 鉴定故障

        可以看到,blab用户不能用su命令切换过去,提示为鉴定故障。

2、解锁用户

        如果要解锁用户,可以使用usermod -U命令。下面把 tom用户解锁。

[root@jiayi ~]# usermod -U tom
[root@jiayi ~]# passwd -S tom
tom PS 2023-11-30 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

        在第二个终端中 blab 用户用 su 命令切换到 tom 用户

[jiayi@jiayi ~]$ su - tom
密码:
[tom@jiayi ~]$ whoami
tom
[tom@jiayi ~]$ pwd
/tom
[tom@jiayi ~]$ exit
注销

        此时其他用户是可以正常切换的。

3、修改用户的家目录

        前面已经看到了, tom用户的家目录设置为/tom,现在想把家目录改成/home/tom

[root@jiayi ~]# usermod -d /home/tom tom
[root@jiayi ~]# grep tom /etc/passwd
tom:x:2000:0:Hello Tom:/home/tom:/bin/bash

        可以看到,tom用户的家目录已经设置为了/home/tom。在第二个终端中测试

[root@jiayi ~]# su - tom
su: 警告:无法更改到 /home/tom 目录: 没有那个文件或目录

        这里显示无法切换到/home/tom。因为创建用户时用户的家目录是创建在/tom下的,但是手动修改tom的家目录为/home/tom,这个家目录并没有在/home下创建,所以才会出现刚才的问题。我们只要把原来的家目录拷贝过去即可,在第一个终端中执行

[root@jiayi ~]# cp -a /tom/ /home/
[root@jiayi ~]# ls /home/
jiayi  tom

        再回到第二个终端中测试

[jiayi@jiayi ~]$ su - tom
密码:
[tom@jiayi ~]$ pwd
/home/tom
[tom@jiayi ~]$ exit
注销

        可以看到,已经可以切换到家目录了。

4.管理组

        所有组的信息都是放在/etc/group中的,如果要判断一个组是否存在,可以到/etc/group中查询。例如,现在判断xi组是否存在

[root@jiayi ~]# grep xi /etc/group

        没有任何输出,说明xi组不存在。如果想创建一个新的组,则用“groupadd 组名”命令。例如,现在要创建xi组


[root@jiayi ~]# grep xi /etc/group
xi:x:1001:

        如果要删除某个组,则用“groupdel组名”命令。例如,现在要删除xi组

[root@jiayi ~]# groupdel xi
[root@jiayi ~]# grep xi /etc/group

        创建组时,可以通过-g选项来指定gid信息。例如,创建xi组,组id设置为3000

[root@jiayi ~]# groupadd -g 3000 xi

[root@jiayi ~]# grep 3000 /etc/group
xi:x:3000:

        查看用户属于哪个组的,可以通过“groups用户”来查看。例如,查看tom属于哪个组

[root@jiayi ~]# groups tom
tom : root users

        可以看到,tom属于root和users 组。如果想把用户继续添加到其他组中,可以通过“gpasswd -a用户组”来添加。例如,现在要把tom 加入bin组

[root@jiayi ~]# gpasswd -a tom bin
正在将用户“tom”加入到“bin”组中
[root@jiayi ~]# groups tom
tom : root bin users

        可以看到,tom已经属于bin组了。

        要是想把用户从某个组中踢出去,则通过“gpasswd -d用户组”来删除。例如,现在要把 tom从 bin组中删除,命令如下。

[root@jiayi ~]# gpasswd -d tom bin
正在将用户“tom”从“bin”组中删除
[root@jiayi ~]# groups tom
tom : root users

        可以看到,tom已经不属于bin组了。

3.用户的密码策略

        很多人是没有修改密码的习惯的,设置了一个密码就一直使用下去,这样会带来一定的安全隐患。所以,为了提高安全性,需要设置一定的密码策略,使用的命令是chage。

        chage常见的选项包括以下几个。

        (1)-l:列出用户的信息。

        可以看到,tom的密码是在2023年12月1日修改的。

        (2)-d:用于更改最近一次修改密码的日期,如改成2023年11月01日。

        (3)E:设置此账户什么时候过期,如要设置2024年1月1日过期。

        那么,tom用户到了2024年1月1日就会被锁定,不能登录系统了。

        (4)-E -1:设置为永不过期。

        (5)-E 1:设置为立即过期。

        (6)-M:最大使用天数,过了这个天数还没有修改密码,账户将被锁定。

        (7)-m:最小使用天数,两次修改密码的间隔不得低于这个天数,不能今天改了明天再改回去。

        (8)-W:达到最大使用天数之前,提前几天警告。如同房贷,提前一周短信通知用户银行卡余额要足够。

        (9)-I:达到最大使用天数之后还没有修改密码,不会立即锁定账户,而是会给几天的缓冲期,但是在缓冲期内不管何时登录系统,都会强迫你修改密码。如果在缓冲期内也没有修改密码,则会锁定账户。

        这里把最小使用天数设置为5天,最大使用天数设置为30天,警告天数设置为6天,缓冲期设置为3天。我们能看到上次修改密码是在2023年11月01日,到2023年12月01日是最大使用天数了,加上3天的缓冲期即2023年12月4日,到现在还在缓冲期内(做本实验的日期是2023年12月1日)。

        在第二个终端中jiayi用户用su命令切换到 tom用户。

        此处输入原来的密码之后并没有进入系统,而是开始强制让用户设置新密码了。

        在第一个终端中,再次把密码设置为jiayi001。

        设置下次登录强制修改密码

        此时tom登录时,必须重置密码才可以

        上面关于账户的锁定及密码的过期时间,也可以使用passwd合今来实现

        这里需要注意的是,如果想清除某用户的密码,可以使用“passwd -d 用户名”命令来实现,命令如下

        tom 再登录系统时,是不需要密码

        删除用户的命令是userdel

        userdel后面加上r选项的意思是除删除此用户外,还把用户的家目录、邮件等全部删除

4.用户授权

        前面讲了普通用户很多时候权限是不够的,例如,下面的命令

[jiayi@jiayi ~]$ mount /dev/cdrom /mnt/
mount: 只有 root 能执行该操作

        要执行该操作,需要使用su命令切换到root。但是并不希望其他人知道root密码,那怎么办?我们可以让root用户通过 sudo对普通用户进行授权。

        首先查看本机的主机名

[root@jiayi ~]# hostname
jiayi

        到/etc/sudoers.d下随便创建一个文件,建议使用用户名作为文件名(不过文件名可以随便取),这样比较方便看出来是对哪个用户授权的。假设现在对jiayi用户授权,则创建文件/etc/sudoers.d/blab,文件中的格式如下。

userX 主机名 Z=(userY) 命令1,命令2,命令3,...

        这里表明授权用户userX在主机名Z这台主机上有权限执行命令1,命令2,命令3…。需要注意的是,这里主机名要写本机的主机名,不要写错了。为了防止写错,可以把主机名写成ALL。

        假设现在授权 jiayi用户在本机能以root身份使用mount命令,编辑内容如下。

[root@jiayi ~]# cat /etc/sudoers.d/jiayi 
jiayi jiayi=(root)  /bin/mount

        用户要是想执行sudo授权过的命令,则命令前面要加上 sudo。

        在另外一个终端中执行mount命令

[jiayi@jiayi ~]$ sudo mount /dev/cdrom /mnt/

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] jiayi 的密码:
mount: /mnt: WARNING: device write-protected, mounted read-only.

        可以看到,已经可以执行了,这里输入的密码会保留5分钟,5分钟之内再次执行sudo是不需要密码的,过了5分钟再执行sudo命令则还需要输入密码。可以使用sudo -k命令立即清除记忆的密码。

        下面执行umount命令

[jiayi@jiayi ~]$ sudo umount /mnt 
对不起,用户 jiayi 无权以 root 的身份在 jiayi 上执行 /bin/umount /mnt。

        还是不行,为何?因为我们只授权jiayi执行 mount命令、并没有授权执行umount 命令。下面使用root授权 blab 能执行umount命令,修改/etc/sudoers.d/blab的内容

[root@jiayi ~]# cat /etc/sudoers.d/jiayi 
jiayi jiayi=(root)  /bin/mount,/bin/umount

        此时已经对 jiayi 授权mount和 umount 命令,然后到第二个终端中再次执行如下

[jiayi@jiayi ~]$ sudo umount /mnt 

        查看lduan被授权执行哪些命令,可以通过sudo -l来查看

[jiayi@jiayi ~]$ sudo -l
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME
    HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
    LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 jiayi 可以在 jiayi 上运行以下命令:
    (root) /bin/mount, /bin/umount

        .前面介绍了sudo命令需要输人密码,这个密码会保留5分钟,如果想修改此默认时间,可以通过vim修改letc/sudoers,添加 Defaults timestamp_timeout=N,此处N为一个数字,单位为分钟。

        如果想立即清除保存的密码,使用sudo -k即可。如果想让jiayi执行授权命令时不需要输入密码,则可以加上NOPASSWD,修改/etc/sudoers.d/jiayi的内容

[root@jiayi ~]# cat /etc/sudoers.d/jiayi 
jiayi jiayi=(root) NOPASSWD: /bin/mount,/bin/umount

在另外一个终端中验证

[jiayi@jiayi ~]$ sudo -k
[jiayi@jiayi ~]$ sudo mount /dev/cdrom /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.

        此时并没有输人密码,这里特意执行 sudo -k命令的目的就是确保没有缓存密码。如果想授权所有命令给jiayi,则可以在命令位置上用ALL替代。

[root@jiayi ~]# cat /etc/sudoers.d/jiayi 
jiayi jiayi=(root)  NOPASSWD: ALL

        此时jiayi用户通过sudo -i无密码切换到root用户

[jiayi@jiayi ~]$ sudo -i
[root@jiayi ~]# exit
注销

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值