标签归档:linux

为什么不能在SSH(Secure Shell)登录中设置ulimit值?[转]

现象:

如果你在文件/etc/security/limits.conf中设定了值。 可是如果用户是通过ssh登录到系统的话。 设置将不会生效。 如果用户是通过telnet或者是本地登录的话,那么设置是生效的。

解决方法:

这个问题因该归结于SSH登录采取的方式。 当一个用户通过SSH登录, SSH守护进程会创建一个新的进程去处理这个连接。 这样的话, 这个进程的上下文就会被这个用户使用。 应为普通用户无法增加他们的ulimit限制。 所以即使在文件/etc/security/limits.conf中有较高的数值也不能被激活生效。 这是因为调用的程序,如sshd。 限制了修改属性的权限。

这个问题目前有两个解决方法。第一步需要对SSHD服务器进行设置修改。另一步是用户每一次登陆时都需要运行命令。

1. 修改SSH守护进程的配置文件/etc/ssh/sshd_config,关闭特权隔离。修改如下



      #UsePrivilegeSeparation yes

把它改成。



      UsePrivilegeSeparation no

并且修改



      #PAMAuthenticationViaKbdInt no

修改之后如下



      PAMAuthenticationViaKbdInt yes

关闭这些选项会带来一些安全风险。但那也只是在SSH守护进程的漏洞被发现并且被利用的情况下才会出现。关闭之后就意味着sshd不会创建非特权子进程去处理进站连接。如果漏洞存在而且被利用,则有人可以控制sshd进程,而这个进程是以root身份运行 的。到目前还没有已知的弱点,如果你经常使用up2date升级你的系统的话,那么任何漏洞都会在发现之后被迅速的修正。

要使改动生效,需要重新启动SSHD.



         # service sshd restart

设置改动之后,当用户通过SSH登陆之后,这些会话的最大打开文件数参数会按照/etc/security/limits.conf文件被设置。不需要额外的操作。

2. 使用 “su – $USER”来设置最大打开文件数。在用户通过ssh登陆之后,使用如下命令



         su - $USER

用户被要求再次输入密码,上述的操作将会使ulimit被正确的设定。用户将需要在每次登陆时运行 su – $USER 。 才能正确设置文件限制。

注意: 这个问题已经在SSH 3.8版本中得到了解决。 并且红帽企业Linux的后续产品将会采用这个版本

安装memcached时遇到的问题

memcached需要libevent.

刚开始用yum install libevent,但路径总指不对,然后又yum remove libevent,接着下一源码包自己编译。http://monkey.org/~provos/libevent-2.0.10-stable.tar.gz

–prefix=/usr

然后安装memcached

./configure –prefix=/usr/local/memcached

make && make install

当启动./memcached时又提示

./memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory

用下面方式查看引用路径

LD_DEBUG=libs ./memcached -v
30050:    find library=libevent-2.0.so.5 [0]; searching
30050:     search cache=/etc/ld.so.cache
30050:     search path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:/usr/lib64        (system search path)
30050:      trying file=/lib64/tls/x86_64/libevent-2.0.so.5
30050:      trying file=/lib64/tls/libevent-2.0.so.5
30050:      trying file=/lib64/x86_64/libevent-2.0.so.5
30050:      trying file=/lib64/libevent-2.0.so.5
30050:      trying file=/usr/lib64/tls/x86_64/libevent-2.0.so.5
30050:      trying file=/usr/lib64/tls/libevent-2.0.so.5
30050:      trying file=/usr/lib64/x86_64/libevent-2.0.so.5
30050:      trying file=/usr/lib64/libevent-2.0.so.5
30050:
./memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory

依然提示

接着

vim /etc/ld.so.conf.d/libevent-x86_64.conf

写入查找路径 /usr/lib

再执行ldconfig

一切ok

Linux下的Root权限控制[转]

Linux是当前比较流行的网络服务器操作系统,它继承了 UNIX系统安全、稳定、高效等优点。在Linux系统中Root拥有最高权限,正因如此攻击者往往以获取Root权限为目标。作为管理员如何有效地对 Root进行有效管理呢?本文将从权限控制的角度,提供几个安全技巧。
演示环境
Red Hat Enterprise Linux 5
1、远程登录
我们知道在RHEL系统中,默认是允许Root用户直接远程登录的。假若攻击者获取了Root的密码,然后进行远程登录,那整个服务器就沦陷了。因 此,我们要做好Root的权限限制,拒绝其远程登录。这样,就算攻击者获取了Root密码,也不能通过远程登录控制服务器。限制Root远程登录的方法有 很多种,笔者向大家推荐两种。
(1)SSH限制
我们知道SSH是Linux系统中用于远程维护管理的一个服务,类似于Windows系统中的Telnet或者远程桌面3389。通过SSH限制 Root远程登录,我们需要做的就是修改SSH的配置文件。找/etc/ssh/sshd_config文件,在其中添加PermitRootLogin no。需要注意的是Linux系统是大小写敏感的,不要输错。输入完毕后,保存并退出,然后输入命令service sshd restart重启SSH服务使修改生效。这样当通过Root远程连接Linux服务器时,就会拒绝连接。
(2)PAM认证
我们还可以使用PAM认证模块来拒绝Root用户直接登录系统,可通过下面的操作来实现。打开/etc/pam.d/sshd文件,在第一行加入 auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/sshduser onerr=succeed这条语句。其含义是,在登录时认证帐户和密码是否有效,只有认证通过才能登录系统,否则结束认证拒绝登录。它的认证模块是 /lib/security/pam_listfile.so,认证的用户是用户(user),当然也可以是组(group),认证的方式是拒绝 (deny),认证文件是/etc/sshduser,文件名及目录随意,如果认证成功就返回(succeed)。
然后我们创建一个认证文件,可以在终端中运行命令echo “root” > /etc/sshduser来创建,当然我们也可以使用vi打开sshduser文件来加入用户。需要说明的是,当有多个用户时,每个用户占用一行。添加 完成后,再使用Root直接登录服务器就可以看到登录被拒绝了。
2、su限制
我们知道在Linux系统中有个su命令,利用该命令只要知道Root用户的密码,默认情况下任何人都可以切换到Root用户中进行操作。例如,一个属于users组的普通用户gslw可以通过su命令切换到Root用户中.
因此,我们需要对SU进行限制,只允许特定组的用户才能SU到Root用户。使用的方法还是通过PAM认证模块来实现。我们先前控制ssh服务,是使用/etc/pam.d/sshd文件,当然控制用户使用su命令就需要对
/etc/pam.d/su文件进行修改。直接打开该文件进行修改,或者在终端命令窗口输入命令vi /etc/pam.d/su,然后去掉其中#auth required pam_wheel.so use_uid的注释即可。
其含义是,使用pam_wheel.so文件来检查当前用户的UID,如果不是whell组的用户就直接拒绝。现在我们通过gslw用户登录系统,然后su到Root可以看到被拒绝。当然,要使其可以su到Root需要将其加入了wheel组才可以。
3、Root分权
大家知道,由于Root具有最高的权限,经常用root用户来管理系统,会给系统带来一定的安全隐患。比如,一条无意识输入的破坏性的命令有可能会给 系统带来毁灭性的打击。另外,如果系统被植入了嗅探工具,如果用root登录会造成root口令被窃取。因此我们要消减Root的权限,可以让其它用户来 完成Root的一些工作,避免过多地使用Root用户。
如何为Root分权,要根据服务器的性质来确定。比如一个Linux平台的apache服务器,作为管理员经常使用的命令应该是诸如/usr /local/apache2/bin/apachect1 start/stop/restart这样的是启动/重启/停止服务器的命令。我们可以为此创建一个用户gslw来管理apache服务器,我们知道普通 用户是没有权限来启动apache服务器的。这里要用到sudo命令,通过它为gslw用户加入扩展权限使其可以管理apache服务器。
利用Vi或者直接进入/etc/pam.d打开sudo文件,然后在其中添加一行gslw ALL=(ALL) /usr/local/apache2/bin/apachectl命令就可以了。该命令分成四个字段,依次为用户名、作用对象、以谁的身份运行以及运行 的命令。当然,我们也可以加入gslw localhost=(root) /usr/local/apache2/bin/apachectl start,这样过滤更严格一些。最后保存退出后,使用gslw用户登录系统就可以运行/usr/local/apache2/bin /apachectl start命令了。上面只是举例,大家可以根据自己的需要在sudo文件中添加相应的命令行。不过,需要说明的是命令一定要严格过滤,不要赋权过大。
总结:Linux下的权限控制是非常严格的,但也非常灵活,我们可以根据自己的安全需求进行布防。当然,关于Root权限的控制策略和方法还有很多,希望本文提供的思路对大家有所帮助!

CentOS Linux系统建立管理员组内一般用户

在一般情况下,一般用户通过执行“su -”命令、输入正确的root密码,可以登录为root用户来对系统进行管理员级别的配置。但是,为了更进一步加强系统的安全性,有必要建立一个管理员的 组,只允许这个组的用户来执行“su -”命令登录为root用户,而让其他组的用户即使执行“su -”、输入了正确的root密码,也无法登录为root用户。在UNIX下,这个组的名称通常为“wheel”。
[root@sample ~]# usermod -G wheel CentOSpub ← 将一般用户 CentOSpub 加在管理员组wheel组中
[root@sample ~]# vi /etc/pam.d/su ← 打开这个配置文件
#auth required /lib/security/$ISA/pam_wheel.so use_uid ← 找到此行,去掉行首的“#”

auth required /lib/security/$ISA/pam_wheel.so use_uid ← 变为此状态(大约在第6行的位置)
[root@sample ~]# echo “SU_WHEEL_ONLY yes” >> /etc/login.defs← 添加语句到行末
以上操作完成后,可以再建立一个新用户,然后用这个新建的用户测试会发现,没有加入到wheel组的用户,执行“su -”命令,即使输入了正确的root密码,也无法登录为root用户。