Linux入门之用户管理

 

linux用户进行访问一般需要认证、授权、审计,其中linux提供了很多的相关命令和相关文件来供使用者分层管理。

 

用户分类 user

按权限划分:

管理员:root uid0

普通用户:

系统用户:uid:1-499(centos6)  uid:1-999(centos7)

特性:1、用来运行特定进程的一种身份

  2、对守护进程获取资源进行分配

  3、不需要登录

        登录用户:uid:500+(centos6)  uid:1000+(centos7)

用来登录系统的普通用户

注意:系统是用uid来区分用户的,如果root500tom用户uid0,那么tom身份为超及管理员

 

用户组 group

按权限划分:

管理员组:root gid0

普通组:

系统组:1-499(centos6)  1-999(centos7)

一般组:500+(centos6)  1000+(centos7)

 

按单个用户分配组划分:

用户组分类:

私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组

基本组:用户的默认组

附加组:默认组以外的其它的组

 

基本组和附加组区别:

primary group:主要组、基本组,一个用户只有一个

secondary group:辅助组、附加组,可以有多个,也可以没有

 

安全上下文

用来控制进程所能访问恩资源的权限取决于进程的发起者(执行者)的身份

 

用户及组相关的配置文件

/etc/passwd     用户及其属性信息(名称、UID、基本组GID等)

/etc/shadow    用户密码以及密码相关的属性

/etc/group      组的属性信息

/etc/gshadow    组的密码及相关属性

 

/etc/passwd   用户属性文件

account:登录名

password:密码token

UID:用户ID,唯一性

GID:基本组ID,只能有一个

CECOS:注解信息

HOME DIRECTORY:用户家目录,不指定默认为/home/[username]

SHELL:用户的默认shell类型,默认为/bin/bah

SHELL/sbin/nologin时表示为无法登录

 

/etc/shadow   用户口令信息

用户名

加密的口令 !*不能登录

最后一次修改口令的天数 为0表示登录时必须修改口令

口令最短使用期限

口令最长使用期限

警告天数

账号多少天后锁定

账号多少天后失效 从1970年计算

提示:如果最长使用期限小于最短使用期限,用户将不能修改密码

 

注意:date +%s 当前用户修改的秒数 / (24小时*60*60秒)=当前使用天数

 

/etc/group  用户组属性文件

组名

组口令:类似于/etc/passwd,口令信息被保存到影子文件(/etc/gshadow)

gid : 类似入uid,于uid不冲突,但也是唯一性

以此为附加组的用户列表:如果为多个用户,中间用“,”隔开

注意:组文件关系修改后,必须重新登录才会重新读取组成员关系

 

/etc/gshadow  用户组密码及相关属性文件

组名

组密码:一般用于非组成员需要临时切换进入某组时需要输入密码

组成员列表:组管理员的列表,可以更改组成员变动和密码

以此为附加组的用户列表:如果为多个用户,中间用“,”隔开

 

用户及组相关文本操作工具

一般情况下,修改文本可能使用geditnanovim等文本专用编辑工具,但是在某些情况下如果修改特殊格式的文本出现了内容或格式错误,一般难以检查,这时需要用到专用的用于修改特定文本的单一工具来检查格式

vipw  作用等价于 vi /etc/passwd

vigr   作用等价于 vi /etc/group

 

用于检查用户及组相关配置文件内容格式的命令

pwck  检查/etc/passwd中的用户及密码信息

grpck  检查/etc/group中的组及相关信息

 

注意:在/etc/paswd文件中,一般设定了密码的第二位(用:隔开的第二个字段)x显示,这是说明把密码保存到了/etc/shadow中,但是可能在原来没有/etc/shadow文件,密码就是存在此文件中的第二字段,这时输入pwck命令将会把第二字段的密码移动到/etc/shadow中,添加一条信息,并将/etc/passwd文件第二字段设为x

 

关于口令加密的问题

加密方法:

对称加密:加密和解密使用同一个密码

公钥加密:每个密码都成对儿出现,一个为私钥(secret key),一个为公钥(public key)

单向加密,散列加密:提取数据特征码,常用于数据完整性校验,hash算法不可逆推

1、雪崩效应:初始微小的改变都会引起全局巨大改变

2、定长输出

MD5Message Digest, 128位定长输出

SHA1Secure Hash Algorithm, 160位定长输出

 

更改新创建用户的加密算法

authconfig  --passalgo=[passtype]  --uptdate   (修改后只是再次新创建用户生效)

passtype(加密使用算法): md5sha1sha512

 

使用openssl命令生成一个固定位数的复制口令

openssl  rand  --base64  #        生成base64算法的口令,#为位数

 

 

 

用户管理命令

useradd  usermod  userdel  id  su  passwd

 

useradd  添加用户

useradd  [option]  [uname]

 -u # :指定uid

 -o:不检查uid唯一性,一般和-u配合使用

 -g [gname|gid]:指定基本组

 -G [gname|gid]:指定附加组,多个用“,”隔开

 -c comment :注释信息

 -d /path/to/dir :指定家目录,目录事先不能存在,因为要自动生成

 -s [shelltype] :指定用户的默认shell类型

 -N:表示创建用户时不创建私有组做基本组

 -r:添加为系统用户,一般和 -s /sbin/nologin配合使用

 -M:不自动创建家目录,系统用户默认不创建

 -D [option] [arg]:显示或设置新建用户的默认设置

     如果加了选项和表示设置,如useradd -D -s /bin/bash修改默认shell类型

提示:useradd  -D显示的默认设置保存在/etc/default/useradd文件中,如果创建用户时使用了-N(及不创建同名私有组做基本组),那么就把此用户加入到文本中GROUP字段中字段指定GID的组作为基本组,一般默认GID100,表示组名为USERS的组

 

userdel 删除用户命令

userdel  [option]  [uname]

-r :默认不加表示保存用户家目录,加此选项会彻底删除家目录

 

usermod 修改用户配置信息命令

    usermod [option] [uname]

    -u #:修改uid

    -l [newname]:修改用户的账号名

    -g #:修改所属基本组

    -G [group1],..:修改附加组

    -a:表示append(追加),一般和-G配合使用追加附加组

    -c "COMMENT":修改注释信息

    -s [SHELL]:修改默认shell类型

    -d:修改家目录

    -m:一般配合-d选项,表示迁移家目录数据

    -L:表示锁定(lock)用户      在/etc/shadow第二字段(密码口令)中加入!

    -U:表示解锁(unlock)用户    在/etc/shadow第二字段(密码口令)中拿掉!

    -e [YYYY-MM-DD]:指定账号过期时间,-1表示不过期

    -f [day]: 指定非活动期限

     

id 查看用户相关的id信息

id  [option]  [username]

-u: 显示uid

-g:显示gid

-n:显示名字

-G:显示GROUPS

 

su: 切换用户 switch username

su  [option] [-] [uname]  不指定用户名默认表示切换至root

-   [uname]           完全切换

-c  '[command]        通过临时调用指定用户身份来执行命令 

如:su - root -c “ls /etc/shadow”     #以root身份查看密码配置文件

-l  [uname]: 等价于 - [uname] --login [uname]

提示:关于切换方式介绍

su uname:非登录式切换,既保留当前用户的配置,不改变当前工作目录

su - uname:登陆式切换,会读取自身的用户配置,并切换至家目录

root用户下切换到其它用户无需密码,非root切换时需要密码

 

passwd  用户密码信息设置命令

passwd  [option]  [uname]  只有root用户有权限设置指定用户信息

-llock表示锁定指定用户

-uunlock表示解锁指定用户

-e:强制用户下次登陆时修改密码

-x maxday:密码最长使用期限

-n minday:密码最短使用期限

-w warndays:表示提前多少天发出警告

-i inactiveday:非活动期限

--stdin:从标准输入接收用户密码

例如: echo PASSWORD | passwd  --stdin USERNAME

  

 

chage  修改密码及账户相关信息

chage   [OPTION]...   [USERNAME]

-d LAST_DAY  密码最后修改时间

-E, --expiredateEXPIRE_DATE 账户过期时间

-I, --inactive INACTIVE非活动期限

-m, --mindaysMIN_DAYS设置密码最短使用期限

-M, --maxdaysMAX_DAYS设置密码最长使用期限

-W, --warndaysWARN_DAYS密码警告期限

l,显示密码策略

 

例子:

chage  -d  0  tom   
#表示下次tom登录必须修改密码
chage  -m  0  -M  42  -W 14  -I  7  tom
#表示tom用户密码最短可以不使用,最长使用到42天,第14天开始警告,前一周用户为非活动状态
chage  -E  2016-09-10 tom
#设定用户到2016年9月10号不能再次登陆并使用


 

用户其它信息的相关命令

chfn  设置个人备注信息(如电话、姓名等)

chsh  [shelltype]  设置当前默认shell类型

finger  查看备注信息

 

 

 

用户组管理命令

groupadd  groupmod  groupdel  gpasswd  newgrp  groupmems  groups

 

groupadd 添加组命令

groupadd  [option]  [gname]

           -g #:指定gid

-r:创建为系统组

 

 

groupmod 修改或设定组属性信息

groupmod  [option]  [gname]

-g #:设置组的gid

-n newgname:修改组名字

 

groupdel 删除组

groupdel   [gname]

 

gpasswd  设置组密码、组成员关系

gpasswd  [option]  GROUP

          -a user:将指定用户添加至指定组中

          -d user:将指定用户从指定组中删除关系

          -A user1,user2... :设置指定用户对指定组有管理权限,既组管理者

 

newgrp 临时切换基本组

newgrp  

      如果用户不属于此组,则需要组密码

 

groupmems 组成员关系调整命令

groupmems  [option]  [action]

option:

-g  :更改为指定组

action

-a ,--add username:指定用户加入组

-d ,--del username:从组删除指定用户

-l:列出组成员列表

-p ,--purge:清除所有成员

 

groups 根据用户查看组信息

groups [option] [uname] 不指定用户默认为查看当前登录用户的组


getent  查看指定配置文件信息

getent  [cmd]  [uname]  默认不指定用户为查看所有

cmd:

  passwd   查看/etc/passwd下信息

  group    查看/etc/group下信息

  shadow   查看/etc/shadow下信息

  gshadow  查看/etc/gshadow下信息

 

 

 

批量创建用户和设置用户密码

newusers  [userfile]

chpasswd  [passfile]

file:为特定格式

userfile:   用户名:x uid gid : 家目录 : 默认shell类型

passfile:   用户名:密码

 

案例:

1、创建用户gentoo,附加组为binroot,默认shell/bin/csh,注释信息为"Gentoo Distribution"

useradd  -G bin,root -s /bin/csh -c "Gentoo DIStribution" gentoo


2、创建下面的用户、组和组成员关系

名字为admins 的组

用户natasha,使用admins 作为附属组

用户harry,也使用admins 作为附属组

用户sarah,不可交互登录系统,且不是admins 的成员,natashaharrysarah密码都是centos

groupadd admins                      #添加admins组
useradd -G admins natasha #添加natasha用户附加组为admins
useradd -G admins harry                #添加harry用户附加组为admins
useradd -s /sbin/nologin sarah       #添加sarah并指定默认shell类型为不登陆


 

echo "centos" | passwd --stdin natasha     #通过管道将输出传给标准输入修改密码
echo "centos" | passwd --stdin harry
echo "centos" | passwd --stdin sarah

 

3、创建testuser uid 1234,主组:bin,辅助组:root,ftp,shell:/bin/csh home:/testdir/testuser

useradd -u 1234 -g bin -G root,ftp -s /bin/csh -d /testdir/testuser testuser
id test                    #查看test用户id gid等信息


4、修改testuser uid:4321,主组:root,辅助组:nobody,loginname:testhome:/home/test 家数据迁移

usermod -u 4321 -g root -G nodody -l test -d /home/test -m testuser
id user
groups test
groupmems -l -g root
ls -a /home/test

5、批量创建帐号:user1...user10

uid:3000-3009,shell:/bin/csh,home:/testdir/username

passwd:usernamepass

注意家目录相关配置,使用户正常登录


第一步:

vim /testdir/adduser.txt#创建指定格式用户信息文本文件
[root@mzf ~]# cat /testdir/addusers.txt    #要添加的内容
user1:x:3001:3001::/testdir/user1:/bin/csh
user2:x:3002:3002::/testdir/user2:/bin/csh
user3:x:3003:3003::/testdir/user3:/bin/csh
user4:x:3004:3004::/testdir/user4:/bin/csh
user5:x:3005:3005::/testdir/user5:/bin/csh
user6:x:3006:3006::/testdir/user6:/bin/csh
user7:x:3007:3007::/testdir/user7:/bin/csh
user8:x:3008:3008::/testdir/user8:/bin/csh
user9:x:3009:3009::/testdir/user9:/bin/csh

第二部:

newuser /testdir/adduser.txt    #对刚才的文件做批量添加用户读取

第三部:

vim /testdir/addpasswd.txt                #创建指定格式密码文本文件
[root@mzf ~]# cat /testdir/addpasswd.txt  #内容入下
user1:user1pass
user2:user2pass
user3:user3pass
user4:user4pass
user5:user5pass
user6:user6pass
user7:user7pass
user8:user8pass
user9:user9pass
第四步:
cat /testdir/addpasswd.txt | chpasswd    #对密码文件做匹配设定密码操作


第五步:

tail -n 9 /etc/passwd                    #操作最近添加的9个用户信息
tail -n 9 /etc/shadow                    #查看最近添加的9个用户的密码信息
 
getent passwd | tail -n 9#作用同上面2条命令
getent shadow | tail -n 9


第六步:

cat /etc/default/adduser#查看默认配置信息
 
cp -r /etc/kel/.[^.]* /testdir/user1#将默认用户配置模板文件拷贝至家目录
cp -r /etc/kel/.[^.]* /testdir/user2
cp -r /etc/kel/.[^.]* /testdir/user3
cp -r /etc/kel/.[^.]* /testdir/user4
cp -r /etc/kel/.[^.]* /testdir/user5
cp -r /etc/kel/.[^.]* /testdir/user6
cp -r /etc/kel/.[^.]* /testdir/user7
cp -r /etc/kel/.[^.]* /testdir/user8
cp -r /etc/kel/.[^.]* /testdir/user9


 

总结:在调整用户组关系信息中有很多命令可以使用,usermod可以指定用户来设定,groups可以指定用户来查看,而指定组可以用gpasswdgroupmems,查看各种配置信息,可以用getent来安全查看