一、用户组的基本概念
1.1 用户与组的基本概念
进程访问文件,文件是否能被访问,由进程关联的用户决定。
为避免服务器被攻入的时候,被黑,使用普通的用户启动进程,避免太大的权限。
查看用户的登入信息 [root@lh ~]# id [user] uid=0(root) gid=0(root) groups=0(root)
用户id 主组id 所有的组 查看文件的所有者 ls -l 查看进程的启动者 ps aux|grep httpd
1.2 相关的配置文件
- /etc/passwd 用户信息
- /etc/shadow 用户密码
- /etc/group 组的信息
1.2.1 passwd文件
root:x:0:0:root:/root:/bin/bash
被:隔开分成了7各字段
用户名:口令:uid:gid:注释性描述:主目录:登录Shell
man 5 passwd
用户名(login_name):是代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。 口令(passwd):一些系统中,存放着加密后的用户口令字。虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。 用户标识号(UID):是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。取值范围是0-65535。0是超级用户root的标识号,1-99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。 组标识号(GID):字段记录的是用户所属的用户组。它对应着/etc/group文件中的一条记录。 注释性描述(users):字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。 主目录(home_directory):也就是用户的起始工作目录,它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。 登录Shell(Shell):用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。 用户的登录Shell可以指定为某个特定的程序(此程序不是一个命令解释器)。利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux系统要求只有那些在系统中登记了的程序才能出现在这个字段中。
1.2.2 shadow文件
root:$6$gayPchTpBy32EWDr$KQeLRW6DEGvwp//:19760:0:99999:7::: 总共有9段,每个账号都有对应的行
用户:密码:最后一次改动日期:密码不可被更动的天数:密码需要重新变更的天数:。。。。。。。
密码字段详解:man 5 shadow
密码被$分成了三段 1.加密算法 $1 MD5 $5 SHA-256 $6 SHA-512 2.盐 为不同的密码,随机生产一个字符串,可以让密码相同的,最后生产的hash也不一样 3.hash值 密码+盐=hash值
1. 帐号名称:由于密码也需要与帐号对应啊~因此, 这个档案的第一栏就是帐号,必须要与 /etc/passwd 相同才行! 2. 密码:这个才是真正的密码,而且是 经过编码过的密码啦! 你只会看到有一些特殊符号的字母就是了!需要特别留意的是, 虽然这些加密过的密码很难被解出来,但是‘很难’不等于‘不会’,所以, 这个档案的预设属性是‘-rw-------’或者是‘-r--------’,亦即只有 root 才可以读写就是了!你得随时注意,不要不小心更动了这个档案的属性呢!另外, 如果是在密码栏的第一个字元为‘ * ’或者是‘ ! ’,表示这个帐号并不会被用来登入的意思。 所以万一哪一天你的某个使用者不乖时,可以先在这个档案中,将他的密码栏位的最前面多加一个 * !嘿嘿!他就无法使用该帐号啰!直到他变乖了,再给他启用啊! 3. 最近更动密码的日期:这个栏位记录了‘更动密码的那一天’的日期, 不过,很奇怪呀!在我的例子中怎么会是 12959 呢?呵呵,这个是因为计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 ,而 1971 年 1 月 1 日则为 366 啦! 所以这个日期是累加的呢!得注意一下这个资料呦!那么最近的 2005 年 1 月 1 日就是 12784 啦,瞭解了吗? 4. 密码不可被更动的天数: 第四个栏位记录了这个帐号的密码需要经过几天才可以被变更!如果是 0 的话, 表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设定为 20 天的话,那么当你设定了密码之后, 20 天之内都无法改变这个密码呦! 5. 密码需要重新变更的天数: 由于害怕密码被某些‘有心人士’窃取而危害到整个系统的安全,所以有了这个栏位的设计。 你必须要在这个时间之内重新设定你的密码,否则这个帐号将会暂时失效。 而如果像上面的 99999 的话,那就表示,呵呵,密码不需要重新输入啦! 不过,如果是为了安全性,最好可以设定一段时间之后,严格要求使用者变更密码呢! 6. 密码需要变更期限前的警告期限:当帐号的密码失效期限快要到的时候, 就是上面那个‘必须变更密码’的那个时间时, 系统会依据这个栏位的设定,发出‘警告’言论给这个帐号,提醒他‘再过 n 天你的密码就要失效了,请尽快重新设定你的密码呦!’,如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。 7. 密码过期的恕限时间:如果用户过了警告期限没有重新输入密码, 使得密码失效了,也就是说,你在‘必须变更密码的期限前,并没有变更你的密码!’ 那么该组密码就称为‘失效的密码’啰~怎么办?没关系,还有这个栏位的天数设计啊~ 意思就是说,当密码失效后,你还可以用这个密码在 n 天内进行登入的意思。 而如果在这个天数后还是没有变更密码,呵呵!那么您的帐号就失效了!无法登入! 8. 帐号失效日期:这个日期跟第三个栏位一样,都是使用 1970 年以来的总日数设定。这个栏位表示: 这个帐号在此栏位规定的日期之后,将无法再使用。 这个栏位会被使用通常应该是在‘收费服务’的系统中, 你可以规定一个日期让该帐号不能再使用啦! 9. 保留:最后一个栏位是保留的,看以后有没有新功能加入。 举个例子来说好了,假如我的 dmtsai 这个使用者的密码栏如下所示: dmtsai:$1$8zdAKdfC$XDa8eSus2I7nQL7UjRsIy/:13025:5:60:7:2:13125: 这表示什么呢?要注意的是, 13025 是 2005/08/30 ,所以, dmtsai 这个使用者他的密码相关意义是: * 最近一次更动密码的日期是 2005/08/30 (13025); * 能够修改密码的时间是 5 天以后,也就是 2005/09/04 以前 dmtsai 不能修改自己的密码; 如果使用者还是尝试要更动自己的密码,系统就会出现这样的讯息: You must wait longer to change your password passwd: Authentication token manipulation error * 使用者必须要在 2005/09/04 到 2005/10/29 之间的 60 天限制内去修改自己的密码,若 2005/10/29 之后还是没有变更密码时,该帐号就会宣告失效; * 如果使用者一直没有更改密码,那么在 2005/10/29 之前的 7 天内,系统会警告 dmtsai 应该修改密码的相关资讯;例如当 dmtsai 登入时,系统会主动提示如下的资讯: Warning: your password will expire in 5 days * 如果该帐号一直到 2005/10/29 都没有更改密码,由于还有两天的恕限时间,因此, dmtsai 还是可以在 2005/10/31 以前继续登入; * 如果使用者在 2005/10/29 以前变更过密码,那么那个 13025 的日期就会跟著改变,因此, 所有的限制日期也会跟著相对变动喔!^_^ * 无论使用者如何动作,到了 13125 ,大约是 2005/12/8 左右,该帐号就失效了~
二、用户管理命令
用户管理:useradd userdel usermod
组管理: groupadd groupdel
密码管理: passwd change
2.1 组管理
groupsadd
groupsdel
groupsadd -g
组管理比较简单
2.2 用户管理
2.2.1 组的理解
使用id查看
主组:
一个用户有且只有一个主组:
1. -g 指定,则主组为指定的组。 不推荐这样来使用,不然比较乱。都是使用第二种方法,自动more创建
2.未指定 则系统创建与用户名相同的组
附加组:
一个用户有多个附加组或没有:
1.创建用户时指定 -G
2.用户已经存在,加入到附加组,usermod,passwd
2.2.2 创建用户
-G 指定附加组 useradd user01 -G hr,IT
-u 指定uid useradd user02 -u 2000
-d 指定家目录,目录不需要提前存在 useradd user03 -d /user03
-s 指定shell useradd user04 -s /sbin/nologin 。#可以 作为ftp等
2.2.3 删除用户
使用id查看用户是否存在
userdel 直接删除用户,配置文件保存着
userdel -r 彻底删除,删除家目录,邮件文件.
2.2.4 密码管理
passwd [username]
root用户可以给任何人修改密码
普通用户只能给自己修改密码,还需提供原密码
2.2.5 用户编辑
方法1:使用usermod
usermod的参数和 useradd一致。
usermode -s user004 /sbin/nologin #修改shell
usermode -G it #附加组,但是会覆盖,删除了原来的组
usermode -aG it #添加新组it
方法2: gpasswd修改组
usermod 使用 -aG常常会忘记,如果使用-G会直接覆盖了,所以使用了新的方法
gpasswd -a user04 it
gpasswd -d user04 it
gpasswd -M user04 it,hr 一次性多次添加
三、用户提权
默认我们创建的用户都不能执行管理员的权限,需要把他加入到wheel组中。才能使用sudo命令来执行超级管理的命令。
[root@lh ~]# id lh
uid=1000(lh) gid=1000(lh) groups=1000(lh),10(wheel)
用户的操作其实就是操作passwd、group、shadown文件,除了密码修改,都可以操作这几个文件