1用户账号
- 超级用户: root用户是Linux操作系统中默认的超级用户账号,对本主机拥有最高的权限,类似于Windows操作系统中的Administrator用户,系统中超级用户是唯一的。只有当进行系统管理、维护任务时,才建议使用root用户登录系统,日常事务处理建议只使用普通用户账号。
root 拥有对系统的最高的管理权限 ID=0
- 普通用户:普通用户账号需要由root用户或其他管理员用户创建,拥有的权限受到一定限制,一般只在用户自己的宿主目录中拥有完整权限。
- 程序用户:在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行,如bin、daemon、ftp、mail等。伪用户一般不会用来登录系统的,它主要是用于维持某个服务的正常运行。如:ftp,apache
1.1 UID和GID
- UID(User IDentity,用户标识号):即每个用户的身份标识,类似于每个人的身份证号码。
- root用户账号的UID固定值0
- 普通用户的UID默认为:500~ 65535(centos6版本),1000~ 65535(centos7版本)
- 系统用户账号的UID默认为:1-499(centos6版本),1-999(centos7版本)
- GID(Group IDentify,组标识号)
注:UID和GID都是唯一标识
1.2 用户账号文件
1.2.1 /etc/passwd
- 文件位置:
/etc/passwd :保存用户名称、宿主自录、登录Sell等基本信息 - 每一行对应一个用户的账号记录
例如:
root:x:0:0:root:/root:/bin/bash详解如下:都用冒号进行的分割
- 字段一:root:用户名,用户名仅是为了方便用户记忆。Linux系统是通过UID来识别用户身份,分配用户权限。
- 字段二:x:表示此用户设有密码,但不是真正的密码,真正的密码保存在/etc/shadow文件Linux系统把真正的加密密码串放置在/etc/shadow文件,此文件只有root用户可以浏览和操作,最大限度地保证了密码的安全。
补充:
x变成!!(代表没有密码),虽然”x”并不表示真正的密码,但也不能删除,如果删除了"x”,那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆(只能在使用无密码登录,远程是不可以)。 - 字段三:0:用户账号的UID号。
- 字段四:0:所属基本组账号的GID号
- 字段五:root:描述性信息,此字段只是用来解释这个用户的意义而已
- 字段六:/root:宿主目录,即该用户登录后所在的默认工作目录
注:通常称为用户的主(家)目录。例如:root主目录录为/root,普通用户odysee的主目录为/home/odysee - 字段七:/bin/bash登录shell信息,用户完成登录后使用的
1.2.2 /etc/shadow
/etc/shadow是影子文件,/etc/shadow 文件只有root用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。和/etc/passwd文件一样,文件中每行代表一个用户,同样使用" : "作为分隔符,不同之处在于,每行用户信息被划分为9个字段了
- 文件位置:
/etc/shadow:保存用户的账号、密码等有效信息 - 每一行对应一个用户的密码记录
root:$6$LOm1iAJRGPY5SRjO$GbpwoyzdV6Gqf6FX14R6vRosIqm.xHScEcGp80r5w3T19U3k.p6nH7B1YEy2LPYch.8XOF1ga3KcXOrHgKHX30::0:99999:7:::
- 第一列:账户名
- 第二列:存放真正加密的密码,采用SHA512散列算法,更加安全(加密方法:原来用的是MD5或DES)。!!和*表示没有密码不能登陆,新创建用户也是!!,如果密码前面显示双感叹号表示该账户被锁定了
- 第三列:上一次修改密码的时间,从1970年1月1开始算的,因为1970年是linux的诞生日,date-d "1970-01-0 19048 days"可以查看哪一天改过
- 第四列:最小修改间隔时间,也就是说
该字段规定了从第三个字段(最后一次修改密码的日期)起,多长时间之内不能修改密码,如果是则随时修改密码,如果是10则代表密码修改后10天之内不能再次修改密码 - 第五列:密码有效期,默认99999,表示永久生效
- 第六列:密码到期前的第几天发出警告信息,默认是7天,每次登录系统都会向该账户发出"修改密码"的警告信息
- 第七列:密码过期的宽限天数,过期后的儿天还是可以登陆的,如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用
例如:
此字段规定的宽限天数是10,则代表密码过期10天后失效;如果是0则代表密码过期后立即失效;如果是-1则代表密码永远不会失效 - 第八列:账号失效时间,使用自1970年1月1日以来的总天数作为账户的失效时间
- 第九列:保留,未使用
2 用户账号管理
2.1 修改账号和密码的有效期限–chage
用来修改帐号和密码的有效期限,针对目前系统已经存在的用户
格式:chage [选项] 用户名
-m | 密码可更改的最小天数。为零时代表任何时候都可以更改密码 |
---|---|
-M | 密码保持有效的最大天数。chage-M60 root |
-w | 用户密码到期前,提前收到警告信息的天数 |
-E | 帐号到期的日期。过了这天,此帐号将不可用 |
-d | 上一次更改的日期 |
-i | 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用 |
-l | 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期 |
2.2 添加用户账号—useradd
格式:useradd [选项] 用户名
常用命令:
-u | 指定用户的UID号,要求该UID号码未做其他用户使用 |
---|---|
-d | 指定用户的宿主目录位置(与-M一起使用时,不生效) |
-e | 指定用户的账户失效时间,可使用YYYY-MM-DD的日期格式 |
-g | 指定用户的基本组名(或使用GID号) |
-G | 指定用户的附加组名 (或使用GID号) |
-M | 不建立宿主目录,即使/etc/login.defs系统配置中已设定要建立宿主目录 |
-s | 指定用户的登录Shell |
案例一: |
[root@fyr home]# useradd -u 1010 zhangsan1 //添加名为zhangsan1,UID号为1010的普通用户
[root@localhost ~]# id test1
uid=1010(zhangsan1) gid=1010(zhangsan1) 组=1010(zhangsan1) //可以看到UID变成了1010,GID默认和UID一致
案例二:创建一个辅助管理员账号admin,将其基本组指定为“wheel",附加组指定为“root",宿主目录指定为“/admin"
[root@fyr home]# useradd -d /admin -g wheel -G root admin
[root@fyr home]# id admin
在账号管理工作中,有时候会希望在新建账号的同时指定该账号的有效期限,或者要求新建的账号不能登录系统(如仅用于访问FTP服务),这时可分别使用“-e”和“-s”选项。
举例三:执行以下操作可以创建一个名为lisi的FTP账号(禁止终端登录),该账号将于2022-2-28失效
[root@fyr home]# useradd -e 2022-2-28 -s /sbin/nologin weitb
[root@fyr home]# chage -l weitb
[root@fyr home]# cat /etc/passwd|grep weitb
[root@fyr home]# tail -1 /etc/passwd
案例四:不建立宿主目录
[root@fyr home]# useradd -M zhang
[root@fyr home]# ls
2.3 设置/更改用户口令—passwd
passwd 作为普通用户和超级权限用户都可以运行,
没有被root用户锁定,普通用户只能更改自己的用户密码;
如果root用户运行passwd ,可以设置或修改任何用户的密码
格式:passwd [选项] 用户名
常用命令:
passwd + 参数:查看账号的状态
-d | 清空指定用户的密码,仅使用用户名即可登录系统 |
---|---|
-l | 锁定用户账户 |
-S | 查看用户账户的状态(是否被锁定) |
-u | 解锁用户账户 |
例如:
扩充:
调用管道符,给wangxh用户设置密码“123456",为了方便系统管理,passwd命令提供了–stdin选项,用于批量给用户设置初始密码。
[root@fyr ~]# useradd wangxh
[root@fyr ~]# echo "123456" |passwd --stdin wangxh
2.4 修改用户账号的属性—usermod
格式:usermod [选项] 用户名
常用命令
-l | 更改用户账号的登录名称(Login Name) |
---|---|
-L | 锁定用户账号 |
-U | 解锁用户账户 |
-u | 修改用户的UID号 |
-d | 修改用户的宿主目录位置 |
-e | 修改用户的账户失效时间,可使用YYYY-MM-DD的日期格式 |
-g | 修改用户的基本组名(或使用GID号) |
-G | 修改用户的附加组名(或使用GID号) |
-s | 指定用户的登录 Shell |
举例一: |
[root@fyr ~]# usermod -L wangxh
[root@fyr ~]# passwd -S wangxh
[root@fyr ~]# usermod -U wangxh
[root@fyr ~]# usermod -l wang wangxh
[root@fyr ~]# tail -1 /etc/passwd
[root@fyr ~]# grep "wang" /etc/passwd
wang:x:1014:1014::/home/wangxh:/bin/bash
举例二:用户迁移,并修改宿主目录位置
[root@fyr ~]# mv /admin /home/
[root@fyr ~]# ls /home/
[root@fyr ~]# usermod -d /home/admin admin
[root@fyr ~]# cat /etc/passwd
[root@fyr ~]# su - admin
遇到的问题:修改用户名命令敲完后,一直报错
usermod: user XXX is currently used by process 4427
[root@fyr ~]# usermod -d /home/admin admin
usermod: user admin is currently used by process 4427
【问题分析】
发现有一个进程一直占用着,有可能是因为当前用户是(图形化)默认登陆用户,导致无法删掉用户进程
【解决方案】
强制杀死进程,使用 kill -9
kill -9 4427
2.5 删除用户账号—userdel
格式: userdel [-r] 用户名 //结合-r可以删除宿主目录和其他用户的一些链接
例如:
2.6 用户账号的初始文件配置
添加一个新的用户账号后,useradd命令会在该用户的宿主目录中建立一些初始配置文件。这些文件来自于账号模板目录/etc/skel/,基本上都是隐藏文件,较常用的初始配置文件包括
- ~/.bash_profile:文件中的命令将在该用户每次登录时被执行
- ~/.bashrc:文件中的命令会在每次加载"/bin/Bash"程序(当然也包括登录系统)时执行
- ~/.bash_logout:文件中的命令将在用户每次退出登录时执行
理解这些文件的作用,可以方便我们安排一些自动运行的后台管理任务。在".bashrc"等文件中,可以添加用户自己设置的可执行语句(如Linux命令行、脚本控制语句等),以便自动完成相应的任务
3 组账号
- 基本组(私有组):基于某种特定联系(如都需要访问FTP服务)将多个用户集合在一起,即构成一个用户组,表示该组内所有用户的账号称为组账号。每一个用户账号至少属于一个组,这个组称为该用户的基本组(或私有组)
- 附加组(公共组):若该用户同时还包含在其他的组中,则这些组称为该用户的附加组(或公共组)。
例如:
用户zhangsan是技术部的员工,与部门内的其他同事同属于基本组tech,后来因工作安排需要,公司将zhangsan 加入邮件管理员组mailadm,则此时用户zhangsan 同时属于tech、mailadm组,tech组是其基本组账号,而mailadm组是其附加组账号。
对组账号设置的权限将适用于组内的每一个用户账号。
3.1 组账号文件
文件位置:
/etc/group:保存组账号名称、GID号、组成员等基本信息
/etc/gshadow:保存组账号的加密密码字串等信息(但是很少使用到)
某一个组账号包含哪些用户成员,将会在group文件内最后一个字段中体现出来(基本组对应的用户账号默认可能不会列出),多个组成员之间使用","(逗号)分隔
例如:
4 组账号管理
4.1 添加组账号—groupadd
格式:groudadd [-g GID] 组账号名
例如:
[root@fyr ~]# groupadd -g 1100 market
[root@fyr ~]# tail -1 /etc/group
4.2 添加、设置、删除组成员—gpasswd
格式:gpasswd [选项] 组账号名
常用命令:
-a | 添加用户到组 |
---|---|
-d | 从组删除用户 |
-A | 指定管理员 |
-M | 指定组成员和-A的用途差不多 |
-r | 删除密码 |
-R | 限制用户登入组,只有组中的成员才可以用newgrp加入该组 |
例如: |
[root@fyr ~]# useradd mike
[root@fyr ~]# id mike
[root@fyr ~]# gpasswd -a mike root
[root@fyr ~]# groups mike
[root@fyr ~]# gpasswd -d mike root
[root@fyr ~]# groups mike
[root@fyr ~]# gpasswd -M root,mike,zhangsan adm
[root@fyr ~]# grep "^adm" /etc/group
4.3 删除组账号—groupdel
格式:grouddel 组账号名
例如:
[root@fyr ~]# gpasswd -M root,mike,zhangsan adm
[root@fyr ~]# grep "^adm" /etc/group
adm:x:4:root,mike,zhangsan
[root@fyr ~]# groupdel adm
groupdel:不能移除用户“adm”的主组
[root@fyr ~]# gpasswd -d root adm
正在将用户“root”从“adm”组中删除
[root@fyr ~]# gpasswd -d mike adm
正在将用户“mike”从“adm”组中删除
[root@fyr ~]# gpasswd -d zhangsan adm
正在将用户“zhangsan”从“adm”组中删除
[root@fyr ~]# grep "^adm" /etc/group
adm:x:4:
[root@fyr ~]# groupdel adm
groupdel:不能移除用户“adm”的主组
4.4 查询账号所属组—groups
格式:groups [用户名]
例如:
[root@fyr ~]# groups zhangsan //查询用户账号所属组
[root@fyr ~]# id zhangsan //查询用户账号身份标识
4.5 查询账号的详细信息—finger
使用前需要安装finger安装包
格式:finger [用户名]
例如:
[root@fyr ~]# mount /dev/sr0 /mnt //先挂载
[root@fyr ~]# yum install -y finger //使用yum安装finger
[root@fyr ~]# finger root //查看用户信息
4.6 查询用户身份标识—id
格式:id 用户名
例如:
[root@fyr ~]# id zhangsan
4.7 查询已登录主机的用户信息—who、w、users
who 系统当前所有的登录会话
w 系统当前所有的登录会话及所做的操作
users:显示当前登录系统的所有用户
通常使用tty来简称各种类型的终端设备,Centos7系统,tty1表示图形界面,tty2-tty6表示文字界面,可以用ctrl+Alt+F1-F6切换。
按Ctrl+A1t+F2登陆,执行w命令,查看使用的终端就是tty2
User:登录用户名
TTY:登录后系统分配的终端号
From:远程主机名,即从哪登录的
1ogin@:何时登录
IDLE:用户空闲时间。这是个计时器,一旦用户执行任何操作,改计时器就会被重置。
JCPU:和终端连接的所有进程占用时间。包括当前正在运行的后台作业占用时间
PCPU:当前进程所占用时间
WHAT:当前正在运行进程的命令行
pts说明是用远程工具连接的,后面的数字代表登录的时间顺序,越小证明登录的越早
5 文件/目录的权限和归属
访问权限
- 读取r:允许查看文件内容、显示目录列表
- 写入w:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
- 可执行x:允许运行程序、切换目录
归属(所有权) - 属主:拥有该文件或目录的用户帐号
- 属组:拥有该文件或目录的组帐号
第1个字符:表示该文件的类型,可以是d(目录)、b(块设备文件)、c(字符设备文件)、“”(普通文件)、字母“1”(链接文件)等。
第2-4个字符:表示该文件的属主用户(User)对该文件的访问权限。
第5-7个字符:表示该文件的属组内各成员用户(Group)对该文件的访问权限。
第8~10个字符:表示其他任何用户(other)对该文件的访问权限。
第11个字符:这里的"."与SELinux有关,目前不必关注
5.1 设置文件和目录的权限—chmod
格式:chmod [ugoa] [+-=] [rwx] 文件或目录
u、g、o、a分别表示属主、属组、其他用户、所有用户
+、-、=分别表示增加、去除、设置权限
r、w、x分别表示读、写、运行权限
或 chmod nnn 文件或目录 //3位八进制数
例如1:
[root@fyr ~]# cp /bin/mkdir mymkdir
[root@fyr ~]# ll
[root@fyr ~]# chmod 644 mymkdir
[root@fyr ~]# ll
[root@fyr ~]# ./mymkdir dir01
[root@fyr ~]# chmod u+x,o-r mymkdir
[root@fyr ~]# ./mymkdir dir01
[root@fyr ~]# chmod 755 mymkdir
[root@fyr ~]# ll
例如2:递归更改权限
-R :递归修改指定目录下所有子项的权限
5.2 设置文件和目录的归属—chown
格式:
chown 属主 文件或目录
chown :属组 文件或目录
chown 属主:属组 文件或目录
常用选项
-R:递归修改指定目录下所有文件、子目录的归属
5.3 权限掩码—umask
umask作用
- 控制新建的文件或者目录的权限
- 默认权限去除umask的权限为新建的文件或者目录的权限
umask设置:umask 022
umask查看:umask
示例 - 将umask设为000,新建目录或者文件,查看权限
- 将umask设为022,新建目录或者文件,再查看权限
6 总结
- 用户账号管理(useradd、passwd、usermod、userdel)
- 组账号管理(groupadd、gpasswd、groupdel)
- 用户账号文件与组账号文件
- 查询账号相关信息的命令(groups、id、finger、(w)
- 设置目录与文件权限(chmod)
- 设置目录与文件归属(chown)