服务账号为啥要禁止shell
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了服务账号为啥要禁止shell相关的知识,希望对你有一定的参考价值。
ubuntu下的git服务器禁止用户shell登录(1)禁止的原因
为了进行团队项目开发,我们经常会使用分布式版本管理系统,其中git是现今最为重要和常用的分布式管理系统。
著名的gitHub是在git系统的基础上为各种有内容托管需求的人提供托管服务的一个网站,但是GitHub的免费服务只能创建公开的仓库。如果我们不想把自己的代码开源,想私有代码,那么建立一台git服务器也是一个不错的选择。
在建立好git服务器后,大家都可以通过
登录后复制
$ git clone git@10.3.0.99:project.git
登录后复制
克隆代码到本地。
这同时说明了大家也可以通过
登录后复制
$ ssh git@10.3.0.99
登录后复制
ssh连接服务器,登录到服务器上,对服务器进行各种操作,这通常很不安全,也不合适,成员只需要能对仓库操作就可以了,不需要更大的权限。
登录后复制
(2)禁止方法
编辑/etc/passwd文件完成。找到类似下面的一行:
登录后复制
git:x:1001:1001:,,,:/home/git:/bin/bash
登录后复制
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
登录后复制
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。 参考技术A 默认情况下,在创建用户时,如果未明确指定,该用户将具有对服务器的 SSH 访问权限。
要禁用 shell 访问,我们将创建一个新的 shell,它会简单地打印一条消息,告诉用户他们的帐户仅限于 FTP 访问。
Linux系统的安全设置
在 Linux系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而生成的其他大量账号。除了超级用户
root 之外,其他大量账号只是用来维护系统运作、启动或保持服务进程,一般是不允许登录的,因此也称为非登录用户账号。
常见的非登录用户账号包括
bin、daemon、adm、lp、mail 等。为了确保系统安全,这些用户账号的登录Shell 通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动。
--------------------------------------------------------------------------------------------
root@localhost~]# grep "/sbin/nologin$" /etc/passwd
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
......
//省略部分内容
--------------------------------------------------------------------------------------------
锁定用户
对于 Linux服务器中长期不用的用户账号,若无法确定是否应该删除,可以暂时将其锁定。例如,若要锁定、解锁名为
zhangsan 的用户账号,可以执行以下操作(passwd、usermod命令都可用来锁定、解锁账号)。
[root@localhost~]# usermod -L zhangsan //锁定账号
[root@localhost~]# passwd -S zhangsan //查看账号状态
zhangsan LK 2017-08-24 0 99999 7 -1 (密码已被锁定。)
[root@localhost~]# usermod -U zhangsan //解锁账号
[root@localhost~]# passwd -S zhangsan
zhangsan PS 2017-08-24 0 99999 7 -1 (密码已设置,使用 SHA512 算法。
锁定文件
如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方法。使用
chattr 命令,分别结合“+i”“-i”选项来锁定、解锁文件,使用 lsattr 命令可以查看文件锁定情况。
--------------------------------------------------------------------------------------------
[root@localhost~]# chattr +i /etc/passwd /etc/shadow //锁定文件
[root@localhost~]# lsattr /etc/passwd /etc/shadow //查看为锁定的状态
----i-----------/etc/passwd
----i-----------/etc/shadow
[root@localhost~]# chattr -i /etc/passwd /etc/shadow //解锁文件
[root@localhost~]# lsattr /etc/passwd /etc/shadow //查看为解锁的状态
----------------/etc/passwd
----------------/etc/shadow
--------------------------------------------------------------------------------------------
在账号文件被锁定的情况下,其内容将不允许变更,因此无法添加、删除账号,也不能
更改用户的密码、登录 Shell、宿主目录等属性信息。
--------------------------------------------------------------------------------------------
[root@localhost~]# chattr +i /etc/passwd /etc/shadow
[root@localhost~]# useradd billgate
useradd:无法打开/etc/passwd
--------------------------------------------------------------------------------------------
密码安全控制
执行以下操作可将密码的有效期设为 30 天(chage 命令用于设置密码时限)。
--------------------------------------------------------------------------------------------
[root@localhost~]# vi /etc/login.defs //适用于新建的用户
......
//省略部分内容
PASS_MAX_DAYS30
[root@localhost~]# chage -M 30 lisi //适用于已有的 lisi 用户
--------------------------------------------------------------------------------------------
用户下次登录时强制更改密码
在某些特殊情况下,如要求批量创建的用户初次登录时必须自设密码,根据安全规划统一要求所有用户更新密码等,可以由管理员执行强制策略,以便用户在下次登录时必须更改密码。例如,执行以下操作可强制要求用户zhangsan 下次登录时重设密码。
--------------------------------------------------------------------------------------------
[root@localhost~]# chage -d 0 zhangsan
Localhost
login: zhangsan
password:
Youare required to change your password immediately (root enforced)
Changingpassword for zhangsan.
(current)UNIX password:
New password:
Retype new password:
--------------------------------------------------------------------------------------------
命令历史、自动注销
命令历史
Bash终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通过修改/etc/profile
文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。
--------------------------------------------------------------------------------------------
[root@localhost ~]# vi /etc/profile //适用于新登录用户
HISTSIZE=200
[root@localhost~]# export HISTSIZE=200 //适用于当前用户
--------------------------------------------------------------------------------------------
除此之外,还可以修改用户宿主目录中的~/.bash_logout文件,添加清空历史命令的操作语句。这样,当用户退出已登录 Bash环境以后,所记录的历史命令将自动清空。
--------------------------------------------------------------------------------------------
[root@localhost~]# vi ~/.bash_logout
history
-c
clear
--------------------------------------------------------------------------------------------
自动注销
Bash终端环境中,还可以设置一个闲置超时时间,当超过指定的时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的误操作风险。闲置超时由变量TMOUT 来控制,默认单位为秒(s)
--------------------------------------------------------------------------------------------
[root@localhost~]# vi /etc/profile //适用于新登录用户
......
//省略部分内容
export
TMOUT=600
[root@localhost~]# export TMOUT=600 //适用于当前用户
--------------------------------------------------------------------------------------------
需要注意的是,当正在执行程序代码编译、修改系统配置等耗时较长的操作时,应避免设置 TMOUT变量。必要时可以执行“unset TMOUT”命令取消 TMOUT 变量设置。
以上是关于服务账号为啥要禁止shell的主要内容,如果未能解决你的问题,请参考以下文章
为啥 HTTP 服务器禁止在 HTTP 标头名称中使用下划线
禁止光盘优盘自动播放(Shell Hardware Detection服务)
为啥我从 google drive rest api 得到服务器回复被禁止?