与Windows操作系统相比,Linux系统中的用户账号和组账号的作用在本质上是一样的, 同样都是基于用户身份来控制对资源的访问,只不过在表现形式及个别细节方面存在些许差异。本小节将介绍Linux系统中用户账号和组账号的相关概念
在linux系统中,根据系统管理的需要将用户账号分为不同的类型,其拥有的权限、担任角色也各不相同,主要包括超级用户、普通用户和程序用户
system
为最高权限用户。用户配置文件
/etc/passwd:包含用户账号的基本信息
passwd文件的每一行内容中,包含了七个用冒号“:”分隔的配置字段,我们需要了解其含义
[root@localhost ~]# head -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
账号名称:密码占位符:UID、GID:用户说明 家目录:登录shell
/etc/shadow:包含用户账号的密码信息(影子文件)
[root@localhost ~]# head -2 /etc/shadow
root:$6$ODNEf71B$IgcWDyUN/FCLHgiwgu7sOAvNh.VZYjE/nvzvaM.9urCtEW6tKRgDK.xLWhya4PdYo2NAEEIIPwwb3t7PlFT7m1:18442:0:99999:7:::
bin:*:17834:0:99999:7:::
账号名称:密码信息:上次修改密码的时间:密码最短有效天数:密码最长有效天数:提前7天警告密码将过期:密码过期后多少天内禁用此用户:账号失效时间:保留字段
密码信息
:MD5加密的密码字串信息;为*
或!!
时,被锁定,不能登陆;为空,无密码。
上次修改密码的时间
:表示从1970年1月1日到最近一次修改密码那天所间隔的天数。
密码最短有效天数
:修改密码后,最少经过多少天才能再次修改密码。默认为0
,不限制。
密码最长有效天数
:修改密码后,经过该天数,必须再次修改密码。默认为99999
,不限制。
提前7天警告密码将过期
:默认值为7
。
账号失效时间
:指定用户账号作废的天数,从1970年1月1日起计算
1.查询root组包含哪些用户
[root@localhost ~]# grep "^root" /etc/group
root:x:0:
2.查询那些组包含root账户
[root@localhost ~]# grep "root" /etc/group
root:x:0:
UID:用户识别号
GID:组织别号
用户 | UID范围 |
---|---|
root | 0 |
程序用户 | 1~999 |
普通用户 | 1000~6000 |
组账号文件也有两个,分别是/etc/group, /etc/gshadow。与用户账号文件非常类似。前者用于保存组账号名称,GID号,组成员等基本信息,后者用于保存组账号的加密密码字符串等信息(但是很少使用到)。
某一个组账号包含哪些用户成员,将会在group文件内最后一个字段中体现出来(基本组对应的用户账号默认可能不会列出),多个组成员之间使用逗号“,”分隔。
添加、删除、修改组账号
-u:指定UID
-d:指定家目录位置
-e:指定账户失效时间,YYYY-MM-DD或天数。
-g:指定基本组名称或GID
-G:指定附加组
-M:不创建宿主目录
-s:指定用户的登陆shell,/bin/bash可登录,/sbin/nologin不可登录。
[root@localhost ~]# useradd -d /zhangsan zhangsan
[root@localhost ~]# useradd -e 2020-06-30 -s /sbin/nologin ftpuser
创建新的系统用户,useradd指令只能以管理员的身份运行,创建的用户都在“/etc/passwd”文件中。当不加-D参数,useradd指令使用命令列来指定新帐号的设定值and使用系统上的预设值.新使用者帐号将产生一些系统档案,使用者目录建立,拷备起始档案等,这些均可以利用命令列选项指定。此版本为RedHat Linux提供,可帮每个新加入的使用者建立个别的group,毋须添加-n选项。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
-c:加上备注文字,备注文字保存在passwd的备注栏中。
-d:指定用户登入时的主目录,替换系统默认值/home/<用户名>
-D:变更预设值。
-e:指定账号的失效日期,日期格式为MM/DD/YY,例如06/30/12。缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1.
-g:指定用户所属的群组。值可以是组名也可以是GID。用户组必须已经存在的
-G:指定用户所属的附加群组。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。
-s:指定用户登入后所使用的shell。默认值为/bin/bash。
-u:指定用户ID号。该值在系统中必须是唯一的。0~499默认是保留给系统用户账号使用的,所以该值必须大于499
[root@localhost ~]# useradd tom3 ##创建tom3用户
[root@localhost ~]# tail -1 /etc/passwd ##查看passwd最后一行
tom3:x:1004:1004::/home/tom3:/bin/bash
[root@localhost ~]# tail -1 /etc/shadow
tom3:!!:18442:0:99999:7:::
[root@localhost ~]# ls -A /home/tom3 ##确认自动创建的用户的目录
.bash_logout .bash_profile .bashrc .mozilla
通过useradd命令新增用户账号以后,还需要为其设置一个密码才能够正常使用.使用passwd命令可设置或修改密码,root用户有权管理其他账号的密码
-d 删除密码
-f 强制执行
-k 更新只能发送在过期之后
-l 停止账号使用
-S 显示密码信息
-u 启用已被停止的账户
-x 设置密码的有效期
-g 修改群组密码
-i 过期后停止用户账号
选择参数:
–help 显示帮助信息
–version 显示版本信息
创建账户示例
[root@localhost ~]# useradd li ##创建li用户 人机交互
[root@localhost ~]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# echo “321321” | passwd --stdin li ###免去人机交互设置密码
更改用户 li 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# passwd ##后面不跟用户是改当前用户的密码
更改用户 root 的密码 。
新的 密码:
通过passwd命令锁定的用户账号,将无法再登录系统(shadow文件中的对应密字码将添加!!字符)只能由管理员来解除锁定。例如由管理员来解除锁定。
[root@localhost ~]# passwd -l tom2 ##锁定账号
锁定用户 tom2 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -S tom2 ##查看锁定的账号状态
tom2 LK 2020-06-29 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -u tom2
解锁用户 tom2 的密码。
passwd: 警告:未锁定的密码将是空的。
passwd: 不安全的操作(使用 -f 参数强制进行该操作)
[root@localhost ~]# passwd -uf tom2 ##解锁账户
解锁用户 tom2 的密码。
passwd: 操作成功
对于系统中已经存在的用户账号,可以使用usermod命令重新设置各种属性。usermod命令同样需要指定账号名称作为参数。较常使用的几个选项如下所述。
-u:修改用户的UID号
-d:修改用户的宿主目录位置
-e:修改用户的账户失效时间,可使用YYYY-MM-DD的日期格式
-s:指定用户的登录shell
-l:更改用户账户的登录名称(Login Name)
-L:锁定用户账户
-U:解锁用户账户
通过usermod命令同样可以对账号进行锁定、解锁操作,经usermod命令锁定的账号也不能登录(shadow文件中的对应密码字串前将添加“!”字符
[root@localhost ~]# usermod -L tom ##锁定账户
[root@localhost ~]# passwd -S tom ##查看tom账户的状态
tom LK 2020-06-18 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U tom ##解锁tom账户
解锁用户 tom 的密码。
usermod: 操作成功
若需要修改登录账户的登录名称,可以使用:-l“选项、例如,执行以下操作可以将tom用户的登录名称更改为tom5
[root@localhost ~]# usermod -l tom5 tom
[root@localhost ~]# grep "tom" /etc/passwd
tom2:x:1003:1003::/home/tom2:/bin/bash
tom5:x:1001:1001::/home/tom:/bin/bash
userdel 命令–删除用户账号
当系统的某个用户已经不在再需要使用的时候可以使用userdel命令将该用户删除。使用该命令也需要指定账号名称作为参数,结合”r"选项可同时删除宿主目录。例如执行以下操作将删除名为tom2的用户账号,同时删除其宿主目录
[root@localhost ~]# userdel -r tom5
[root@localhost ~]# ls -ld /home/tom5
ls: 无法访问/home/tom5: 没有那个文件或目录
与组账号相关的配置也有两个,分别是 /etc/group、/etc/gshadow。前者用于保存组账号名称、GID号、组成员等信息,后者用于保存组账号的加密密码字串等信息
案例:执行对应的操作可分别获取root组包括哪些用户成员、哪些组中包含root用户
[root@localhost ~]# grep "^root" /etc/group ##检索root组包括哪些用户
root:x:0:
[root@localhost ~]# grep "root" /etc/group ##检索哪些组包括root用户
root:x:0:
使用groupadd命令可以添加一个组账号,需要指定GIP号时,可以使用“-g”选项
[root@localhost ~]# groupadd -g 10000 lisi ##添加lisi组
[root@localhost ~]# tail -1 /etc/group
lisi:x:10000:
gpasswd命令本来是用来设置组账号的密码,但是该功能的极少使用,实际上该命令更多的用来管理组账号的用户成员。需要添加、删除成员用户时,可分别使用“-a” ”-d“选项.
[root@localhost ~]# tail -5 /etc/passwd ##查看etc/passwd末尾五行
gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin ##没有用户
[root@localhost ~]# useradd tom ##现在添加用户tom
[root@localhost ~]# echo "123123" |passwd --stdin tom ##免交互设置tom 密码为123123
更改用户 tom 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# useradd tom2 ##创建账户tom2
[root@localhost ~]# echo "123123" |passwd --stdin tom2
更改用户 tom2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# useradd tom3 ##创建tom3
[root@localhost ~]# echo "123123" |passwd --stdin tom3
更改用户 tom3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# tail -5 /etc/passwd ##查看etc/passwd末五行
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tom:x:1000:1000::/home/tom:/bin/bash ##tom账号信息
tom2:x:1001:1001::/home/tom2:/bin/bash ##tom2帐户信息
tom3:x:1002:1002::/home/tom3:/bin/bash ##tom3账户信息
[root@localhost ~]# groupadd test ##创建test组
[root@localhost ~]# tail -5 /etc/group ##查看etc/group
shuaige:x:1003:
tom:x:1000:
tom2:x:1001:
tom3:x:1002:
test:x:1004:
[root@localhost ~]# gpasswd -a tom test ####把tom用户添加到test组中
正在将用户“tom”加入到“test”组中
[root@localhost ~]# id tom ##查看tomUID信息
uid=1000(tom) gid=1000(tom) 组=1000(tom),1004(test) ##这里多了一个1004(test)
[root@localhost ~]# tail -5 /etc/group
shuaige:x:1003:
tom:x:1000:
tom2:x:1001:
tom3:x:1002:
test:x:1004:tom ##后面多了tom用户
[root@localhost ~]# gpasswd -M tom2,tom3 test ##批量添加tom2,tom3用户 中间”,“隔开
[root@localhost ~]# id tom2 ##查看tom2的id信息
uid=1001(tom2) gid=1001(tom2) 组=1001(tom2),1004(test)
[root@localhost ~]# id tom3 ##查看tom3id信息
uid=1002(tom3) gid=1002(tom3) 组=1002(tom3),1004(test)
[root@localhost ~]# id tom ##在查看一下tom的id信息 (此时会细心的发现之前被添加到test组的已经没了?)
uid=1000(tom) gid=1000(tom) 组=1000(tom)
[root@localhost ~]# tail -5 /etc/group ##查看组的后五行信息
shuaige:x:1003:
tom:x:1000:
tom2:x:1001:
tom3:x:1002:
test:x:1004:tom2,tom3 ##tom用户被挤掉了 现在是tom2跟tom3
[root@localhost ~]# gpasswd -M tom2 test ##添加tom2到test组中
[root@localhost ~]# tail -5 /etc/group
shuaige:x:1003:
tom:x:1000:
tom2:x:1001:
tom3:x:1002:
test:x:1004:tom2 ##会发现之前的tom2、tom3变为最新的tom2
下用tom测试一下
[root@localhost ~]# gpasswd -M tom test
[root@localhost ~]# tail -5 /etc/group
shuaige:x:1003:
tom:x:1000:
tom2:x:1001:
tom3:x:1002:
test:x:1004:tom ##变为tom 加入组中了
用gpasswd -a 一个一个添加用户到test组中
[root@localhost ~]# gpasswd -a tom1 test
gpasswd:用户“tom1”不存在
[root@localhost ~]# gpasswd -a tom2 test
正在将用户“tom2”加入到“test”组中
[root@localhost ~]# tail -5 /etc/group
shuaige:x:1003:
tom:x:1000:
tom2:x:1001:
tom3:x:1002:
test:x:1004:tom,tom2
[root@localhost ~]# gpasswd -a tom3 test
正在将用户“tom3”加入到“test”组中
[root@localhost ~]# tail -5 /etc/group
shuaige:x:1003:
tom:x:1000:
tom2:x:1001:
tom3:x:1002:
test:x:1004:tom,tom2,tom3 ###三个账户都在,没有像-M那样覆盖掉
[root@localhost ~]# gpasswd -d tom test ##把用户tom从组中test删除
正在将用户“tom”从“test”组中删除
[root@localhost ~]# tail -5 /etc/group
shuaige:x:1003:
tom:x:1000:
tom2:x:1001:
tom3:x:1002:
test:x:1004:tom2,tom3 ##已经删除
小结:
用-M添加成员,就会对这个组进行覆盖,把之前所在的用户全部覆盖
-a 不会覆盖,相当于追加含义
删除用户只能一个个删除
当系统中的某个组账号不再使用时可以直接指定所属组.
使用命令基本格式
groupdel 组账号名
例如
[root@33 ~]# groupdel test
[root@localhost ~]# id tom2 ##查看tom2用户的ID号、组ID、以及所在的附加组ID
uid=1001(tom2) gid=1001(tom2) 组=1001(tom2),1004(test)
groups命令可以查指定的用户账号属于哪些组
[root@localhost ~]# groups
root
[root@localhost ~]# groups root
root : root
[root@localhost ~]# groups tom2 ##查询tom2
tom2 : tom2 test ##tom2在test组中
[root@localhost ~]# groups tom3
tom3 : tom3 test
使用finger命令可以查询指定的用户账号的登录属性等详细信息,包括登录名称、完整登录名称、宿主目录、登录Shell等。
finger命令使用格式
finger [用户名] 查询用户账号的详细信息
使用W命令可以查询当前主机中的用户登录情况,列出登录账号名称、所在终端、登录时间、来源地点等信息。
[root@localhost ~]# w
00:59:03 up 15:09, 4 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 176月20 ?xdm? 3:30 0.28s /usr/libexec/gn
root pts/0 20.0.0.3 23:28 55.00s 0.14s 0.14s -bash
root pts/2 :0 176月20 17days 0.03s 0.03s bash
root pts/1 :0 00:59 2.00s 0.02s 0.00s w
wtmp begins Wed Jun 17 23:17:42 2020
[root@localhost ~]# last
root pts/3 :0 Sun Jul 5 01:01 still logged in
root pts/0 20.0.0.3 Sun Jul 5 01:00 still logged in
root pts/1 :0 Sun Jul 5 00:59 still logged in
root pts/0 20.0.0.3 Sat Jul 4 23:28 - 01:00 (01:32)
root pts/4 :0 Sat Jul 4 18:24 - 18:25 (00:01)
root pts/3 20.0.0.3 Sat Jul 4 18:24 - 23:26 (05:02)
root pts/3 :0 Sat Jul 4 18:21 - 18:22 (00:00)
root pts/1 gateway Thu Jun 18 08:24 - 20:32 (16+12:08)
root pts/0 gateway Thu Jun 18 08:19 - 19:16 (16+10:56)
root pts/1 gateway Wed Jun 17 22:39 - 00:48 (02:08)
root pts/0 gateway Wed Jun 17 22:33 - 00:33 (02:00)
root pts/0 gateway Wed Jun 17 18:21 - 20:18 (01:56)
root pts/3 gateway Wed Jun 17 16:00 - 18:21 (02:20)
在Linux文件系统的安全模型中,在系统的文件赋予两个属性:访问权限和文件所有者,简称”权限“和”归属“
类型 | 解释 |
---|---|
读取r | 允许查看文件内容,显示目录列表 |
写入w | 允许修改文件内容,允许在目录中新建,移动,删除文件或子目录 |
可执行x | 允许运行程序,切换目录 |
类型 | 解释 |
---|---|
属主 | 拥有该文件或目录的用户账号 |
属组 | 拥有该文件或目录的组账号 |
使用带”-l“选项的ls命令时,将以长格式显示出文件的详细信息,其中包括了该文件的权限个归属等参数。
示例
[root@localhost ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 2376 7月 4 23:34 /etc/passwd
1.- 文件类型(数据文件),除了-还有d 目录,l链接文件,c负责输入输出的设备(字符)文件,b负责存储的块设备文件
2.rw- r-- r-- 三个一组,分别代表各个权限
rw- 属主权限,可读可写,r代表读,w代表写,后面的x代表执行,没有相应的权限就在相应的位置用-代替
r-- 属组权限,代表可读,不可写,不可执行
r-- 其他用户(other)权限,代表只读,即可读,不可写,不可执行
第一个root代表属主
第二个root代表属组
34298代表容量大小,默认单位为字节
04-020 00.23:代表创建时间
即:
首字符表示文件类型(-数据文件)d 目录 l链接文件 c 字符设备文件(控制输入输出) b块设备文件(控制存储)
权限,三个一组,分为三块,分别是属主,属组,所有人
头一块代表属主权限 最多的是rwx
第二块是属组权限 rw- 能读能写不能执行 r-x 能都能写不能执行
第三块r-- 所有人权限, other 其他 r-- 只读权限
1 子文件,自己
root 属主
root 属组
我们可以使用-rwxrwxrwx来表示权限也可以用777来表示权限。
rwx采用累加数字形式表示成 7 , r-x 表示成 5 , rwxr-xr-x 表示成755,rw-r–r--表示成644
数字固定不会变,一个普通的数据文件没有执行权限
chmod是一条在Linux系统中用于控制用户对文件的权限的命令(change mode单词前缀的组合)和函数。只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式,符号模式指定文件的权限。
基本命令格式
chmod 【ugoa...】【+-=】【rwx】文件...
或者
chomod nnn 文件...
所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如rwx ,也就是4+2+1 ,应该是7。
用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如rw- ,也就是4+2+0 ,应该是6。
其它用户的权限数字表达:其它用户权限位的数字相加的总和。如r-x ,也就是4+0+1 ,应该是5。
hmod [ugoa] [±=] [rwx] 文件或目录(不常用)(u,g,o,a分别表示属主,属组,其他用户,所有用户)(±=分别表示增加,去除,设置权限)或chmod nnn 文件或目录 (最常用) (nnn表示三位八进制数字,如刚刚提到的 777,755,64等)
常用选项
-R 递归修改指定目录下所有子项的权限
拥有者u 群组g 其他o
rwx rwx rwx
7 7 7
r w x
4 2 1
[root@localhost ~]# cd / opt ##切换到opt目录
[root@localhost opt]# ls -l ##列出文件列表
总用量 0
drwxr-xr-x. 2 root root 6 10月 31 2018 rh
[root@localhost opt]# chmod -R 777 rh ##这边把权限都改为777
[root@localhost opt]# ll
总用量 0
drwxrwxrwx. 2 root root 6 10月 31 2018 rh ##可以看出都变成rwx具有可读可写执行
[root@localhost opt]# chmod -R 744 rh ##设置权限744
[root@localhost opt]# ll
总用量 0
drwxr--r--. 2 root root 6 10月 31 2018 rh
[root@localhost opt]# chmod g+w+x,o+w rh ##设置属组G加w、x可读可写权限 任何用户o+w可读权限
[root@localhost opt]# ll
总用量 0
drwxrwxrw-. 2 root root 6 10月 31 2018 rh
chown命令使用基本格式
chown 属主 文件或目录
chown:属组 文件或目录
chown 属主:属组 文件或目录
常用选项
-R 递归修改指定目录下所有文件,子目录的归属
-c 显示更改的部分的信息
-f 忽略错误信息
-h 修复符号链接
-v 显示详细的处理信息
示例:
[root@localhost opt]# useradd shuai ##创建shuai用户
[root@localhost opt]# echo "123123" |passwd --stdin shuai ##不交互进行设置账户shuai 设置密码为123123
更改用户 shuai 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost opt]# ll ##查看opt详细列表信息 看出属主、属组都是最高权限root
总用量 0
drwxrwxrw-. 2 root root 6 10月 31 2018 rh
[root@localhost opt]# chown -R shuai:root rh ##修改属主改为tom
[root@localhost opt]# ll
总用量 0
drwxrwxrw-. 2 shuai root 6 10月 31 2018 rh
[root@localhost opt]# chown -R shuai:shuai rh
[root@localhost opt]# ll
总用量 0
drwxrwxrw-. 2 shuai shuai 6 10月 31 2018 rh
[root@localhost opt]#
##创建shuai用户
[root@localhost opt]# echo “123123” |passwd --stdin shuai ##不交互进行设置账户shuai 设置密码为123123
更改用户 shuai 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost opt]# ll ##查看opt详细列表信息 看出属主、属组都是最高权限root
总用量 0
drwxrwxrw-. 2 root root 6 10月 31 2018 rh
[root@localhost opt]# chown -R shuai:root rh ##修改属主改为tom
[root@localhost opt]# ll
总用量 0
drwxrwxrw-. 2 shuai root 6 10月 31 2018 rh
[root@localhost opt]# chown -R shuai:shuai rh
[root@localhost opt]# ll
总用量 0
drwxrwxrw-. 2 shuai shuai 6 10月 31 2018 rh
[root@localhost opt]#
### 3.6:权限掩码umask
[外链图片转存中...(img-UtyqI7rl-1593915178953)]