Linux学习笔记(5)-用户管理

来源:互联网 发布:淘宝一颗钻要多少分 编辑:程序博客网 时间:2024/06/06 01:53

一,用户管理配置文件

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配置文件的编辑 
键入:

SE01MyMachine=/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,其他的都不可以

0 0
原创粉丝点击