Linux 的安全性
1./etc/passwd 文件
/etc/passwd文件
的字段包含了如下信息:
登录用户名
用户密码
用户账户的UID(数字形式)
用户账户的组ID(GID)(数字形式)
用户账户的文本描述(称为备注字段)
用户HOME目录的位置
用户的默认shell
2./etc/shadow 文件
etc/shadow文件为系统上的每个用户账户都保存了一条记录。记录就像下面这样:
rich:$1$.FfcK0ns$f1UgiyHQ25wrB/hykCn020:11627:0:99999:7:::
在/etc/shadow文件的每条记录中都有9个字段:
与/etc/passwd文件中的登录名字段对应的登录名
加密后的密码
自上次修改密码后过去的天数密码(自1970年1月1日开始计算)
多少天后才能更改密码
多少天后必须更改密码
密码过期前提前多少天提醒用户更改密码
密码过期后多少天禁用用户账户
用户账户被禁用的日期(用自1970年1月1日到当天的天数表示)
预留字段给将来使用
3.添加新用户
# /usr/sbin/useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
#
这个例子列出的默认值如下:
新用户会被添加到GID为 100 的公共组;
新用户的HOME目录将会位于/home/loginname;
新用户账户密码在过期后不会被禁用;
新用户账户未被设置过期日期;
新用户账户将bash shell作为默认shell;
系统会将/etc/skel目录下的内容复制到用户的HOME目录下;
系统为该用户账户在mail目录下创建一个用于接收邮件的文件
useradd 命令行参数
参 数 描 述
-c comment
给新用户添加备注
-d home_dir
为主目录指定一个名字(如果不想用登录名作为主目录名的话)
-e expire_date
用YYYY-MM-DD格式指定一个账户过期的日期
-f inactive_days
指定这个账户密码过期后多少天这个账户被禁用; 0 表示密码一过期就立即禁用, 1 表示
禁用这个功能
-g initial_group
指定用户登录组的GID或组名
-G group ...
指定用户除登录组之外所属的一个或多个附加组
-k
必须和 -m 一起使用,将/etc/skel目录的内容复制到用户的HOME目录
-m
创建用户的HOME目录
-M
不创建用户的HOME目录(当默认设置里要求创建时才使用这个选项)
-n
创建一个与用户登录名同名的新组
-r
创建系统账户
-p passwd
为用户账户指定默认密码
-s shell
指定默认的登录shell
-u uid
为账户指定唯一的UID
useradd 更改默认值的参数
-b default_home
更改默认的创建用户HOME目录的位置
-e expiration_date
更改默认的新账户的过期日期
-f inactive
更改默认的新用户从密码过期到账户被禁用的天数
-g group
更改默认的组名称或GID
-s shell
更改默认的登录shell
4.删除用户
userdel
5.修改用户
usermod
修改用户账户的字段,还可以指定主要组以及附加组的所属关系
passwd
修改已有用户的密码
chpasswd
从文件中读取登录名密码对,并更新密码
chage
修改密码的过期日期
chfn
修改用户账户的备注信息
chsh
修改用户账户的默认登录shell
5.1usermod
-c 修改备注字段, -e 修改过期日期, -g 修改默认的登录组。除此之外,还有另外
一些可能派上用场的选项。
-l 修改用户账户的登录名。
-L 锁定账户,使用户无法登录。
-p 修改账户的密码。
-U 解除锁定,使用户能够登录。
-L 选项尤其实用。它可以将账户锁定,使用户无法登录,同时无需删除账户和用户的数据。
要让账户恢复正常,只要用 -U 选项就行了。
5.2. passwd 和 chpasswd
改变用户密码的一个简便方法就是用 passwd 命令。
# passwd test
Changing password for user test.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
#
-e 选项能强制用户下次登录时修改密码。你可以先给用户设置一个简单的密码,之后再强制在下次登录时改成他们能记住的更复杂的密码。
如果需要为系统中的大量用户修改密码, chpasswd 命令可以事半功倍。 chpasswd 命令能从标准输入自动读取登录名和密码对(由冒号分割)列表,给密码加密,然后为用户账户设置。你也可以用重定向命令来将含有 userid:passwd 对的文件重定向给该命令。
# chpasswd < users.txt
5.3. chsh 、 chfn 和 chage
chsh 、 chfn 和 chage 工具专门用来修改特定的账户信息。 chsh 命令用来快速修改默认的用户登录shell。使用时必须用shell的全路径名作为参数,不能只用shell名。
# chsh -s /bin/csh test
Changing shell for test.
Shell changed.
chfn 命令提供了在/etc/passwd文件的备注字段中存储信息的标准方法。
chage 命令用来帮助管理用户账户的有效期。你需要对每个值设置多个参数
参 数 描 述
-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期”
-h, --help 显示此帮助信息并推出
-I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
-l, --list 显示帐户年龄信息
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
-M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数”
-R, --root CHROOT_DIR chroot 到的目录
-W, --warndays 警告天数 将过期警告天数设为“警告天数”
使用 Linux 组
创建新组 groupadd
在创建新组时,默认没有用户被分配到该组。 groupadd 命令没有提供将用户添加到组中的
选项,但可以用 usermod 命令来弥补这一点。
# /usr/sbin/usermod -G shared rich
修改组
在/etc/group文件中可以看到,需要修改的组信息并不多。 groupmod 命令可以修改已有组的
GID(加 -g 选项)或组名(加 -n 选项)。
# /usr/sbin/groupmod -n sharing shared
# tail /etc/group
haldaemon:x:68:
理解文件权限
1 使用文件权限符
$ ls –l
total 68
-rw-rw-r-- 1 rich rich 50 2010-09-13 07:49 file1.gz
drwxrwxr-x 2 rich rich 4096 2010-09-03 15:12 test1
输出结果的第一个字段就是描述文件和目录权限的编码。这个字段的第一个字符代表了对象的类型:
- 代表文件
d 代表目录
l 代表链接
c 代表字符型设备
b 代表块设备
n 代表网络设备
之后有3组三字符的编码。每一组定义了3种访问权限:
r 代表对象是可读的
w 代表对象是可写的
x 代表对象是可执行的
若没有某种权限,在该权限位会出现单破折线。这3组权限分别对应对象的3个安全级别:
对象的属主
对象的属组
系统其他用户
2 默认文件权限
要把 umask 值从对象的全权限值中减掉。对文件来说,全权限的值是 666 (所有用户都有读和写的权限);而对目录来说,则是 777 (所有用户都有读、写、执行权限)。
由于目录的默认权限是 777 , umask 作用后生成的目录权限不同于生成的文件权限。 umask值 026 会从 777 中减去,留下来 751 作为目录权限设置。
改变安全性设置
1 改变权限
chmod 命令用来改变文件和目录的安全性设置。该命令的格式如下:
chmod options mode file
与通常用到的3组三字符权限字符不同, chmod 命令采用了另一种方法。下面是在符号模式下指定权限的格式。
[ugoa…][[+-=][rwxXstugo…]
第一组字符定义了权限作用的对象:
u 代表用户
g 代表组
o 代表其他
a 代表上述所有
后面跟着的符号表示你是想在现有权限基础上增加权限(+),还是在现有权限基础上移除权限(-),或是将权限设置成后面的值(=)
最后,第三个符号代表作用到设置上的权限。你会发现,这个值要比通常的 rwx 多。额外的设置有以下几项。
X :如果对象是目录或者它已有执行权限,赋予执行权限。
s :运行时重新设置UID或GID。
t :保留文件或目录。
u :将权限设置为跟属主一样。
g :将权限设置为跟属组一样。
o :将权限设置为跟其他用户一样。
-R 选项可以让权限的改变递归地作用到文件和子目录。
2 改变所属关系
chown 命令的格式如下。
chown options owner[.group] file
chown 命令采用一些不同的选项参数。 -R 选项配合通配符可以递归地改变子目录和文件的所属关系。 -h 选项可以改变该文件的所有符号链接文件的所属关系
共享文件
要创建一个共享目录,使目录里的新文件都能沿用目录的属组,只需将该目录的SGID
位置位。
$ mkdir testdir
$ ls -l
drwxrwxr-x 2 rich rich 4096 Sep 20 23:12 testdir/
$ chgrp shared testdir
$ chmod g+s testdir
$ ls -l
drwxrwsr-x 2 rich shared 4096 Sep 20 23:12 testdir/
$ umask 002
$ cd testdir
$ touch testfile
$ ls -l
total 0
-rw-rw-r-- 1 rich shared 0 Sep 20 23:13 testfile
$
首先,用 mkdir 命令来创建希望共享的目录。然后通过 chgrp 命令将目录的默认属组改为包
含所有需要共享文件的用户的组(你必须是该组的成员)。最后,将目录的SGID位置位,以保证
目录中新建文件都用shared作为默认属组。