服务账号为啥要禁止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 得到服务器回复被禁止?

LINUX禁止FTP匿名登录与停止FTP服务

为啥错误“禁止”“您无权访问此服务器上的 /。”在 Windows 7 上安装 wampserver2.2d 后出现?

protel99 pcb 边框为啥要画到keepoutlayer (禁止布线层)?