Linux--用户管理(1)

1. 文件属性

通过ls -l filename可以查看文件属性。
在这里插入图片描述
在这里插入图片描述
第一个属性代表这个文件的类型:

档案类型描述
d目录
-普通文件
l链接文件
b可存储的接口设备
c串行端口设备,例如键盘、鼠标
ssocket,数据接口文件
pFIFO,数据传输文件

接下来的属性,三个为一组,以r,w,x为组合,r代表可读,w代表可写,x代表可执行。

2. 用户权限

2.1 使用者和群组

任何一个文件都具有User, Group 及 Others三个权限。User是一个文件的拥有者,Group是文件所在的群组,Others是不属于某一群组的用户。

2.1.2 用户登入linux的过程

  1. 先读取/etc/passwd中账号信息,找到对应的UID(User ID)和GID(Group ID),linux是根据id来识别用户的;
  2. 再读取/etc/shadow文件,找到对应的账号和UID核对密码是否正确;
  3. 如果密码正确,就可以进入shell。

2.1.2 /etc/passwd,/etc/shadow

这两个文件是账号管理最重要的文件。

  • /etc/passwd
    该文件存放着账户信息,里面原先就有的账户为系统账户,保障着系统正常的运行。文件内容如下图:
    在这里插入图片描述
    每一行为一个用户信息,通过“:”分隔,主要分为7个部分,分别是:

      1. 账号名称
      2. 密码,现在密码不存储在这里,x表示密码移动到/etc/shadow中
      3. UID,使用者的ID
    
id范围描述
0代表系统管理员,除了root用户,其他用户的UID改为0,那么那个用户也会变成系统管理员
1~499保留给系统用的ID,1~99会保留给系统预设的·账号,100~499则保留给一些服务来使用
500~2^32-1给一般使用者使用
4. GID,所在群组的ID,与/etc/group中设定有关
5. 使用者信息说明
6. 家目录
7. 使用shell的版本路径
  • /etc/shadow
    在这里插入图片描述
    shadow中一行以“:“为分隔符,分为9个部分:

      	1. 账户名称 ,必须与/etc/passwd中相同
      	2. 密码,若密码栏第一个字符为”*“或”!",表示这个账号并不会被用来登入。
      	3. 最近更动密码的日期,1970年1月1日作为1,1971年1月1日则为366
      	4. 密码不可被变更的天数,若为0,表示密码随时可以变动
      	5. 密码需要重新变更的天数,若为99999就表示密码不需要重新更改
      	6. 密码需要变更期限前的警告期限
      	7. 密码过期的延缓时间,若密码过期,在延缓时间内还可以登录,过了这个时间,密码就失效了
      	8. 账号失效日期
      	9. 保留 
    

2.1.3 /etc/group,/etc/gshadow

  • /etc/group
    这个文件记录着GID和群组名称,内容如下:在这里插入图片描述
    每一行以冒号作为分隔符,分为四个部分:

    1. 群组名称
    2. 群组密码,通常不需要设定,密码被记录在/etc/gshadow中
    3. GID,群组的ID,与/etc/passwd中的GID相对应
    4. 群组中的所有账号,与逗号分隔
  • /etc/gshadow
    在这里插入图片描述
    每一行以冒号作为分隔符,分为四个部分:

      1. 群组名称
      2. 密码。开头为!表示无法登入
      3. 群组管理员账号
      4. 群组中的所有账号,与逗号分隔
    

初始群组和有效群组

初始群组指是用户登入系统中,就会拥有的各个群组的相关权限。

newgrp命令可以变更有效群组。

groups命令查看当前用户的所在群组,第一个输出的群组即是有效群组。

2.2 账号管理

2.2.1 新增、删除用户

useradd
Usage: useradd d [-u UID] [-g initial_group] [-G other_group]
Options:
  -g, --gid GROUP               指定某账户群组的GID
  -G, --groups GROUPS           指定某个群组名称
  -u, --uid UID                 指定UID
  -U, --user-group              创建和用户名相同的群组名

实例:

# 创建一个默认的用户
[root@localhost tmp]# useradd user1
[root@localhost tmp]# ls -l /home/
total 8
drwx------. 4 hadoop hadoop 4096 Feb  9 15:16 hadoop
drwx------. 4 user1  user1  4096 Feb  9 21:00 user1
#此用户的UID为502,GID为502,家目录为/home/user1,群组名和用户名同名
#/etc/passwd中密码栏中为!!,说明用户不可登录,需要使用passwd
[root@localhost tmp]# grep user1 /etc/passwd /etc/shadow /etc/group
/etc/passwd:user1:x:502:502::/home/user1:/bin/bash
/etc/shadow:user1:!!:18302:0:99999:7:::
/etc/group:user1:x:502:

#创建指定用户id和群组名称的账号
[root@localhost tmp]# useradd -u 700 -g users user2
[root@localhost tmp]# grep user2 /etc/passwd /etc/shadow /etc/group
/etc/passwd:user2:x:700:100::/home/user2:/bin/bash
/etc/shadow:user2:!!:18302:0:99999:7:::

# 创建一个系统账号
[root@localhost tmp]# useradd -r user3
[root@localhost tmp]# grep user3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:user3:x:496:493::/home/user3:/bin/bash
/etc/shadow:user3:!!:18302::::::
/etc/group:user3:x:493:
新建用户相关设定文件

使用useradd来新增账户时,相关信息参考/etc/default/useradd这个文件内容设定的。
在这里插入图片描述
用户家目录参考/etc/skel/*目录来创建。
用户的UID和GID参考/etc/login.defs文件来设定。

# 用户预设邮件的放置目录
MAIL_DIR        /var/spool/mail
# /etc/shadow的第5栏,重置密码的时间间隔
PASS_MAX_DAYS   99999
# /etc/shadow的第4栏,密码不可变更得时间
PASS_MIN_DAYS   0
# 密码最短的字符长度
PASS_MIN_LEN    5
# /etc/shadow的第6栏,密码需要变更期限前的警告期限
PASS_WARN_AGE   7
#用户最小的UID,小于500的UID为系统保留
UID_MIN                   500
#用户可以使用的最大UID
UID_MAX                 60000
#用户群组最小的GID,小于500为系统保留
GID_MIN                   500
#用户群组可以使用的最大GID
GID_MAX                 60000
#在不加-M,-m时,是否主动建立用户家目录 
CREATE_HOME     yes
#文件的默认权限
UMASK           077
#指定删除用户的时候是否同时删除用户组,准备地说,这里指的是删除用户的初始组,此项的默认值为 yes。 
USERGROUPS_ENAB yes
#指定用户密码采用的加密规则,默认采用 SHA512 
ENCRYPT_METHOD SHA512

useradd在建立用户时,至少参考:

  • /etc/default/useradd
  • /etc/login.defs
  • /etc/skel/*
passwd
Usage: passwd [OPTION...] <accountName>
  -k, --keep-tokens       保留未过期的身份认证
  -d, --delete            删除指定账户的密码(仅限root用户)
  -l, --lock              锁定指定账户的密码(仅限root用户)
  -u, --unlock            解锁指定账户的密码(仅限root用户)
  -e, --expire            指定帐户的密码过期(仅限root用户)
  -f, --force             强制操作
  -x, --maximum=DAYS      最大密码生存期(仅限root用户)
  -n, --minimum=DAYS      最小密码生存期(仅限root用户)
  -w, --warning=DAYS      在密码过期之前警告用户的天数(仅限root用户)
  -i, --inactive=DAYS     密码过期后禁用帐户的天数(仅限root用户)
  -S, --status            报告指定帐户的密码状态(仅限root用户)
  --stdin                从stdin中读取新令牌(仅限root用户)
 
Help options:
  -?, --help              展示命令的帮助信息
  --usage                 显示使用信息
usermod
Usage: usermod [options] LOGIN
 
Options:
  -c, --comment COMMENT         后面接账号的说明,即 /etc/passwd 第五栏的说明栏,可以加入一些账号的说明。
  -d, --home HOME_DIR           后面接账号的家目录,即修改 /etc/passwd 的第六栏
  -e, --expiredate EXPIRE_DATE  后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 内的第八个字段数据
  -f, --inactive INACTIVE       set password inactive after expiration
                                to INACTIVE
  -g, --gid GROUP               后面接 group name,修改 /etc/passwd 的第四个字段,亦即是 GID 的字段
  -G, --groups GROUPS           后面接 group name,修改这个使用者能够支持的群组,修改的是 /etc/group 
  -a, --append                 将用户添加到-G中提到的群组,而不从其他组中删除这个用户
  -h, --help                    显示该命令的使用方法
  -l, --login NEW_LOGIN         后面接账号名称。亦即是修改账号名称, /etc/passwd 的第一栏
  -L, --lock                    暂时将使用者的密码冻结,让他无法登入。其实仅改 /etc/shadow 的密码栏
  -m, --move-home               将主目录的内容移动到新位置(仅与-d一起使用)
  -o, --non-unique              允许使用重复的(非唯一的)UID
  -p, --password PASSWORD      使用加密的密码作为新密码
  -R, --root CHROOT_DIR         改变根目录
  -s, --shell SHELL             改变shell版本
  -u, --uid UID                 用户的UID
  -U, --unlock                  将 /etc/shadow 密码栏的 ! 拿掉,解除冻结
  -Z, --selinux-user SEUSER     用户账号对应得 SELinux用户

实例:

#修改用户的说明栏
root@localhost skel]# usermod -c "user2 testing" user2
[root@localhost skel]# grep user2 /etc/passwd
user2:x:700:100:user2 testing:/home/user2:/bin/bash

#用户user2密码在2020/3/5失效
[root@localhost skel]# usermod -e "20200305" user2
[root@localhost skel]# grep user2 /etc/shadow
user2:$6$HPb1eMam$5RIz5JZO7Q2mEX77zOi3cq/XA9hO254LE.XmP.0.g865DVWPC.cjDDLmO10T1gy8uxce7apKSX3UB/cMXCDh30:18302:0:99999:7::20200305:
#暂时冻结用户密码
#密码中出现!
[root@localhost skel]# usermod -L user2
[root@localhost skel]# grep user2 /etc/shadow
user2:!$6$HPb1eMam$5RIz5JZO7Q2mEX77zOi3cq/XA9hO254LE.XmP.0.g865DVWPC.cjDDLmO10T1gy8uxce7apKSX3UB/cMXCDh30:18302:0:99999:7::20200305:

#解除冻结
[root@localhost skel]# usermod -U user2
[root@localhost skel]# grep user2 /etc/shadow
user2:$6$HPb1eMam$5RIz5JZO7Q2mEX77zOi3cq/XA9hO254LE.XmP.0.g865DVWPC.cjDDLmO10T1gy8uxce7apKSX3UB/cMXCDh30:18302:0:99999:7::20200305:
userdel
Usage: userdel [options] LOGIN
 
Options:
  -f, --force                   强制执行一些会失败的操作
  -h, --help                    显示命令的使用方法
  -r, --remove                  连同用户的家目录一起删除

删除一个用户可以手动将/etc/passwd和/etc/shadow中的账号移除。若只是暂时不用该用户,可以将/etc/shadow中最后倒数一个字段设定为0,该账号无法使用,但是所有跟账户相关的数据都会留下来。

2.2.2 用户相关信息:chfn,chsh,id

chsh
[dmtsai@linux ~]$ chsh [-ls]
参数:
-l :列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容
-s :设定修改自己的 Shell 

#列举系统上面所有的shell
[root@localhost skel]# chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
chfn
[root@linux ~]# chfn [-foph]
参数:
-f :后面接完整的大名
-o :办公室的房间号码
-p :办公室的电话号码
-h :家里的电话号码

id
#查看当前用户的相关信息
[root@localhost skel]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
#查看user2用户信息
[root@localhost skel]# id user2
uid=700(user2) gid=100(users) groups=100(users)

2.2.3 新增、删除群组

groupadd
Usage: groupadd [options] GROUP
 
Options:
  -f, --force                   如果组已经存在,则成功退出,如果已经使用了GID,则取消-g
  -g, --gid GID                 后面接某个特定的 GID ,用来直接给予某个 GID
  -K, --key KEY=VALUE           override /etc/login.defs defaults
  -o, --non-unique              允许创建相同的GID
  -p, --password PASSWORD       密码
  -r, --system                  建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关
  -R, --root CHROOT_DIR         改变根目录

实例:

#新建一个群组,名称为 group1
#在 /etc/gshadow 里面可以发现,密码是不许登入的
[root@localhost skel]# groupadd  group1
[root@localhost skel]# grep group1 /etc/group /etc/gshadow
/etc/group:group1:x:503:
/etc/gshadow:group1:!::

#新建一个系统群组,名称为 group2
#系统群组的id小于500
[root@localhost skel]# groupadd -r group2
[root@localhost skel]# grep group2 /etc/group /etc/gshadow
/etc/group:group2:x:492:
/etc/gshadow:group2:!::
groupmod
#修改群组属性
Usage: groupmod [options] GROUP
 
Options:
  -g, --gid GID                 修改既有的 GID 数字
  -n, --new-name NEW_GROUP      修改既有的群组名称
  -o, --non-unique              允许创建相同的GID
  -p, --password PASSWORD       改变密码
                           
groupdel
# 删除用户
Usage: groupdel [options] GROUP
gpasswd
Usage: gpasswd [option] GROUP
 
Options:
  -a, --add USER                添加用户到群组
  -d, --delete USER             从群组中移除该用户
  -r, --delete-password         将 groupname 的密码移除
  -R, --restrict                让 groupname 的密码栏失效,所以 newgrp 就不能使用了
  -M, --members USER            将某些账号加入这个群组当中
  -A, --administrators ADMIN    将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
newgrp

newgrp 会额外以另一个 login 来提供使用者登入到另一个 shell 中, 并且将有效群组改为 newgrp 后面接的那个群组,若没有接群组,则预设群组为 initial group。

2.2.4 使用者身份切换

一般用户切换到root用户有su和sudo两种方式。

su

将用户变成root,需要root密码

Usage: su [OPTION]... [-] [USER [ARG]...]
Change the effective user id and group id to that of USER.
 
   -              如果执行 su - 时,表示该使用者想要变换身份成为 root ,且使用 root 的
环境设定参数档,如 /root/.bash_profile 等等。
  -l, --login                  后面可以接使用者,
  -c, --command=COMMAND        仅进行一次指令
  -m, --preserve-environment   -m 与 -p 是一样的,表示使用目前的环境设定,而不重新读取新使用者的设定档。
  -p                          和-m一样
 
sudo

sudo不需要输入root密码,sudo的工作流程:

  • 当用户执行sudo时,系统会查看/etc/sudoers文件,判断该使用者时候有执行sudo的权限
  • 若使用者具有可执行 sudo 的权限后,便让使用者输入使用者自己的密码来确认;
  • 若密码输入成功,便开始进行 sudo 后续接的指令;
  • 不过, root 执行 sudo 时,不需要输入密码;
  • 若欲切换的身份与执行者身份相同,那也不需要输入密码。
[root@linux ~]# sudo [-u [username|#uid]] command
参数:
-u :后面可以接使用者账号名称,或者是 UID

查看/etc/sudoers文件,发现其中一行为:

hadoop  ALL=(ALL)       NOPASSWD:ALL
#用户账号 登入的主机=(可以变换的身份) 可以下达的指令
#hadoop这个用户,可以变换为Linux中上所有账号,并执行所有指令
#NOPASSWD:设定这个参数表示用户使用sudo时,不需要使用密码
#用户账户前加%,表示一个群组
%wheel ALL=(ALL) ALL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值