Linux用户配置文件

用户管理主要通过修改用户配置文件完成,用户管理控制工具最终目的也是为了修改用户配置文件,那就让我们一起来认识一下Linux用户账户的配置文件.
1.用户信息文件/etc/passwd
/etc /passwd是系统识别用户的一个文件,系统所有的用户在这里都有记载。假设当以medesky这个账户登录时,系统会检查/etc/passwd文件,查看是否有medesky这个账户,然后确定medeskyUID,通过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如下:
超级用户(rootUID=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中的用户名是相同的
密码 密码已经加密,密码已经加密,如果有些用户显示的是!!,则表示这个用户不能登录到系统。
最后一次修改时间 197011日算起到最近一次修改密码的时间间隔(天数)
两次修改密码间隔最少的天数 如果设置为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文件规定了创建新用户是的一些默认设置,比如创建用户是否需要宿主目录、UIDGID的范围、用户的期限等,这个文件可以通过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
//
创建新用户时用户的UID500开始
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
-rw
sr-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
用户,…] //设置用户组管理员

授权用户melgly对目录/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
警告天数 设置密码过期前,开始警告的天数

例如:

[root@m1-150.db.album.mdc.139.com ~]# 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>