linux用户和组管理
Linux用户配置文件
用户管理主要通过修改用户配置文件完成,用户管理控制工具最终目的也是为了修改用户配置文件,那就让我们一起来认识一下Linux用户账户的配置文件.
1.用户信息文件/etc/passwd
/etc /passwd是系统识别用户的一个文件,系统所有的用户在这里都有记载。假设当以medesky这个账户登录时,系统会检查/etc/passwd文件,查看是否有medesky这个账户,然后确定medesky的UID,通过UID来确认用户和身份,如果存在则读取/etc/shadow影子文件中的密码。如果密码核实无误则登录系统,读取用户的配置文件。
任何用户都可以读取该文件内容,在/etc/passwd中,每一行表示的是一个用户账户的信息,一行有7个断位,每个段位用“:”分隔,文件的内容如下所示:
[root@localhost medesky]# wc -l /etc/passwd
36 /etc/passwd
[root@localhost medesky]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
medesky:x:500:500:medesky:/home/medesky:/bin/bash
…
下表为/etc/passwd文件中各个字段的含义
字段 | 含义 |
---|---|
用户名 | 用户登录系统时使用的用户名 |
密码 | 密码位,存放加密的密码,实际看到的是X,密码已被映射到/etc/shadow文件中了 |
UID | 用户标识号 |
GID | 缺省组标识号 |
用户名全称 | 用户名描述,可以不设置 |
用户宿主目录 | 用户登录系统后首先进入的目录 |
用户使用shell | 用户使用的shell类型 |
简单来解释用户UID这个概念:
UID使用户的ID值,在系统中每个用户的UID值是惟一的,更确切地说每个用户都要对应一个惟一的UID。系统的UID的值从0开始,是一个整数,最大值可以在/etc/login.defs文件中查到,在Red Hat系列的Linux系统中最大值默认是60000.使用如下的命令可以查到最大UID的值。
[root@localhost me]# cat /etc/login.defs | grep UID_MAX
UID_MAX 60000
在Linux系统中用户分为三种,它们对应的UID如下:
超级用户(root,UID=0)
普通用户(UID 500-60000)
伪用户(UID 1-499)
密码位为什么要保留呢?其实我们在创建用户密码的时候先将密码保存到passwd文件中,然后执行pwconv命令将密码写到shadow文件中,我们也可以执行pwunconv命令将密码从shadow文件中写到passwd文件中。为了安全,创建密码的同时系统会自动执行pwconv命令。
2.密码文件/etc/shadow
/etc/shadow文件是/etc/passwd的影子文件,这个文件并不由/etc/passwd产生,这两个文件应该是对应互补的。shadow内容包括用户及被加密的密码以及其他/etc/passwd不能包括的信息,比如用户的有效期限等。
这个文件只有用户root可以读取操作,/etc/shadow文件的权限不能随便更改为其他用户可读。如果发现这个文件的权限变成了其他用户组群或用户可读了,要进行检查,以防系统安全问题的发生。
/etc/shadow文件的内容包括9个断位,每个段位之间用“:”分割,文件的内容如下所示。
[root@localhost me]# cat /etc/shadow
root::14997:0:99999:7:::
bin:*:14985:0:99999:7:::
daemon:*:14985:0:99999:7:::
adm:*:14985:0:99999:7:::
me::14985:0:99999:7:::
zlz::14985:0:99999:7:::
bb::14985:0:99999:7:::
trc::14985:0:99999:7:::
medesky::14985:0:99999:7:::
……
下表为/etc/shadow文件中各个字段的含义
字段 | 含义 |
---|---|
用户名 | 这里的用户名和/etc/passwd中的用户名是相同的 |
密码 | 密码已经加密,密码已经加密,如果有些用户显示的是“!!”,则表示这个用户不能登录到系统。 |
最后一次修改时间 | 从1970年1月1日算起到最近一次修改密码的时间间隔(天数) |
两次修改密码间隔最少的天数 | 如果设置为0,则禁用该功能。该字段是指用户可以更改密码的天数 |
两次修改密码间隔的最大天数 | 如果设置为0,则禁用该功能。该字段是指用户必须更改密码的天数 |
提前多少天警告用户密码过期 | 用户登录系统后,系统登录程序提醒用户密码将要过期 |
账号闲置时间 | 账号闲置时间 |
用户过期日期 | 指定用户账户过期的天数,如果这个字段的值为空,账户永久可用 |
保留字段 | 目前为空,以备将来Linux发展之用 |
Linux组配置文件
具有某种共同特征的集合就是用户组群。
1./etc/group文件
[root@localhost ~]# cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
medesky:x:500:medesky,zlz,bb,hh,wl
/etc/group文件中各字段的含义见下表:
字段 | 含义 |
---|---|
组群名 | 用户组群名称 |
组群密码 | 密码位,存放加密的密码,实际看到的是X,密码已被映射到/etc/gshadow文件中了 |
组群标识号 | 组群标识号 |
组群成员 | 属于这个组群的成员在这里都会列出来 |
2./etc/gshadow文件
[root@localhost ~]# cat /etc/gshadow
root:::root,medesky
bin:::root,bin,daemon
medesky:!!::
zlz:!::
bb:!::
……
/etc/group文件中各字段的含义见下表:
字段 | 含义 |
---|---|
组群名 | 组群的名称 |
组群密码 | 密码已加密,如果有些组群在这里显示的是“!”,表示这个组群没有密码。 |
组管理员 | 组群的管理者,有权对该组添加、删除用户 |
组成员 | 属于改组的用户成员列表 |
账户相关文件或目录
1.存放用户启动文件的目录/etc/skel
/etc/skel这个目录有root用户管理,当管理员创建新用户时,这个目录下的文件会自动复制到新创建的用户的宿主目录下。/etc/skel目录下的所有文件都是隐藏的。
2.规定创建新用户时的一些默认设置的配置文件/etc/login.defs
/etc/login.defs文件规定了创建新用户是的一些默认设置,比如创建用户是否需要宿主目录、UID和GID的范围、用户的期限等,这个文件可以通过root用户来修改
下面简单介绍CentOS5.5系统中/etc/login.defs文件的内容。
[lgly@localhost ~]$ cat /etc/login.defs
# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail
#MAIL_FILE .mail
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between passwordchanges.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a passwordxpires.
#
//用户必须更改密码的天数
PASS_MAX_DAYS 99999
//用户可以更改密码的天数
PASS_MIN_DAYS 0
//密码最小长度
PASS_MIN_LEN 5
//在用户密码过期前的警告时间
PASS_WARN_AGE 7
#
# Min/max values for automatic uid selection in useradd
//创建新用户时用户的UID从500开始
UID_MIN 500
//用户的最大UID值为60000
UID_MAX 60000
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 500
GID_MAX 60000
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD /usr/sbin/userdel_local
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
//是否要求创建用户宿主目录,yes表示要求创建
CREATE_HOME yes
# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
//缺省创建文件和目录的权限
UMASK 077
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
# Use MD5 or DES to encrypt password? Red Hat use MD5 by default.
MD5_CRYPT_ENAB yes
3.useradd命令添加用户时的规则文件/etc/default/useradd
# useradd defaults file
GROUP=100
//用户的宿主目录创建在/home中
HOME=/home
//是否禁用账户,-1表示不禁用
INACTIVE=-1
//账户终止日期,不设置表示不启用
EXPIRE=
//所有shell类型
SHELL=/bin/bash
//创建新用户时从何处复制文件到宿主目录
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
4.登录信息文件/etc/issue、/etc/motd
/etc/issue:用户在没有登录到系统就可以看到的信息
/etc/motd:只有在用户成功登录到系统之后才可以看到的信息
为什么普通用户可以更改密码?
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x 1 root root 22984 2007-01-07 /usr/bin/passwd
原因在于passwd这条命令的权限
SetUID的定义:当一个可执行程序具有SetUID权限,用户执行这个程序时,将以这个程序所有者的身份执行
SetUID=4
给touch命令授予SetUID权限
[root@localhost ~]# ll /bin/touch
-rwxr-xr-x 1 root root 42284 2010-03-01 /bin/touch
//[root@localhost ~]# chmod u+s /bin/touch
[root@localhost ~]# chmod 4755 /bin/touch
[root@localhost ~]# ll /bin/touch
-rwsr-xr-x 1 root root 42284 2010-03-01 /bin/touch
SetGID的定义:当一个可执行程序具有SetGID权限,用户执行这个程序时,将以这个程序所属组的身份执行
SetUID=2
查找SetUID程序
[root@localhost ~]# find / -perm -4000 -o -perm –2000
粘着位(t)=1[临时文件存放的目录tmp]
t,如果一个权限为777目录具有粘着位,每个用户都可以在这个目录下创建文件,但是只能删除所有者为自己的文件
用户或用户组管理命令
1.用户管理命令
添加用户
useradd 设置选项 用户名
-D:查看缺省参数,相当于查看/etc/default/useradd文件
-u:UID
-g:缺省所属组GID
-G:指定用户所属多个组
-d:宿主目录
-s:命令解释器shell
-c:描述信息,如果描述信息中包含空格,就要用双引号引起来
-e:指定用户失效时间
passwd 用户名
修改用户信息
usermod 跟添加用户一样
将用户me的登录名改为medesky
# usermod -l medesky me
将用户medesky添加到root组中
# usermod -G root medesky
2.用户组管理命令
添加用户组:group -g GID 组名
删除用户组:groupdel 组名
修改用户组名称:groupmod -n medesky me(修改me组名为medesky)
gpasswd 组 //给组设置密码
gpasswd [-r] 组 //删除用户组密码
gpasswd [-R] 组 //禁止用户切换为该组
gpasswd [-a 用户] 组 //添加用户到用户组
gpasswd [-d 用户] 组 //从用户组删除用户
gpasswd [-A 用户,…] 组 //设置用户组管理员
授权用户me和lgly对目录/test/soft有写权限
[root@localhost test]# groupadd medesky
[root@localhost test]# usermod -G medesky lgly
[root@localhost test]# gpasswd -a me medesky
正在将用户“me”加入到“medesky”组中
[root@localhost test]# grep medesky /etc/group
medesky:x:503:lgly,me
[root@localhost test]# ll -d soft/
drwxr-xr-x 2 root root 4096 01-25 10:27 soft/
[root@localhost test]# chmod g+w soft/
[root@localhost test]# ll -d soft/
drwxrwxr-x 2 root root 4096 01-25 10:27 soft/
[root@localhost test]# chgrp medesky soft
[root@localhost test]# ll -d soft/
drwxrwxr-x 2 root medesky 4096 01-25 10:27 soft/
3.用户和组群维护命令
pwck:检测/etc/passwd文件
vipw:编辑/etc/passwd会自动锁定文件
su [用户名]:切换用户(su – 用户名:环境变量切换)
passwd -S [用户名]:查看指定用户密码状态
newgrp [用户组]:切换用户组
grpck:检测用户组配置文件
chgrp:修改文件所属组
vigr:编辑/etc/group文件的同时锁定文件
删除用户
userdel [-r] 用户名 //加上“-r”选项之后会同时删除用户目录
手工删除:
使用find命令查找俗语某个用户或用户组的文件
find选项-user、-uid、 -group、-gid
1、对对需要保留的文件进行移动和备份
2、对不需要的文件进行删除
3、清楚用户文件中的相关表项
4、清楚用户宿主目录
禁用和恢复用户
禁用
usermod -L username
passwd -l username
恢复
usermod -U username
passwd -u username
禁用原理,看下面的代码就会明白滴
[root@localhost ~]# grep “^me” /etc/shadow
me:$hh123456:14985:0:99999:7:::
[root@localhost ~]# passwd -l me
Locking password for user me.
passwd: Success
[root@localhost ~]# grep “^me” /etc/shadow
me:!!hh123456:14985:0:99999:7:::
如果我们想停止shadow功能,这个时候我们应该怎么去做呢?
pwconv /pwunconv
grpconv/grpunconv
authconfig命令临时有效
如果想永久生效修改/etc/sysconfig/authconfig文件
system-config-users 启用图形界面的用户管理程序
账户信息显示
finger [用户名]:查看用户详细信息
groups [用户名]: 查看该用户隶属那些组
id:查询uid信息、gid信息以及组的信息……
who、w:查看当前登录用户信息,w查看的用户信息更全点
账户安全
在Linux系统上账户安全可以使用chage命令管理用户口令时效,防止用户口令由于长时间使用导致泄漏,或是被黑客破解口令而受到攻击。
语法
chage [选项] [用户名]
-d, –lastday 最近日期 密码最后修改的日期
-E, –expiredate 过期日期 设置密码的过期日期,如果为0,代表密码立即过期;如果为-1,代表密码用不过期
-h, –help 显示此帮助信息并退出
-I, –inactive 失效密码 密码过期后,锁定账户的天数
-l, –list 查看密码设置情况
-m, –mindays 最小天数 密码修改最小天数
-M, –maxdays 最大天数 密码修改最大天数
-W, –warndays 警告天数 设置密码过期前,开始警告的天数
例如:
[[email protected] ~]# chage –list zengxi
Last password change : Apr 27, 2011
Password expires : never
Password inactive : never
Account expires : Oct 28, 2011 账号过期时间
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
sudo
执行sudo命令时,临时成为root,命令可以尽可能的细
配置文件:/etc/sudoers,编辑配置文件命令visudo。
格式如下:
medesky 192.168.61.155=/bin/touch,/usr/sbin/useradd
John
破解medesky密码
# grep medesky /etc/passwd > /test/medesky.pw
# grep medesky /etc/shadow > /test/medesky.sd
# /test/john-1.6.6/run/unshadow /test/medesky.pw /test/medesky.sd > /test/medesky.john
# /test/john-1.6.6/run/john /test/medesky.john
创建用户和组群的特殊方法
1.修改用户和用户组群的配置文件来添加用。 1.修改/etc/passwd文件
添加如下一条用户记录
php:x:505:500:php:/home/php:/bin/bash
2.修改/etc/shadow文件
添加如下一条记录
php:x:14999:0:99999:7:::
(注:如果你和我一样比较懒的话,也可以执行pwconv命令,让/etc/passwd和/etc/shadow同步,注意查看/etc/shadow的内容是否同步,具体步骤如下:
[root@localhost ~]# pwconv
[root@localhost ~]# grep php /etc/shadow
)
3.创建用户的主目录并把/etc/skel目录下的隐藏文件复制过去,具体命令如下:
[root@localhost ~]# cp -rf /etc/skel/ /home/php
[root@localhost ~]# ls /home
bb lost+found medesky01 medesky03 medesky05 php zlz
lgly me medesky02 medesky04 medesky06 trc
(当然你也可以先创建目录然后将skel中的文件复制到php中,具体步骤如下:
[root@localhost ~]# mkdir /home/php
[root@localhost ~]# ls /home
bb lost+found medesky01 medesky03 medesky05 php zlz
lgly me medesky02 medesky04 medesky06 trc
[root@localhost ~]# ls -a /home/php
[root@localhost ~]# cp -rf /etc/skel/. /home/php
[root@localhost ~]# ls -a /home/php
. .. .bash_logout .bash_profile .bashrc .kde .mozilla
4.改变新增用户宿主目录的属组合权限,具体如下:
[root@localhost ~]# chown -R php /home/php
[root@localhost ~]# chmod 700 /home/php
[root@localhost ~]# ll -a /home/php
总计 56
drwx—— 4 php root 4096 01-25 22:28 .
drwxr-xr-x 16 root root 4096 01-25 22:26 ..
-rw-r–r– 1 php root 33 01-25 22:28 .bash_logout
-rw-r–r– 1 php root 176 01-25 22:28 .bash_profile
-rw-r–r– 1 php root 124 01-25 22:28 .bashrc
drwxr-xr-x 3 php root 4096 01-25 22:28 .kde
drwxr-xr-x 4 php root 4096 01-25 22:28 .mozilla
5.设置新增用户的密码
passwd [用户名]
(当然你也可以手动在shadow文件中添加,我们首先要获得一个用MD5加过密的密码,然后将获得的加密密码粘贴到shadow对应的用户处,具体步骤如下:
[root@localhost ~]# grub-md5-crypt
Password:
Retype password:
$1$yYlrx/$oHMFJPZ18bSB3..lcLJxA0
[root@localhost ~]# vi /etc/shadow
//在shadow文件中增加如下这条记录
php:$1$yYlrx/$oHMFJPZ18bSB3..lcLJxA0:14999:0:99999:7:::
)
6.测试添加用户是否成功
[root@localhost ~]# su – php
[php@localhost ~]$ pwd
/home/php
2.大批量添加用户
1.创建用户文件和密码文件,具体内容如下:
[root@localhost ~]# cat /test/passwd.info
medesky01::1001:500:medesky01:/home/medesky01:/bin/bash
medesky02::1002:500:medesky02:/home/medesky02:/bin/bash
medesky03::1003:500:medesky03:/home/medesky03:/bin/bash
medesky04::1004:500:medesky04:/home/medesky04:/bin/bash
medesky05::1005:500:medesky05:/home/medesky05:/bin/bash
medesky06::1006:500:medesky06:/home/medesky06:/bin/bash
[root@localhost ~]# cat /test/shadow.info
medesky01:123456
medesky02:123456
medesky03:123456
medesky04:123456
medesky05:123456
medesky06:123456
2.执行newusers命令导入用户信息文件,如下:
[root@localhost ~]# newusers 3.执行pwunconv命令取消shadow功能
4.执行chpasswd命令导入密码文件,如下:
[root@localhost ~]# chpasswd 5.执行pwconv命令将密码写入到shadow文件中
=============
ubuntu 建立用户 无家目录,必须手动建立家目录和SHELL环境。
root@yyt02:~# useradd test
root@yyt02:~# passwd test
root@yyt02:~# mkdir /home/test
root@yyt02:~# chown test:test /home/test
root@yyt02:~# usermod -d /home/test -s /bin/bash test
<span></span>
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/linux-jichu/1133.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.