Linux03-本地账户和组

目录

一、本地账户/etc/passwd

二、本地组/etc/group

三、切换账户su -

四、增删改本地账户useradd、userdel、usermod

五、账户默认配置文件/etc/login.defs 和 /etc/skel目录

六、设置密码passwd(5)命令

七、增删改组groupadd、groupdel和groupmod

八、通过sudo以root身份运行命令

九、管理用户密码/etc/shadow


管理账户和组的文件有4个:

  1.  /etc/passwd    存储本地账户信息
  2.  /etc/shadow    存储密码   存储账户和密码的属性  账户要激活,就要设置密码
  3.  /etc/group      账户组信息 主要记录附加组
  4.  /etc/login.defs     创建账户的时候会去读取的模板 

一、本地账户/etc/passwd

Linux系统中每个进程(运行程序)都作为一个特定账户运行。每个文件归一个特定账户所有。对文件和目录的访问收到账户的限制。与运行进程相关联的账户可确定该进程可访问的文件和目录。id命令用于显示账户信息。

[root@server0 ~]# id student
uid=1000(student) gid=1000(student) groups=1000(student),10(wheel)

每个账户有一个id号也就是uid来作为账户的唯一标识,系统用/etc/passwd文件来存储有关本地账户的信息。用冒号分隔7列信息。

username:password:uid:gid:gecos:home_dir:shell

  • username是账户名,是uid到名称的一种映射,方便用户使用;
  • password,以前用来放加密存储的密码,现在没啥用了,加密的密码存在/etc/shadow;
  • uid是账户id;
  • gid是账户主要组的id;
  • gecos是账户的真实姓名;
  • home_dir是账户的家目录;
  • shell是账户的登录shell;
[root@server0 ~]# head -n 5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

二、本地组/etc/group

与用户一样,组也有名称和编号gid。系统用/etc/group文件来存储本地组信息。用冒号分隔4列信息。

groupname:password:gid:list,of,users,in,this,group

  • groupname组名,是gid到名称的一种映射,方便用户使用;
  • password组密码,不常用;
  • gid是组的id;
  • list,of,users,in,this,group是属于这个组的用户列表,用逗号分隔;
[root@server0 ~]# head -n 5 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:

主要组

  • 每个账户只有一个主要组;
  • 对本地账户,主要组通过/etc/passwd文件第4个字段gid来定义;
  • 通常,账户创建的文件归主要组所有;
  • 通常,新建账户的主要组是名称与账户相同的新建组;

补充组

  • 账户可以有0个或任意个补充组;
  • 补充组用/etc/group文件的第4列来记录
  • 补充组成员身份用于帮助确保账户对系统文件和目录的访问

三、切换账户su - <username>

su命令可以切换账户。未指定账户名,意味着切换为root账户。用法是 su - <username>。

注意“-”的使用。

  • su - <username>启动登录shell,会将shell环境设置为username登录一样;
  • su  <username>启动非登录shell,只以username身份使用当前shell环境设置;忘记这条吧

大多数情况下,都是希望获得用户的常规设置,所以一定要加上“-”!

[student@server0 ~]$ su - root
Password: 
Last login: Sun Mar 29 16:44:19 CST 2020 on pts/0
[root@server0 ~]# 

四、增删改本地账户useradd、userdel、usermod

增删改分别用useradd、userdel、usermod命令。

useradd命令可以在添加账户时,设置/etc/passwd文件的7列值,也可以用选项指定这7列的值。除了这7列值以外,还有一些默认值,比如家目录下的.bash_profile等文件,这些默认值在/etc/login.defs文件中定义。

usermod命令可以修改账户的信息。useradd和usermod的大多数常用选项是可以通用的。

useradd和usermod常用选项
选项用途
-c为账户指定全名,也就是指定/etc/passwd的gecos字段。
-g为账户指定主要组,也就是指定/etc/passwd的gid字段。
-G

为账户指定补充组。单独使用-G指定一个补充组,账户就不再属于原来的补充组。

会修改/etc/group文件list,of,users,in,this,group

-a

与-G搭配使用,为账户添加补充组。-aG为账户添加一个补充组,账户仍属于原来的补充组。

会修改/etc/group文件list,of,users,in,this,group

-s

指定账户使用的登录shell,也就是指定/etc/passwd的shell字段。

-L锁定账户,也就是修改/etc/shadow的内容,使账户不能再登录。
-U

解锁账户,也就是修改/etc/shadow的内容,使账户可以继续登录。

userdel命令删除账户。userdel <username>从/etc/passwd中删除,但不删除账户的家目录。userdel -r <username>既从/etc/passwd中删除,也删除账户的家目录。如果删除账户时没有用-r,那么可能造成信息的泄露。比如添加了prince账户,再删除prince账户,再添加bob账户,这时原来prince的家目录已经变成了bob所有。prince的uid被认为是可以再分配给bob的,那么分配之后,没有被删除的prince的家目录就归bob所有。

这种情况,只能是删除时用-r,或者手动为不同账户分配“无人拥有”的文件,查找方式是 find / -nouser -o -nogroup 2>/dev/null

[root@server0 ~]# useradd prince
[root@server0 ~]# ll /home/
total 4
drwx------.  4 prince  prince    88 Apr  1 23:49 prince
drwx------. 10 student student 4096 Mar 29 09:31 student
[root@server0 ~]# id prince
uid=1001(prince) gid=1001(prince) groups=1001(prince)


[root@server0 ~]# userdel prince
[root@server0 ~]# ll /home/
total 4
drwx------.  4    1001    1001   88 Apr  1 23:49 prince
drwx------. 10 student student 4096 Mar 29 09:31 student


[root@server0 ~]# useradd bob
[root@server0 ~]# ll /home/
total 4
drwx------.  4 bob     bob       88 Apr  1 23:50 bob
drwx------.  4 bob     bob       88 Apr  1 23:49 prince
drwx------. 10 student student 4096 Mar 29 09:31 student
[root@server0 ~]# id bob
uid=1001(bob) gid=1001(bob) groups=1001(bob)

五、账户默认配置文件/etc/login.defs 和 /etc/skel目录

UID特定的号段在Redhat里面有特殊的意义。

  • UID 0 始终给root;
  • UID 1-200给“系统用户”,分配个Redhat的系统进程;
  • UID 201-999是一系列“系统用户”,给没有自己文件的系统进程使用;
  • UID 1000+可分配给普通用户

账户的密码有效期等也有默认的定义。

#QMAIL_DIR      Maildir
MAIL_DIR        /var/spool/mail
#MAIL_FILE      .mail

# Password aging controls:
#
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_MIN_LEN    Minimum acceptable password length.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000
UID_MAX                 60000
# System accounts
SYS_UID_MIN               201
SYS_UID_MAX               999

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000
GID_MAX                 60000
# System accounts
SYS_GID_MIN               201
SYS_GID_MAX               999

以上这些在/etc/login.defs里面定义。

新创建的用户,有默认的环境变量等,也就是家目录里默认的.bash_profile、.bashrc 和 .bash_logout 文件。这些文件都在 /etc/skel 目录里面,创建新账户的时候就从 /etc/skel 目录直接copy这3个文件给新账户。如果误删了账户的.bash*文件,也可以从这里copy过去补救一下。

六、设置密码passwd(5)命令

passwd给当前账户设置密码。passwd <username>给指定账户设置密码

passwd输入密码没有回显,为了看清指定的密码可以用--stdin选项,用法是。echo passwordstring | passwd --stdin <username>

七、增删改组groupadd、groupdel和groupmod

使用类似的groupadd、groupdel和groupmod,具体使用可以man一下

下面实验

  • 创建账户user1、user2,密码分别为qwe123、1qazxsw2;
  • 创建账户组 sys1 、sys2;
  • user1的shell是/sbin/nologin;
  • user1附属组是sys1  sys2 ;
  • user2的主要组是sys2 , 附属组是sys1  user1;
  • passwd 设置密码,账户才被激活;
  • 创建账户zhangsf,全名ZhangSanFeng,uid为2333,shell为/sbin/nologin,创建完成后增加补充组user1、sys1和sys2;

虽然user1被激活,但是shell是/sbin/nologin还是不能登录。

[root@server0 ~]# groupadd sys1
[root@server0 ~]# groupadd sys2
[root@server0 ~]# useradd -s /sbin/nologin -G sys1,sys2 user1
[root@server0 ~]# useradd -g sys2 -G sys1,user1 user2

[root@server0 ~]# id user1
uid=1001(user1) gid=1003(user1) groups=1003(user1),1001(sys1),1002(sys2)
[root@server0 ~]# id user2
uid=1002(user2) gid=1002(sys2) groups=1002(sys2),1001(sys1),1003(user1)

[root@server0 ~]# echo qwe123 | passwd --stdin user1
[root@server0 ~]# echo 1qazxsw2 | passwd --stdin user2

[root@server0 ~]# useradd -s /sbin/nologin -u 2333 -c ZhangSanFeng zhangsf
[root@server0 ~]# usermod -aG user1,sys1,sys2 zhangsf
[root@server0 ~]# id zhangsf
uid=2333(zhangsf) gid=2333(zhangsf) groups=2333(zhangsf),1001(sys1),1002(sys2),1003(user1)

[root@server0 ~]# tail -n 5 /etc/passwd
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
user1:x:1001:1003::/home/user1:/sbin/nologin
user2:x:1002:1002::/home/user2:/bin/bash
zhangsf:x:2333:2333:ZhangSanFeng:/home/zhangsf:/sbin/nologin

[root@server0 ~]# tail -n 5 /etc/group
slocate:x:21:
sys1:x:1001:user1,user2,zhangsf
sys2:x:1002:user1,zhangsf
user1:x:1003:user2,zhangsf
zhangsf:x:2333:

[root@server0 ~]# tail -n 5 /etc/shadow
gnome-initial-setup:!!:16442::::::
tcpdump:!!:16442::::::
user1:$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:18353:0:99999:7:::
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::

八、通过sudo以root身份运行命令

sudo命令可以使账户根据/etc/sudoers文件中的设置,以root或其他账户身份运行命令。sudo要求输入自己的密码来进行身份验证,而不是输入他们要以什么账户(root)的密码。编辑/etc/sudoers文件用命令visudo。

这样的好处是,可以把一部分命令交给非root账户去做,而不是像su - <username>那样真的变成root,也不用告知root密码。所有sudo运行的命令都会记录到/var/log/secure日志中。

比如,添加账户useradd是root身份执行的命令,现在用user2身份添加账户user3。

[root@server0 ~]# su - user2
[user2@server0 ~]$ sudo useradd user3

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for user2: 
user2 is not in the sudoers file.  This incident will be reported.

[root@server0 ~]# tail -n 2 /var/log/secure
Apr  2 00:40:39 localhost sudo: user2 : user NOT in sudoers ; TTY=pts/1 ; PWD=/home/user2 ; USER=root ; COMMAND=/sbin/useradd user3
Apr  2 00:40:56 localhost su: pam_unix(su-l:session): session closed for user user2

我们在/etc/sudoers里面增加user2以后再尝试一下。可以看到,user2也能添加user3,而且/var/log/secure里面记录了是user2添加的用户。

[root@server0 ~]# visudo
[root@server0 ~]# cat /etc/sudoers | grep user2
user2	ALL=/usr/sbin/useradd

[root@server0 ~]# su - user2
Last login: Thu Apr  2 00:40:08 CST 2020 on pts/1

[user2@server0 ~]$ sudo useradd user3
[sudo] password for user2: 
[user2@server0 ~]$ id user3
uid=2334(user3) gid=2334(user3) groups=2334(user3)
[user2@server0 ~]$ exit
logout

[root@server0 ~]# tail -n 4 /var/log/secure
Apr  2 00:47:15 localhost sudo: user2 : TTY=pts/1 ; PWD=/home/user2 ; USER=root ; COMMAND=/sbin/useradd user3
Apr  2 00:47:15 localhost useradd[5576]: new group: name=user3, GID=2334
Apr  2 00:47:15 localhost useradd[5576]: new user: name=user3, UID=2334, GID=2334, home=/home/user3, shell=/bin/bash
Apr  2 00:49:30 localhost su: pam_unix(su-l:session): session closed for user user2

九、管理用户密码/etc/shadow

/etc/shadow用于存储用户的加密密码和密码策略。其格式是用冒号分隔9列信息

name:password:lastchange:minage:maxage:warning:inactive:expire:blank

  • name是用户名;
  • password是经过加密的密码,如果密码开头是感叹号,表示密码被锁定;
  • lastchange最后一次更改密码的日期,距离1970.01.01的天数;
  • minage表示lastchange后最少经过minage才能更改密码,0表示没有最短期限要求;
  • maxage表示lastchange后最多经过maxage必须更改密码;
  • warning表示密码即将到期的警告期,0表示不提供警告;
  • inactive密码到期后保持活动的天数,在此期限内用户仍可以登录系统并更改密码,在指定天数过后,账户被锁定,变为不活动;
  • expire账户到期日期,距离1970.01.01的天数,与前面密码的期限不同,这个expire指的是账户的期限;
  • blank为预留字段,供未来使用;

/etc/shadow里面很多字段都是用距离1970.01.01的天数来作为值的,怎么才能计算出这个天数是多少呢?那就是使用date命令,可以用来计算距离某天多少天的日期,或者某天距离某天多少天。date -d加上简单的描述字符就知道这个天数是多少了。

[root@server0 ~]# date -d "19700101+18376days"
Fri Apr 24 00:00:00 CST 2020

通过chage命令可以修改某个账户的密码有效期设置。

chage -l user1 查看用户user1的密码设置。

chage -m 0 -M 90 -W 8 -I 14 -E 2021-01-01 user1 将用户user1的密码设置更改为最后一次更改密码(2020-April-01)后最少0天可以改密码,最多90天(2020-June-30)就必须改密码,到期前8天开始提示改密码,到期后宽限到14天(2020-July-14),账户有效期到2021-January-01。

[root@server0 ~]# tail -n 5 /etc/shadow
tcpdump:!!:16442::::::
user1:$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:18353:0:99999:7:::
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::
user3:!!:18353:0:99999:7:::
[root@server0 ~]# 
[root@server0 ~]# chage -l user1
Last password change					: Apr 01, 2020
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

[root@server0 ~]# chage -m 0 -M 90 -W 8 -I 14 -E 2021-01-01 user1
[root@server0 ~]# 
[root@server0 ~]# chage -l user1
Last password change					: Apr 01, 2020
Password expires					: Jun 30, 2020
Password inactive					: Jul 14, 2020
Account expires						: Jan 01, 2021
Minimum number of days between password change		: 0
Maximum number of days between password change		: 90
Number of days of warning before password expires	: 8
[root@server0 ~]# 
[root@server0 ~]# tail -n 5 /etc/shadow
tcpdump:!!:16442::::::
user1:$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:18353:0:90:8:14:18628:
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::
user3:!!:18353:0:99999:7:::

chage -d 0 user1 设置user1必须改秘密。

[root@server0 ~]# chage -d 0 user1
[root@server0 ~]# chage -l user1
Last password change					: password must be changed
Password expires					: password must be changed
Password inactive					: password must be changed
Account expires						: Jan 01, 2021
Minimum number of days between password change		: 0
Maximum number of days between password change		: 90
Number of days of warning before password expires	: 8
[root@server0 ~]# 
[root@server0 ~]# tail -n 5 /etc/shadow
tcpdump:!!:16442::::::
user1:$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:0:0:90:8:14:18628:
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::
user3:!!:18353:0:99999:7:::

usermod -L user1 可以用来锁定账户。被锁定的账户的密码前面会多一个感叹号 !,注意观察。usermod -U user1可以用来解锁账户。

[root@server0 ~]# tail -n 5 /etc/shadow
tcpdump:!!:16442::::::
user1:$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:0:0:90:8:14:18628:
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::
user3:!!:18353:0:99999:7:::
[root@server0 ~]# 
[root@server0 ~]# 
[root@server0 ~]# usermod -L user1
[root@server0 ~]# 
[root@server0 ~]# tail -n 5 /etc/shadow
tcpdump:!!:16442::::::
user1:!$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:0:0:90:8:14:18628:
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::
user3:!!:18353:0:99999:7:::
[root@server0 ~]# 
[root@server0 ~]# usermod -U user1
[root@server0 ~]# 
[root@server0 ~]# tail -n 5 /etc/shadow
tcpdump:!!:16442::::::
user1:$6$/k.D4qEv$91dHDyIITezuVESaFJrpZiwTWicsZr9cDqPLU9sFC6vywKSeQcK7.zKNWDg85.uGciCij/ra18oubOwqYvCeU/:0:0:90:8:14:18628:
user2:$6$0t/TYhB6$4iM1CO8hlHfxt/RX6/Xj9O7AHNO4irbyMXMNJ2d2/YSZM1IDO.69JQIhJgb.cOn5C5L0oqAeMt/7Ns2SMYgUp0:18353:0:99999:7:::
zhangsf:!!:18353:0:99999:7:::
user3:!!:18353:0:99999:7:::

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦行僧(csdn)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值