1. linux安全性
linux的安全性主要通过3A安全机制来实现,分别为authentication(认证)、authorization(授权)、audition(审计)。
1.1 /etc/passwd 文件
passwd文件主要用来存放账户的特定信息,以下为示例:
[root@localhost ~]# tail -1 /etc/passwd
test:x:500:500::/home/test:/bin/bash
解析:上述为passwd文件最后一条账户信息,没个字段以:进行分割,含义为:
test:用户名
x:密码,为了确保安全,实际密码通过加密的方式存储于 /etc/shadow中
500:用户UID编号,在centos6及以下linux系统中,1-499为系统账户UID,500以上为用户UID,centos7及一下1-999为系统UID,1000及以上为用户UID
500:用户组GID编号,编号规则等同于UID。
空格:这个字段为用户信息字段,用于存放用户的地址、电话等备注信息
/home/test:为用户的家目录路径
/bin/bash:用户的默认shell
1.2 /etc/shadow 文件
shadow文件为passwd文件的一个补充,主要用于存放账户密码,有效期,过期时间等一些信息,仅供指定程序访问。以下为示例:
[root@localhost ~]# head -1 /etc/shadow
root:$6$Y9zrpEAs$Gom54hm/CfGzTO07.2RmxeKGk4TwClaNRER9y6WM:17326:0:99999:7:::
解析:上述为shadow文件第一行root用户的账户密码相关信息,以:进行分割,含义依次为:
root:用户名
$开头的字符串:加密的密码
17326:自上次修改密码后过去的天数(自1970年1月1日开始计算)
0:多少天后才能更改密码,0表示可以立即更改
99999:多少天后必须更改密码,表示密码的有效期
7:密码过期前7天提醒用户更改密码
空格:密码过期多少天后禁用账户
空格:用户账户被禁用的日期(自1970年1月1日至当天的日期数表示)
空格:预留字段给将来用
单向加密机制:提取数据指纹
md5:128bits
sha1:安全哈希算法,160bits
sha224:224bits
sha256:256bits
sha384:384bits
sha512:512bits
1.3 linux安全上下文
进程运行时会以发起者的身份运行,进程所有访问的资源取决于发起者的权限。
2. linux用户管理和组管理
2.1 用户管理
useradd命令
说明:添加用户可以使用useradd命令来添加,useradd命令添加命令时会读取/etc/default/useradd文件来设定用户默认值。
/etc/default/useradd 文件解析:(可以通过cat文件或useradd -D来查看默认参数)
[root@localhost ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100 #新用户会被添加到GID为100的公共组
HOME=/home #新用户的家目录会放置于/home下
INACTIVE=-1 #新用户账户过期后不会被禁用
EXPIRE= #新用户未设置过期日期
SHELL=/bin/bash #新用户默认的shell
SKEL=/etc/skel #在创建新用户时,系统会将/etc/skel目录复制到新用户家目录下
CREATE_MAIL_SPOOL=yes #在创建新用户时,系统会在mail用户下创建一个接受邮件的文件。
参数:
-c “COMMENT”:给用户添加注释信息
-d home_dir:为用户指定一个用户家目录,一般不想使用默认时可以使用此选项
-e YYYY-MM-DD:为用户指定账户过期日期
-f inactive_days:指定账户密码过期后多少天账户会被禁用,0表示过期立即禁用,1表示禁止此功能
-g GID:指定用户所属基本组,可为组名,也可为GID
-G GROUP1,GROUP2,GROUP3......为用户指明附加组,附加组必须事先存在
-u UID:为用户指定UID
-s SHELL:指定用户默认的shell,可用列表在/etc/shells文件中
-r:创建系统用户,centos6 ID号小于500,centos7 ID号小于1000
练习:创建用户test,附加组为test1和test2,默认shell为/bin/csh,注释信息为“This is test”
[root@localhost ~]# groupadd test1;groupadd test2
[root@localhost ~]# useradd test -G test1,test2 -s /bin/csh -c "This is test"
修改用户
usermod命令:修改用户指定字段和所属组和附加组等passwd文件中的大部分字段。
参数:
-u UID:指定新的UID
-g GID:指定新的基本组
-G GROUP1,GROUP2,GROUP3......:指定新的附加组,原来的福建组将被覆盖,如果要保留需同时使用-a选项,表示append
-s SHELL:新的默认SEHLL
-c “COMMENT”:指定新的注释信息
-d HOME_DIR:指定新的家目录,原家目录文件不会移动到新的家目录中,若要移动,则同时使用-m选项
-l login_name:指定新的登录名
-e YYYY-MM-DD:修改过期日期
-L:锁定指定用户
-U:解锁指定用户
-p:修改指定账户密码
-f INACTIVE:设定账户非活动期限
passwd:passwd user可以用来修改指定账户的密码,直接使用passwd可以修改当前登录的账户的密码。
用法:
passwd USER_NAME:用于修改指定账户的密码
passwd:用于修改当前登录账户的密码
chpasswd:这个命令主要用于批量修改密码,它可以使用重定向命令将含有userid:passwd对的文件作为参数传递给它实现批量修改的目的。
用法:
chpasswd < users.txt
chsh:修改指定用户的默认登录shell
用法:
chsh -s /bin/bash test:修改test的默认shell为bash
chfn:用于修改passwd文件中的注释字段
用法:
chfn:依次修改当前用户的注释字段
chfn USER_NAME:依次修改指定用户的注释字段
finger:查看用户的注释字段,一般系统为了安全不自带该命令,可自行安装。
chage:管理用户的有效期
参数:
-d:设置上次修改密码到现在的天数
-E:设置密码过期的日期
-I:设定密码过期锁定账户的天数
-m:设置修改密码之间需要多少天
-W:设置密码过期前多久开始提醒
设置时间的两种方式:
从1970年1月1日开始多少天
YYYY-MM-DD格式的日期
删除用户:
userdel USER_NAME:删除用户
userdel -r USER_NAME:删除用户的同时删除用户的家目录和邮件目录
2.2 组管理
组的类别:
用户的基本组称为主组
用户的额外组称为附加组
/etc/group文件
示例:
[root@localhost ~]# tail -1 /etc/group
test:x:502:
解析:
test:组名
x:组密码,加密存放至gshadow文件中
502:GID
空:属于该组的用户列表
创建组:groupadd命令
groupadd GROUP_NAME:新建组
usermod GROUP_NAME USER_NAME:将指定用户添加到指定组中
修改组:groupmod命令
groupmod -g GID GROUP_NAME:修改组GID
groupmod -n OLD_GROUP_NAME NEW_GROUP_NAME:修改组名
groupmod -r :创建系统组,centos6 GID<500,centos7 GID<1000
删除组:groupdel GROUP_NAME
组密码管理:gpasswd
格式:gpasswd [option] GROUP
参数:
-a user:将user添加到自动组中
-d user:删除用户user的以当前组为组名的附加组
-A user1,user2......:这是有管理权限的用户列表
临时切换基本组:newgrp命令
如果用户不属于此组需临时切换到该组则需要密码
2.3 其他用户和组相关知识
查看用户相关信息:id命令
id USER_NAME:查看用户相关的信息
切换用户或其他用户身份执行命令:su
su USER_NAME:非登录切换,即不会读取目标用户的配置文件
su - USER_NAME:登录切换,会读取目标用户的配置文件,属于完全切换
root使用su切换到其他用户无需密码,非root用户切换时需要输入密码
su [-] USER_NAME -c 'COMMAND':使用USER_NAME的身份来执行COMMAND
su -l USER_NAME:和su - USER_NAME功能一样。
3. 权限管理
文件权限解析:
文件权限对象定义:
owner:属主,u
group:属组,g
other:其他,o
文件权限定义:
r:可读
w:可写
x:可执行
目录权限定义:
r:可查看目录的文件列表
w:可在目录中新建、添加或删除文件
x:可查看文件列表,也可使用cd命令进入此文件
文件权限对应的数字编号
---:0
--x:1
-w-:2
r--:4
r-x:5
rw-:6
rwx:7
ls -l 文件列表解析示例:
[root@localhost ~]# ls -l
total 52
-rw-------. 1 root root 2392 Oct 27 2014 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 Oct 27 2014 Desktop
drwxr-xr-x. 2 root root 4096 Oct 27 2014 Documents
drwxr-xr-x. 2 root root 4096 Oct 27 2014 Downloads
-rw-r--r--. 1 root root 12581 Oct 27 2014 install.log.syslog
drwxr-xr-x. 2 root root 4096 Oct 27 2014 Music
drwxr-xr-x. 2 root root 4096 Oct 27 2014 Pictures
drwxr-xr-x. 2 root root 4096 Oct 27 2014 Public
drwxr-xr-x. 2 root root 4096 Oct 27 2014 Templates
drwxr-xr-x. 2 root root 4096 Oct 27 2014 Videos
以ls -l的结果第二行为例解析:
第一字段-:
d:目录
-:文本文件
l:软连接文件
c:字符设备文件
t:套接字文件
b:块设备文件
n:网络设备文件
rwx:属主权限,对应数字编号7,可列列表,可cd,可修改
r-x:属组权限,对应数字编号5,可读列表,可cd,不可修改
r-x:其他用户权限,对应数字编号5,可读列表,可cd,不可修改
1:硬链接次数
root:所属用户为root
root:所属组为root
2392:容量大小,以bit为单位
Oct 27 2014:最后一次修改时间
Desktop:文件夹名
默认权限:umask
示例详解:
[root@localhost ~]# umask
0022
由上可以看出直接输入umask命令可查看当前创建文件夹和文件时的默认权限
文件夹权限:
0:粘着位
022:代表初始文件夹的权限,文件夹的满权限为rwxrwxrwx,对应数字为777,777-022=755,755对应权限为rwxr-xr-xr-x,所以默认文件夹权限为755
[root@localhost ~]# mkdir test1
[root@localhost ~]# ls -ld test1
drwxr-xr-x. 2 root root 4096 Jun 16 05:24 test1
文件权限:由于系统考虑到有些风险需要去除,所以满权限为rw-rw-rw-,对应数字为666
0:粘着位
022:666-022=644,对应权限为rw-r--r--
[root@localhost ~]# touch test1
[root@localhost ~]# ls -l test1
-rw-r--r--. 1 root root 0 Jun 16 05:29 test1
umask 026:重新设置默认权限为0026,对应默认创建文件权限为640,对应默认创建文件夹权限为751
4. 改变安全性设置
4.1 改变权限
chmod:改变目录和文件的安全性设置
格式:chmod [OPTION] ... MODE,MODE ...FILE...
使用方式:
八进制:
[root@localhost ~]# ls -l test1
-rw-r--r--. 1 root root 0 Jun 16 05:43 test1
[root@localhost ~]# chmod 777 test1
[root@localhost ~]# ls -l test1
-rwxrwxrwx. 1 root root 0 Jun 16 05:43 test1
通过上述示例可看出可直接通过修改权限的八进制来修改权限。
增加或删除某一类或几类用户权限:
[root@localhost ~]# ls -l test1
-rwxrwxrwx. 1 root root 0 Jun 16 05:43 test1
[root@localhost ~]# chmod o-wx test1
[root@localhost ~]# ls -l test1
-rwxrwxr--. 1 root root 0 Jun 16 05:43 test1
通过上述示例可以看出通过o-wx参数来取消了其他用户对此文件的写和执行权限,也可以通过o+来增加权限,以此类推。
指定或修改某一类或几类用户的权限
[root@localhost ~]# ls -l test1
-rwxrwxr--. 1 root root 0 Jun 16 05:43 test1
[root@localhost ~]# chmod ug=rw test1
[root@localhost ~]# ls -l test1
-rw-rw-r--. 1 root root 0 Jun 16 05:43 test1
通过上述示例可看到可以通过u=,g=,o=或ug=,uo=,go=或a=来指定权限。
4.2 改变属主和属组
chown:改变文件的属主和属组
chown OWNER FILE_NAME:改变文件的属主
chown .GROUP FILE_NAME:改变文件的属组
chown OWNER.GROUP FILE_NAME:改变文件的属主和属组
参数:
-R:可配合通配符递归修改匹配文件的权限
-h:可以修改文件所属符号连接文件的所属关系
chgrp:可以修改文件的默认属组
参数:
-R:递归
5. 特殊权限设置
SUID:SUID仅对于二进制可执行文件生效,当用户启动此可执行文件为进程时,改进程的属主为原程序文件的属主。用户对SUID生效有以下限制与功能:
文件为可执行的二进制文件;
执行者对文件有可执行权限;
执行者在执行此二进制程序文件时具备该文件owner权限;
该权限仅只此二进制程序执行时有效;
权限设定:
chmod u+s FILE......:为该文件增加S权限
chmod u-s FILE......:去掉该文件的S权限
SGID:SGID可针对于文件和目录生效,具备一下限制条件和功能:
文件:
文件需为二进制可执行文件;
执行者需具备可执行权限;
执行者在运行此二进制文件为进程时具备了该文件属组的权限;
该执行权限仅此二进制程序执行时生效;
目录:
执行者必须具备此文件夹的rx权限;
如果执行者对该目录有w权限时,在此目录下创建的文件夹或目录的属组为该目录的属组
权限设定:
chmod g+s DIR......:为该文件夹增加S权限
chmod g-s DIR......:为该文件夹去除S权限
Sticky:设置了sticky的文件夹,用户仅能删除、移动、重命名自己创建的文件夹
Sticky使用时的限制条件和功能:
用户对该目录需有wx权限;
仅管理员和用户自己可以删除、移动、重命名自己创建的文件和目录;
权限设定:
chmod o+s DIR......:为文件夹增加S权限
chmod g-s DIR......:为该文件夹去除S权限
限位映射:
SUID:user,占据属主的执行权限位
s:属主拥有x权限
S:属主没有x权限
SGID:group,占据group的执行权限位
s:group拥有x权限
S:group没有x权限
Sticky:other,占据other的执行权限位
t:other拥有x权限
T:other没有x权限