一、认识/etc/passwd 和 /etc/shadow
这两个文件可以说是Linux系统中最重要的文件之一。如果没有或者存在问题,您是无法登陆Linux系统的
/etc/passwd 由‘:’分割成7个字段,每个字段的具体含义是:
(1) 用户名(如第一行中的root就是用户名),代表用账户的字符串。用户名可以是大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法。虽然用户名可以出现点,但不建议使用,尤其是首位为点时,另外减号也不建议使用,因为容易造成混淆
(2) 存放的就是该账号的口令,为什么‘x’呢?早期的nuix系统口令确实是存放在这里,但基于安全因素,后来就将其存放早‘/etc/shadow’中了,在这里只用一个‘x’代替。
(3) 这个数字代表用户标识号,也叫做UID。系统识别用户身份就是通过这个数字来的0就是root,也就是您可以修改test用户的UID为零,那么系统会认为root和 test为同一个用户。通常UID个的取值范围是0~65535(但实际上已经可以支持到4294967294),0是超级用户的标识号,1~499由系统保留,作为管理账号,普通用户的标识从500开始,如果我么你自定义建立一个普通用户,您会看到该账户的标识号大于或等于500的。
(4) 这个数字代表组标识号,也叫做GID。这个字段对应着/etc/group中的一条记录,其实/etc/group/和/etc/passwd基本上类似。
(5) 注释说明,该字段没有实际意义,通常记录该用户的一些属性例如姓名、电话、地址等。不过,当您使用finger的功能时就会显示这些信息的(稍后作介绍)
(6) 用户的家目录,当用户登录时就处在这个目录下,root的家目录是/root,普通用户的家目录则为/home/username,这个字段可以自定义的,步入您建立一个普通用户test1,要想让test1的家目录在/data下,只要修改/etc/passwd文件中的test1那行中的该字段改为/data既可。
(7) shell,用户登录后要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有很多种sh、csh、ksh、tcsh、bash/等,而Redhat/CentOS的shell就是bash。查看/etc/passwd文件,该制度单除了/bin/bash外还有/sbin/nologin比较多,它表示不允许该账号登录。如果您想建立一个账号不让他登录,那么就可以把该字段盖晨/sbin/nologin,默认是/bin/bash
再来看看/etc/shadow 这个文件,和/etc/passwd类似,用‘:’分割成9个字段
每个字段的含义是:
(1) 用户名,跟/etc/passwd对应。
(2) 用户密码,这个才是该账号的真正的面,不过这个密码已经加密过了,但是有些黑客还是能够解密的。所以,该文件属性设置为000,但是root账户是可以访问或更改的。
(3) 上次更改密码的日期,这个数字是这样计算得来的,距离1970年1月1日到上次更改密码的时间,例如上次更改密码的日期为2012年1月1日,则这个值就是‘365*(2012-1970)/4+1 = 15341’,因为如果是闰年,则有366天。
(4) 要多少天才可以更改密码,默认是0,即不限制。
(5) 密码多少天后到期。即在多少天内必须更改密码,例如这里设置成30,则30天内必须更改一次密码,否则将不能登录系统,默认是9999,可以理解为永远不需要更改。
(6) 密码到期前的警告期限,若这个值设置成7,则表示当7天后密码过期时,系统就发出警告告诉用户,提醒用户他的密码将在7天后到期。
(7) 账号失效期限。您可以这样理解,如果设置这个值为3,则表示:密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,则这个账号就失效了,即锁定了。
(8) 账号的生命周期,跟第三段一样,是按距离1970年1月1日多少天算的。它表示的含义是,账号在这个日期前可以使用,到期后账号作废。
(9) 作为保留用的,没有什么意义。
二、 新增/删除用户和用户组
1、新增一个组“groupadd [-g GID] 组名”
不加“-g”选项则按照系统默认的gid创建组,跟用户一样,GID也是从500开始的。
2、 删除组 “groupdel 组名”
该命令没有特殊选项,但有一种情况不能删除组
这是因为user1中包含user1用户,只有删除账户后才可以删除该组。
3、增加用户 “useradd [-u UID] [-g GID] [-d HOME] [-M] [-s] 用户名”
'-u' 自定义UID
‘-g’是其属于已经存在的某个组,后面可以跟组id,也可以跟组名
‘-d’自定义用户的家目录
‘-M’不建立家目录
‘-s’ 自定义shell
‘useradd’不加任何选项直接跟用户名,则会创建一个跟用户名同样名字的组
4. 删除账户 “userdel [-r] 用户名”
‘-r’的选项作用只有一个,就是删除账户的时候连带账户的家目录一起删除。
*chfn 更改用户的finger(不常用)
*创建/修改一个用户的密码 “passwd [username]”
等创建完账户后,默认是没有设置密码的,虽然没有密码,但该账户同样登录不了系统。只有设置好密码后登录系统。为用户创建密码时,为了安全起见,请尽量设置复杂一些。您可以按照这样的规则来设置密码:
a, 长度大于10个字符
b, 密码中包含大小写字母以及特殊字符“*”、“&”、“%”、等;
c,不规则性(不要出现单词或者某些数字)
d, 不要带自己名字,公司名字,自己电话,自己生日等。
只有root才可以修该其他账户的密码,普通账户只能修改自己的密码,其他账户的密码是不可以修改的
"mk passwd"
这个命令经常用来生成密码,省的自己去想。默认您的Linux是没有这个命令的,需要安装一个包“expect”,如果您的Centos可以上网,请使用yum install expect 既可完成安装。安装好后,输入“mkpasswd”
Linux中有时候普通用户做某些事情是有限制的。这时候就需要切换root身份来做事了。
现假设我用一个普通用户test登录(登陆后使用“whoami”命令查看当前用户是谁)
命令su “su [-] username”
后面可以跟‘-’也可以不跟,普通用户su不加username时及时切换到root用户,当然root用户同样可以su到普通用户。‘-’这个字符的作用是,加上后会初始化当前用户的各种环境变量。我们用一个简单地实验来说明加与不加‘-’的区别:
命令sudo
用su是可以切换用户身份,如果每个普通用户都能切换到root身份,如果某个用户不小心泄漏了root的密码,那岂不是系统非常的不安全?没有错,为了改进这个问题,产生了sudo这个命令。使用sudo执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。默认只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的,即,使用 visudo 命令去编辑相关的配置文件/etc/sudoers. 如果没有visudo这个命令,请使用 yum install -y sudo 安装。
默认root能够sudo是因为这个文件中有一行 “root ALL=(ALL) ALL” 在该行下面加入 “test ALL=(ALL) ALL” 就可以让test用户拥有了sudo的权利。使用 “visudo” 命令编辑/etc/sudoers配置文件,其实它的操作方法和前面阿铭介绍的 “vi” 命令使用方法是一样的,按 ‘i’ 进入编辑模式,编辑完成后,按 “Esc” ,再输入 ”:wq” 完成保存。
此时可以验证一下test的权限了
由于切换到test账户后的当前目录依旧是在/root 下,test账户没有任何权限,所以 ‘ls’ 的时候提示说权限不够,然而使用 sudo ls 输入test账户自身的密码后就有权限了。初次使用sudo 时会有上面的一大段提示,而后再次使用sudo 命令则不再提示。
如果每增加一用户就设置一行,这样太麻>烦了。所以您可以这样设置。把 “# %wheel ALL=(ALL) ALL” 前面的 ‘# ‘ 去掉,让这一行生效。它的意思是,wheel这个组的所有用户都拥有了sudo的权利。接下来就需要您把想让有sudo权利的所有用户加入到wheel这个组中即可。