Linux账号和权限管理

一 用户账号和组账号

Linux基于用户身份对资源访问进行控制

用户账号:超级账号,普通用户,程序用户

组账号:基本组(私有组),附加组(公共组)

UID和GID

UID 用户标识号

GID 组标识号

1.1 用户的分类

Linux用户三种角色

超级用户 root用户是Linux操作系统中默认的最高权限的超级用户账号,对本主机拥有至高无上的权限,类似于windows操作系统中的Administrator用户。只有当进行系统管理,维护任务时,才建议使用root用户登录系统,日常事务处理建议只使用普通用户账号。root拥有对系统的最高的管理权限ID=0

普通用户:普通用户账号需要由root用户或其他管理员用户创建,拥有的权限会受到一定限制,一般只在用户自己的宿主目录中拥有完整权限

系统用户UID:1-999(centos7版本)1-499(centos6版本);UID:即每个用户的身份标示,类似于每个人的身份证号码。

程序用户:在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行,如bin,daemon,ftp,mail等伪用户一般不会用来登录系统的,它主要是用于维持某个服务的正常运行。如:ftp,apache

UID:即每个用户的身份标识,类似于每个人的身份证号码

管理员:root,0

普通组:GID

系统组:1-499(centos6),1-999(centos7)普通组:500+(centos6) 1000+(centos7)

表示该账号需要密码才能登录,为空时,账户无须密码可登录组账号

基本组:基于某种特定联系(如都需要访问FTP服务)将多个用户集合在一起,即构成一个用户组,表示该组内所有用户的账号称为组账号。每一个用户账号至少属于一个组,这个组称为该用户的基本组(或私有组)

附加组:若该用户同时还包含在其他的组中,则这些组称为该用户的附加组(或公共组)

1.2 Linux系统中对应的用户文件

用户账号文件 /etc/passwd

用于保存用户名称,宿主目录,登录shell等基本信息

文件位置:/etc/passwd

每一行对应一个用户的账号记录

[root@deng ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash

passwd文件账号记录详细说明

root:x:0:0:root:/root:/bin/bash详解如下:

root:用户名,用户名仅是为了方便用户记忆。Linux系统是通过UID来识别用户身份,分配用户权限。x:表示此用户设有密码,但不是真正的密码,真正的密码保存在/etc/shadow文件

Linux系统把真正的加密密码串放置在/etc/shadow文件中,此文件只有root用户可以浏览和操作,最大限度地保证了密码的安全。
补充:
注意 !! ,虽然"x"并不表示真正的密码,但也不能删除,如果删除了"x",那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆(只能在使用无密码登录,远程是不可以)。

0:用户账号的UID 号。

0:所属基本组账号的GID号

root:描述性信息,此字段只是用来解释这个用户的意义而已
/ root:宿主目录,即该用户登录后所在的默认工作目录
注:通常称为用户的主(家)目录。例如: root主目录为/root,普通用户odysee的主目录为/home/odysee/bin/bash录shell等信息,用户完成登录后使用的

/etc/ shadow(影子文件)

/etc/ shadow文件只有 root权限才可以进入
用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性和/etc/passwd文件一样,文件中每行代表一个用户,同样使用":"
作为分隔符,不同之处在于,每行用户信息被划分为9个字段
用户账号文件/etc/shadow(影子文件)
保存用户的密码、账号有效期等信息

文件位置:/etc/shadow

每一行对应一个用户的密码记录

[root@deng ~]# head -1 /etc/shadow
root:$6$FKsxirhS7LkNmPxZ$I6QzQh2vK8/I37brnKQKwfX0yPG0r9yIeNoQZjb1xSX.QPprX5ozG8tI05aO0kpbExQfkX2eTGDSiiYg3As6W.::0:99999:7:::

第一列:账户名

第二列:存放真正加密的密码,采用sHA512散列算法,更加安全加密原来用MD5或DES !!和*表示没有密码不能登陆,新创建用户也是!!,如果密码前面显示双感叹号表示该账户被锁定了

第三列:上一次修改密码的时间,从1970年1月1日开始算的,因为1970年是linux的诞生日,date -d""1970-01-01 18983 days"可以查看哪一天改过

第四列:多久之后才可以修改密码,如果是0,则密码可以随时修改最小修改间隔时间,也就是说该字段规定了从第三个字段(最后一次修改密码的日期)起,多长时间之内不能修改密码,如果是o则随时修改密码,如果是10则代表密码修改后10天之内不能再次修改密码,此字段是为了针对某些人频繁更改账号密码而设计

第五列:密码有效期,默认99999,表示永久生效

第六列:密码到期前的第几天发出告警信息,默认是7天,每次登录系统都会向该账户发出"修改密码"的警告信息

第七列:密码过期的宽限天数,过期后的几天还是可以登陆的,如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用

第八列:账号失效时间,使用自~1970年1月1日以来的总天数作为账户的失效时间

第九列:保留,未使用

二. chage命令

用来修改账户和密码的有效期限,针对目前系统已经存在的用户

语法 chage 【选项】用户名

-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码

-M:密码保持有效的最大天数。chage -M 60 root
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d: 上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
例: chage -E 2019-04-29 test //其中,test为用户,用户将在2019年4月29日失效(不可登录)
chage -d 2019-06-30 test //设置test用户最后一次修改密码的日期为2019年6月30日
chage -d 0 test //则代表该test用户需立即修改密码
date -d “+45 days” -u /如果不知道时间可以用date查看
-u : UTC时间

第三个字段为:密码最后一次修改的时间 ( chage -d)
第四个字段为:密码最小修改间隔时间( chage -m)
第五个字段为:密码的有效期( chage -M)
第六个字段为:密码需要变更前的警告天数( chage -w)
第七个字段为:密码过期后的宽限天数( chage -I)
第八个字段为:账号失效时间( chage -E)

三. 组的分类

当一些用户需要做同一件事情的时候,把他们加到一个组中便于管理

基本组,一般新建用户的时候会随用户自动创建,与用户同名

附加组,一般一个用户可以有0个或多个附加组
一个用户只有一个基本组,可以有多个附加组
为什么会创建家目录?为什么会UID从1000开始,UID最大是多少?
是由于/etc/ login.defs这个文件中的配置决定的

四. 添加用户账号useradd

-u:指定用户的uID号,要求该UID号码未被其他用户使用。
-d:指定用户的宿主目录位置(当与-M一起使用时,不生效)。
-e:指定用户的账户失效时间,可使用YYYY-MM-DD的日期格式。
-g:指定用户的基本组名(或使用GID号)。
-G:指定用户的附加组名(或使用GID号)。
-M:不建立宿主目录,即使/etc/login.defs 系统配置中已设定要建立宿主目录。
-s:指定用户的登录shell。
useradd zhangsan
id zhangsan
tail -l /etc/passwd
tail -l /etc/shadow
ls /home

创建一个辅助管理员账号
admin,将其基本组指定为"wheel",附加组指定为"root”,宿主目录指定为" /admin"
useradd -d /admin -g wheel -G root admin
id admin 查看
设置/更改用户口令passwd

五.passwd 命令

扩允
#调用管道符,给zhangsan 用户设置密码“123",为了方便系统管理,passwd命令提供了
–stdin选项,用于批量给用户设置初始密码。
echo “123"” | passwd --stdin zhangsan
-d:清空指定用户的密码,仅使用用户名即可登录系统。
-l:锁定用户账户。
-S:查看用户账户的状态(是否被锁定)。
-u:解锁用户账户。
passwd -l zhang
passwd -S zhang
passwd -u zhang
passwd -d zhang

六. 修改用户账号的属性usermod

usermod命令参数
-l:更改用户账号的登录名称( Login Name ) 。
-L:锁定用户账户。
-U:解锁用户账户
u:修改用户的UID号。
-d:修改用户的宿主目录位置。
-e:修改用户的账户失效时间,可使用YYYY-MM-DD的日期格式。
-g:修改用户的基本组名(或使用GID号)。
-G:修改用户的附加组名(或使用GID号) 。
-s:指定用户的登录shell。

七. 删除用户账号userdel

userdel [-r] 用户名
·添加-r选项时,表示连用户的宿主目录一并删除

[root@localhost ~]#useradd stu01
[root@localhost ~]# ls -ld /home/stu01/drwX------ 2 stu01 stu01 4096 09-09 12:38 /homelstu01/
[root@localhost ~]# userdel -r stu01      #删除用户账号stu01
[root@localhost ~]# Is -ld /homelstu01/ls:/homelstu01/:没有那个文件或目录

八. 用户账号的初始配置文件

文件来源
新建用户账号时,从/etc/skel目录中复制而来
主要的用户初始配置文件
~/.bash_profile 开机自启动
~/.bashrc 开机自启动
~/.bash_logout 关机自启动

用户账号的初始配置文件
1 .bash_profile:示例代码中为用户添加了2个环境变量(JAVA_HOME和CLASSPATH),并修改了已有环境变量PATH的值(PATH的查找是从前开始查找,找到就返回)CLASSPATH环境变量的值是在JAVA运行时查找加载类的默认classpath.
2 .bashrc
例子中定义了路径,语言,命令别名(使用rm删除命令时总是加上-i参数需要用户确认,使用ls命令列出文件列表时加上颜色显示)
每次修改.bashrc后,使用source /.bashrc(或者./.bashrc)就可以立刻加载修改后的设置,使之生效。
一般会在.bash_profile文件中显式调用.bashrc。登录linux启动bash时首先会去读取~/ .bash_profile文件,这样~/.bashrc也就得到执行了,你的个性化设置也就生效了。
关于环境变量的读取顺序:
用户登录->>加载~/.bash_profile --> bash_profile中配置了首先是使~ / ,bashrc生效
3 .bash_logout
用途:用户登出时执行的命令
#~ / .bash_logout
在当前用户登出时,打印出Logout和当前的时间echo "Logout, "date "

九.组账号文件

与用户账号文件相类似
/etc/group:保存组帐号基本信息
/etc/gshadow:保存组帐号的密码信息
[root@localhost ~]# grep “adm” /etc/group
sys❌3:root,bin,adm
adm❌4:root,adm,daemon

与组账号相关的配置文件也有两个,分别是/etc/group 和/etc/gshadow。前者用于保存-组账号名称、GID号、组成员等基本信息,后者用于保存组账号的加密密码字串等信息(但是很少使用到)。某一个组账号包含哪些用户成员,将会在 group文件内最后一个字段中体现出来(基本组对应的用户账号默认可能不会列出),多个组成员之间使用" ,"(逗号)分隔
grep “^root” /etc/group //检索root组包括哪些用户
grep “root” letc/group //检索哪些组包括root用户
groupadd命令
groupadd[-g GID] 创建组账号名
groupadd -g 1200 market
tail -1 /etc/group

十.添加删除组成员gpasswd

groupadd命令
groupadd [-g GID] 组账号名
groupadd -g i20o market
tail -1 /etc/group
gpasswd命令
-a:添加用户到组
-d:从组删除用户
-A:指定管理员
一M:指定组成员和-A的用途差不多
-r:删除密码
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组
useradd mike
gpasswd -a mike root #确认mike用户己加入root组
groups mike
gpasswd -d webmaster root //确认webmaster用户已退出root组正在将用户"webmaster”从"root"组中删除
gpasswd -M root,daemon, webmaster,mike adm
grep “^adm” /etc/group
adm: x : 4 : root, daemon , webmaster,mike

十一.删除组账号

roupdel 命令

groupdel 组账号名
groupdel market
grep “market” letc/group

查询用户所属的组 groups
groups [用户名]

查询用户身份标识 ip
id [用户名]

查询用户账号的详细信息 finger
finger [用户名]

查询已登录到主机的用户信息
w、who、 users #查询己登录到主机的用户信息
通常使用tty来简称各种类型的终端设备,Centos7系统,ttyl表示图形界面,tty2-tty6表示文字界面,可以用ctrl+Alt+F1-F6切换。
按ctrl+Alt+F2登陆,执行w命令,查看使用的终端就是tty2

User:登录用户名
TTY:登录后系统分配的终端号From:远程主机名,即从哪登录的
login@:何时登录
IDEE:用户空闲时间。这是个计时器,一旦用户执行任何操作,改计时器就会被重置。JCPU:和终端连接的所有进程占用时间。包括当前正在运行的后台作业占用时间
PCPU:当前进程所占用时间
WHAT:当前正在运行进程的命令行
pts说明是用远程工具连接的,比如lxshell,后面的数字代表登录的时间顺序,越小证明登录的越早
文件/目录的权限和归属
访问权限
读取 r:允许查看文件内容,显示目录列表
写入w:允许修改文件内容,允许在目录中新建,移动,删除文件或子目录
可执行x:允许运行程序,切换目录
归属(所有权)
属主:拥有该文件或目录的用户账号
属组:拥有该文件或目录的组账号
查看文件/目录的权限和归属

[root@localhost ~]# Is -l install.log
-rw-r-r-- 1 root root 34298 04-02 00:23 install.log

十二.查看目录和文件的属性

root用户、 root组
如"drwxr-Xr-x"和"-rw-r–r–“。权限字段由四部分组成,各自的含义如下所述。
第1个字符:表示该文件的类型,可以是d(目录)、b(块设备文件)、c(字符设备文件)、“-”(普通文件)、字母“l”(链接文件)等。
第2~4个字符:表示该文件的属主用户(User)对该文件的访问权限。
第5~7个字符:表示该文件的属组内各成员用户(Group)对该文件的访问权限。
第8~10 个字符:表示其他任何用户(other)对该文件的访问权限。
第11个字符:这里的”.” 与 SELinux有关,目前不必关注
上述格式中,字符组合"[ugoa…][±=][rwx]"或数字组合"nnn"的形式表示要设置的权限模式。其中,“nnn"为需要设置的具体权限值,如"755”*644"等;而“[ugo…] [±=] [rwx]"的形式中,三个组成部分的含义及用法如下所述。
"ugoa"表示该权限设置所针对的用户类别。“u"代表文件属主,“g"代表文件属组内的用户,“o"代表其他任何用户,“a"代表所有用户(u、g、o的总和)。
“±=表示设置权限的操作动作。”+”“代表增加相应权限,”-“代表减少相应权限,”=”代表仅设置对应的权限。
”rwx"是权限的字符组合形式,也可以拆分使用,如上”“rx”"等。

案例

[ root@ky17 1门].cp /bin/mkdir mynkdir
[ root@localhost ~]#  ./mymkdir dir01
[ root@localhost ~]#ls
anaconda-ks.cfginitial-setup-ks.cfg   公共  视频  文档  音乐
dir01               mymkdir           模板  图片  下载  桌面
[ root@localhost ~]# ls -ld dir01
drwxr-xr-x 2 root root 6 5月15 00:11 dir01
[root@localhost ~]# chmod ugo-x mymkdir
[root@localhost ~]# ls -l mymkdir
-rw-r--r-- 1 root root 79768 5月15 00:09 mymkdir
[root@localhost ~]# ./mymkdir dir02
-bash: ./mymkdir:权限不够
[root@localhost ~]chmod u+x,o-r mymkdir
[root@localhost ~]# ls -l mymkdir
-rwxr----- 1 root root 79768 5月 15 00:09 mymkdir
[humj@ky17 / ]# cat mymkdir
[root@localhost ~]# chmod u+x,o-r mymkdir
[root@localhost ~]# ls -l mymkdir
-rwxr—---- 1 root root 79768 5月 15 00:09 mymkdir
[root@localhost ~]# chmod 755 mymkdir
[root@localhost ~]# ls -l mymkdir
-rwxr-xr-x. 1 root root 79768 Apr 18 09:38 mymkdir
ls -ld /var/ftp/pub/
drwxr-xr-x 2 root root 6 5月 15 00:20 /var/ftp/pub/
[root@localhost ~]# chown -R ftp /var/ftp/pub/  #//修改前的属主为root
[root@localhost ~]# ls -ld /var/ftp/pub/   /修改后的属主变为ftp
drw-r--r-- 2 ftp root 6 Nov 5 15:43 /var/ftp/pub/
[rootelocalhost ~]# ls -ld /var/ftp/pub/
drwxr-xr-x 2 ftp root 6 5月15 00:20 /var/ftp/pub/
如果同时设置目录和文件的属主、属组,则需要用到分隔符" :"。
例如,执行以下操作可︰将mymkdir文件的属主更改为daemon、属组更改为wheel。
[rootelocalhost ~]. ls -ld mymkdir
-rwxr-Xr-x. 1 root root 79768 Apr 18 09:38 mymkdir
[root@localhost ~]# chown daemon : wheel mymkdir
[root@localhost ~]# ls -ld mymkdir
-rwXr一Xr-x. 1 daemon wheel 79768 Apr 18 09:38 mymkdi

十三.设置文件和目录的归属chown

chown命令
chown 属主 文件或目录
chown 属组 文件或目录
chown 属主:属组 文件或目录
常用选项
-R:递归修改指定目录下所有文件、子目录的归属

十四.权限掩码umask

umask作用
控制新建的文件或者目录权限
默认权限去除umask的权限为新建的文件或者目录的权限
umask设置:umask 022
umask查看:umask
示例
将umask设为000,新建目录或者文件,查看权限
将umask设为022,新建目录或者文件,再查看权限

[root@kgc ~]umask 000
[root@kgc ~]mkdir /umaskl
[root@kgc ~]ls-ld /umaskl/
drwxrwxrwx 2 root root 4096 3 月13 17:02 /umaskl/
[root@kgc ~]umask 022
[root@kgc ~]mkdir /umask2
[root@kgc ~]ls -ld /umask2/
drwxr-xr-x 2 root root 4096 3 月13 17:03 /umask2/

总结

用户账号管理(useradd、passwd、usermod、userdel)
组账号管理(groupadd、gpasswd、groupdel)
用户账号文件与组账号文件
查询账号相关信息的命令(groups、id、finger、w)
设置目录与文件权限(chmod)
设置目录与文件归属(chown)

你可能感兴趣的:(linux,系统安全,运维)