Linux系统基本操作
文件结构图及关键文件功能
Linux文件结构
Linux文件结构图
二级目录
目录 | 功能 |
---|---|
/bin | 放置的是在单人维护模式下能够被操作的指令,在/bin底下的指令可以被root与 一般账号所使用 |
/boot | 这个目录只要在放置开机会使用到的文件,包括Linux核心文件以及开机选单与 开机所需配置的文件等等 |
/dev | 在Linux系统上,任何装置与接口设备都是以文件的形态存在于这个目录当中的 |
/etc | 系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件,各 种服务的启动档,系统变量配置等 |
/home | 这是系统默认的用户家目录(homedirectory) |
/lib | /lib放置的则是在开机时会用到的函式库,以及在/lib或/sbin底下的指令会呼叫 的函式库 |
/media | /media底下放置的是可移出的装置,包括软盘、光盘、DVD等等装置都杂事挂载与此 |
/opt | 给第三方协议软件放置的目录 |
/root | 系统管理员(root)的家目录 |
/sbin | 放置/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所 需要的指令。 |
/srv | srv可视为[service]的缩写,是一些网络服务启动之后,这些服务所需要取用的 数据目录 |
/tmp | 这是让一般使用者或者是正在执行的程序暂时放置文件的地方 |
文件
目录 | 功能 |
---|---|
/etc/passwd | 记录系统本地用户的属性信息,如UId,Gid,家目录等信息 |
/etc/shadow | 存放用户的口令等信息,只有系统管理员用户能查看 |
/etc/pam.d/system-auth | 账户安全配置文件 |
/etc/login.defs | 设置用户账户限制的配置文件,对root用户无效 |
/etc/securetty | 网络配置文件 |
/etc/pam.d/su | su命令配置 |
/etc/hosts.allow、/etc/hosts.deny | 允许/拒接某网段远程连接到主机 |
/etc/profile | 保存Linux全局环境变量信息,如umask,bash历史命令设置 |
账号管理
账号分类:
超级管理员 uid=0
系统默认用户 系统程序使用,从不登录
新建普通用户 uid大于500
/etc/passwd
1 | head -1 /etc/passwd |
/etc/shadow
1 | head -1 /etc/shadow |
用户管理
1 | useradd test //添加用户test |
权限管理
查看权限:ls -l
下图中文件所有者(属主)为root,所有组(属组)为root,文件名为install.log
,权限为的第一个减号“-”代表的是文件类型:
-:普通文件,d:目录文件,l:链接文件,b:设备文件,c:字符设备文件,p:管道文件
读(read),写(write),执行r(recute)简写即为(r,w,x),亦可用数字来(4,2,1)表示
修改权限:chown
chown命令是用于更改文件的用户和组的所有权。要将文件 foo 的用户和组的所有权更改为 root,可以使用以下命令:
1 | 1)chown root:root foo |
在用户名后跟冒号【: 】运行该命令将同时设置用户和组所有权。
要仅将文件 foo 的用户所有权设置为 root 用户,操作命令:
1 | chown root foo |
要仅更改文件 foo 的组所有权,则需要在组之前加冒号,操作命令:
1 | chown :root foo |
初始文件权限:UMASK
这篇文章写的很详细,可以参考一下
https://www.cnblogs.com/wang-shishuang/p/10458875.html
系统加固
锁定系统中多余的自建账号
执行命令:
1 | cat /etc/passwd |
查看账户、口令文件,与系统管理员确认不必要的账号。对于一些保留的系统伪帐户如:bin,sys,adm,uucp,lp,nuucp,hpdb,www,daemon等可根据需要锁定登陆。
加固方法:
使用命令passwd -l <用户名>
锁定不必要的账号。
使用命令passwd -u <用户名>
解锁需要恢复的账号。
检查shadow中空口令账号
检查方法:
1 | awk -F: 'length($2)==0 {print $1}' /etc/shadow |
加固方法:
使用命令passwd -l <用户名>
锁定不必要的账户。
使用命令passwd -u <用户名>
解锁需要恢复的账户。
使用命令passwd <用户名>
为用户设置密码。
设置系统密码策略
执行命令(查看密码策略设置):
1 | cat /etc/login.defs|grep PASS |
加固方法(修改配置文件):
1 | vi /etc/login.defs |
禁用root之外的超级用户
检测方法(检查id为0的用户):
1 | awk -F ":" '($3=="0"){print $1}' /etc/passwd |
加固方法:
使用命令passwd -l <用户名>
锁定用户
限制能够su为root的用户
使用命令cat /etc/pam.d/su
查看是否有auth required /lib/security/pam_wheel.so
这样的配置条目
加固方法:(在头部添加)
1 | auth required /lib/security/pam_wheel.so group=wheel |
这样,只有wheel组的用户可以su到root
重要文件加上不可改变属性
1 | chattr +i /etc/passwd |
Umask安全
第一个0代表suid 丢弃的权限;
第二个0代表本文件/目录拥有者什么权限都没丢弃
第三个2代表本文件/目录的用户组丢弃了w权限
第四个2代表本文件/目录的其他用户能使用的权限只有有r和x
实际权限=7777-0022
1 | umask 0022 |
ssh安全
禁止root用户进行远程登录
检查方法:
1 | cat /etc/ssh/sshd_config | grep PermitRootLogin是否为no |
加固方法:
1 | vi /etc/ssh/sshd_config |
更改服务端口:
1 | vi /etc/ssh/sshd_config |
屏蔽SSH登录banner信息
检查方法:
1 | cat /etc/ssh/sshd_config | grep banner |
加固方法:
1 | vim /etc/ssh/sshd_config |
添加banner NONE
1 | vim /etc/motd |
删除全部内容或更新成自己想要添加的内容
仅允许SSH协议版本2
有两个SSH协议版本,仅使用SSH协议版本2会更安全,SSH协议版本1有安全问题,包括中间人攻击
(man-in-the-middle)和注入(insertion)攻击。
编辑/etc/ssh/sshd_config
文件并查找下面这样的行:
1 | Protocol 2,1 |
防止误使用Ctrl+Alt+Del重启系统
检查方法(查看输出行是否被注释):
1 | cat /etc/inittab |grep ctrl-alt-del |
加固方法(在行开否添加注释符号“#”):
1 | vim /etc/inittab |
设置账户锁定登录失败锁定次数、锁定时间
检查方法(查看有无auth required pam_tally2.so
条目的设置):
1 | cat /etc/pam.d/system-auth|grep auth |
加固方法:
1 | vim /etc/pam.d/system-auth |
设置为密码连续错误3次锁定,锁定时间30秒。root密码连续错误3次锁定,时间为 100秒
修改账户TMOUT值,设置自动注销时间
检查方法(查看有无TMOUT的设置):
1 | cat /etc/profile|grep TMOUT |
加固方法:
1 | vim /etc/profile |
设置BASH保留历史命令的条目
检查方法:
1 | cat /etc/profile | grep HISTSIZE |
加固方法(修改HISTSIZE=5即保留最新执行的5条命令
):
1 | vim /etc/profile |
用户注销时删除命令记录
检查方法:
1 | cat /etc/skel/.bash_logout |
增加如下行:
1 | vim /etc/skel/.bash_logout |
这样,系统中的所有用户注销时都会删除其命令记录,如果只需要针对某个特定用户,如root用户进行设置,则可只在该用户的主目录下修改/$HOME/.bash_history
文件增加相同的一行即可。
设置系统日志策略配置文件
日志的主要用途是系统审计、监测追踪和分析统计。
为了保证 Linux 系统正常运行、准确解决遇到的各种各样的系统问题,认真地读取日志文件是管理员的一项非常重要的任务。UNIX/Linux采用了syslog工具来实现此功能,如果配置正确的话,所有在主机上发生的事情都会被记录下来,不管是好的还是坏的。
检查方法:
1 | ps -aef | grep syslog //确定syslog服务是否启用 |
详细配置文件的说明可以参考这篇博客:
https://www.cnblogs.com/lizhouwei/p/10134049.html
阻止系统响应任何从外部/内部来的ping请求
加固方法:
1 | echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all |
执行以上命令,其他客户端就不能ping通服务器了