一,用户管理配置文件
Linux系统下有如下文件来存储用户信息:
- 用户信息文件:
/etc/passwd
passwd文件的格式
passwd文件中的每一行都是类似于如下格式
root:x:0:0:root:/root:/bin/bash
其中,
- root表示用户名(用户登录系统时使用的用户名)
- x表示密码位
这里不是真正的密码,真正的密码在/etc/shadow文件中
(那为毛不删掉这个位置呢???原因在于在对密码进行操作时,会先放到这里,再转化到shadow中。具体来说,系统自动执行pwconv命令,将passwd中的密码转到shadow中。它的逆操作是pwunconv,执行逆操作之后会发现shadow文件消失,passwd中的密码位变成了密码) - 第三个位置中的0表示UID(用户标识号)
关于UID的补充说明: 用户类型 Linux用户分为三种: 超级用户root, UID =
0(可能更好的说法是超级用户的UID为0,如果修改一个用户的UID为0,则它和root的权限是完全一样的)
普通用户:UID 500 - 60000
伪用户: UID 1 - 499 伪用户与系统和程序服务相关 伪用户通常不需要或无法登陆系统
伪用户可以没有宿主目录
- 第四个位置中的0表示组id(GID,缺省组标识号)
每一个用户必须要属于一个用户组,每个用户组可以包含多个用户,同一用户组的用户享有该组共有的权限。一个用户可以属于多个用户组 - 第五个位置上的root表示“注释性描述”(比如存放用户全名等信息,也可以缺省)
- 第六个部分表示宿主目录,每一个用户必须有一个宿主目录,来存放一些基本信息
- 第七个部分表示命令解释器(用户使用的Shell,默认是bash)
- 密码文件:
/etc/shadow
shadow文件的每一行格式如下:
root:$1$SUvqfCBz$7ySk/YxOdDZkHOuPkGpxk1:16445:0:99999:7:::
第一部分为用户名,这里为root
第二部分为密码(已经加密过的),如果删除这一部分,该用户不需要密码就可以登录
第三部分为最后一次修改密码的时间
第四部分为最小时间间隔(两次修改密码之间的最小天数)
第五部分为最大时间间隔(密码保持有效的最多天数)
第六部分为警告时间,从系统开始警告到密码失效的时间
第七部分为账号闲置时间
第八部分为失效时间,账号失效的绝对天数
第九部分为标志,一般不使用
- 用户组文件:
/etc/group
- 用户组密码文件:
/etc/gshadow
- 用户配置文件:
包括/etc/login.defs和/etc/default/useradd
/etc/login.defs
这是一些基本的用户配置,可以自行参看注释来理解,通常不会改动这个文件
/etc/default/useradd
内容如下:
#useradd defaults file
GROUP=100 #如果添加用户时,没有指定确定的组,有些Linux就会使用这个组作为该新用户的组
HOME=/home #默认的宿主目录,如果不指定新用户的宿主目录,就会放在这里
INACTIVE=-1 #账户是否被禁用
EXPIRE= #账号的失效时间,一个用户添加时就会指定何时失效。
SHELL=/bin/bashSKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
- 新用户信息文件:
/etc/skel
- 登录信息:
/etc/motd和/etc/issue
/etc/motd
当用户登录之后显示的内容,可以对比后面的issue
/etc/issue
里面写了Linux登录前提示的信息,比如:
CentOS release 6.5 (Final)
Kernel \r on an \m
上面除了写出了操作系统版本号,还有内核版本。
不建议使用默认的提示信息,因为如果让不法分子知道了你系统的信息,他就可以很容易根据你的系统内核版本的已知漏洞来攻击你,灰常的危险
建议issue中放一些无关紧要的信息。。。
motd里面写一些内部人员需要知道的信息
- SetUID
在使用Linux服务器时,普通用户经常会进行修改密码操作,但是,passwd文件的所有者为root,其他人的操作权限仅为只读,shadow文件所有者也为root,其他人连只读权限都没有,那用户是如何正常修改密码的呢?
解答如下:
我们可以通过如下命令查看修改密码时使用的命令passwd的信息
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 41280 Jun 5 2012 /usr/bin/passwd
可见,passwd命令文件的所有者有一个奇怪的s权限,这个是什么呢?
SetUID的定义:
当一个可执行程序具有SetUID权限,用户执行这个程序的时候,将以这个程序的所有者的身份执行
上面说的s就是SetUID权限
所以,当passwd命令执行时,它会以所有者root的身份执行,所以,它可以无法无天的想干什么就干什么.
设置SetUID权限的方法和之前的相同:
chmod u+s install.log 给install.log这个文件赋予SetUID权限
但是,这样设定是木有意义的,因为install.log不是一个可执行的文件
SetUID权限是非常危险的,不要轻易设置
比如:
chmod u+s /bin/vi 设置vi这个命令文件SetUID权限
这样,就可以通过vi来编辑一些只有root用户才能编辑的文件,非常危险!
- SetGID
和SetUID类似,
就是当一个可执行程序具有SetGID权限,用户执行这个程序的时候,将以这个程序的所有组的身份执行
添加SetGID权限的命令:
chmod u+g install.log 给install.log这个文件赋予SetGID权限
- 粘着位(ticket)
如果一个权限为777的目录,被设置了粘着位,每个用户都可以在目录下创建文件,但只可以删除自己是所有者的文件.
比如,/tmp就是这样的一个目录
ls -ld /tmp
drwxrwxrwt 4 root root 4096 Jan 13 15:07 /tmp
/tmp下存放了一些临时文件,并且不允许文件的非所有者删除该文件
增加粘着位的方法:
chmod u+t /XXXXX
二,用户管理命令
- 用户添加命令: useradd
u: UID
g:缺省所属用户组
G:指定用户所属多个组
d:宿主目录
s:命令解释器shell
c:描述信息
e:指定用户失效时间
三,用户组管理命令
- 添加组命令: groupadd
具体使用方法可以man一下…
- 设置组密码及管理组内成员命令: gpasswd
-a 添加用户到组
-d 从用户组中删除用户
-A 设置用户组管理员
-r 删除用户组密码
-R 禁止用户切换为该组(其他用户不能进入该组)
例如:
gpasswd -a Mary softgroup 将Mary添加到softgroup中
(gpasswd命令在Unix中通常都没有,可以使用下面的命令来替代)
设置组密码:
gpasswd softgroup 给softgroup组设定密码
- 用户查看自己的所属信息的命令: id
输入后会显示自己的uid,gid等
- 修改用户信息命令:usermod
例如:
usermod -G softgroup Mary 将Mary添加到softgroup中
- 查看用户隶属组命令: groups
- 切换用户组命令: newgrp
- 用户组配置文件检测命令: grpck
- 修改文件所属组命令: chgrp
- 编辑/etc/group文件命令: vigr
- pwck 检测/etc/passwd文件(锁定文件)
- vipw 编辑/etc/passwd文件
(和vi唯一不同的是vipw会锁定该文件,防止在一个用户修改时,另一个用户也进行修改) - finger 查看用户详细信息
- su 切换用户(su - 环境变量切换)
最常用的su root 切换到root账户 - passwd -S 查看用户密码状态
- who w 查看当前登陆用户信息
- chage 查看用户密码相关设定
四,批量添加用户
-
方法一:使用Linux命令
适合在添加较少用户时使用 -
newusers命令 导入用户信息文件
在使用这个命令之前,需要先有一个用户信息文件,并且这个用户信息文件要按照/etc/passwd的格式书写
写一个user.info文件,比如下面这个:
SE01::1001:3::/home/SE01:bin/bash
SE02::1002:3::/home/SE02:bin/bash
SE03::1003:3::/home/SE03:bin/bash
SE04::1004:3::/home/SE04:bin/bash
之后,使用命令newusers < user.info
把写好的user.info文件输入给newusers命令,这样就完成了这四个用户的创建
- pwunconv命令 取消shadow password功能
(为了能够批量导入密码) - chpasswd命令 导入密码文件(格式 用户名:密码)
导入密码文件,需要写一个密码文件,例如:
新建一个pass.info文件,内容如下
SE01:SoftWareEnginer
SE02:SoftWareEnginer
SE03:SoftWareEnginer
SE04:SoftWareEnginer
再使用命令chpasswd < pass.info
完成批量密码修改
可以用tail -4 /etc/passwd命令来验证一下passwd文件是否被添加了被加密过的密码
- pwconv命令 将密码写入shadow文件
在前面的基础上,使用这个命令,将passwd文件信息写入shadow文件,至此,大功告成
- 方法二:制作Linux脚本
参考Shell脚本部分。。。
五,用户授权
- 限制用户su为root:
添加一个sugroup组(名字随便。。。)
groupadd sugroup
修改su文件权限,使只有su的所属组和所属者才有执行权限
chmod 4550 /bin/su
把su文件的所属组改为sugroup
chgrp sugroup /bin/su
这样只有su的所属者root和所属组sugroup的用户能够执行su命令
- 使用sudo代替su
在执行sudo命令时,用户将临时成为root,不会泄露root口令,并且仅向用户提供有限的命令使用权限
sudo的配置文件:/etc/sudoers
编辑配置文件的命令:visudo
格式:用户名(组名) 主机地址=命令(绝对路径)
例如:
使用visudo命令
会启动文字编辑软件来进行sudo配置文件的编辑
键入:
SE01 MyMachine=/usr/sbin/useradd,/usr/sbin/userdel
这样,就给SE01用户用sudo执行useradd和userdel命令了(sudo useradd SE02)
使用sudo之后需要输入密码,这里是SE01的密码(不是root密码,并且只需要输入一次)
MyMachine是主机名,也可以写IP地址
sudo -l命令
查看用户可以使用sudo执行的命令
sudo命令是让用户以root的身份执行命令,而不是给用户执行某些命令的权限
假如让一个普通用户可以使用sudo执行vi命令,则该用户则可以修改所有文件(包括所有者为root的文件)
sudo执行的命令可以精细化
比如:
使用visudo
输入
SE01 MyMachine=/sbin/shutdown -h now
则SE01只能使用shutdown -h now,其他的都不可以