怎么禁止指定的用户远程登陆,在哪里设置?

发表于:2007-06-09来源:作者:点击数: 标签:
sameastitle kele 回复于:2002-02-24 11:13:51 如果是ftp,在/etc/ftpusers中设置即可,如果是te .net 和rlogin,你需要安装tcp-wrapper,然后做设置 alaler 回复于:2002-02-24 15:57:38 直接在admintool下把帐户挂起 activeport 回复于:2002-02-24 16:42:

same as title

 kele 回复于:2002-02-24 11:13:51
如果是ftp,在/etc/ftpusers中设置即可,如果是te.net 和rlogin,你需要安装tcp-wrapper,然后做设置

 alaler 回复于:2002-02-24 15:57:38
直接在admintool下把帐户挂起

 activeport 回复于:2002-02-24 16:42:12
对不起各位,我没有说清楚,我的意思是禁止某个帐户的TELNET权限,难道SOLARIS不是在某个配置文件里列出禁止TELNET用户名的吗?

 kele 回复于:2002-02-24 17:56:17
solaris本身不提供这个功能,但是你可以从安装其它软件实现这个功能

 lpp 回复于:2002-02-24 22:34:13
TCP_WRAPPER 不能够进制某个用户登陆吧,应该只能够禁止某个主机登陆。
要禁止某个用户以telnet方式登陆,不给该用户指定login shell 就可以了。

 czc9 回复于:2002-02-25 09:34:24
楼上的说得对,

 activeport 回复于:2002-02-25 10:46:48
在passwd里指定?

 activeport 回复于:2002-02-25 15:15:27
[quote][b]下面引用由[u]lpp[/u]在 [i]2002/02/24 10:34pm[/i] 发表的内容:[/b]
TCP_WRAPPER 不能够进制某个用户登陆吧,应该只能够禁止某个主机登陆。
要禁止某个用户以telnet方式登陆,不给该用户指定login shell 就可以了。
[/quote]

老兄,是不是在PASSWD里设置啊?能说的具体点吗?先谢谢了

 shirley 回复于:2002-02-25 15:20:42
这事不好做。如果把用户的登录shell改掉,那么不管是远程登录还是本地登录都不允许,那设这个帐号还有什么用呢?

 bear 回复于:2002-02-25 17:26:39
好象可以在.PROFILE中判断是否为本地,如果是本地就继续,否则退出,不过具体命令我不记得了.我回去看看.

 activeport 回复于:2002-02-25 17:29:36
谢谢老熊,千万别忘记了哦~~~~~~~:)

 白虹 回复于:2002-02-25 17:29:53
hoho!
我也想知道!

 shirley 回复于:2002-02-25 17:47:40
如果要判断是否本地登录,那么比较容易处理,可以在/etc/profile文件中加上这样的语句:
if [ "`tty`" != "/dev/console" ]; then
   echo "You cannot login remotely!"
   exit 1
fi

不能在用户的.profile文件中做这个事,因为用户自己就可以改掉这些语句。

另外,如果要禁止某些(不是全部)用户的远程登录,还稍微复杂些,我再想想。

 activeport 回复于:2002-02-25 17:55:12
对呀,有思路了,对SHELL不熟,用PERL写一段好了,应该挺简单的。

 lpp 回复于:2002-02-25 22:15:10
如果用户只用pop3 mail, 不需要SHELL。
可以把shirley的 .profile 放到一个目录中,把所有的普通用户的HOME设置成这个目录,这个目录对所有的用户只读,然后在为不同的用户建立不同的工作目录(读写),再把这个.profile 修改一下,自动CD到不同用户的工作目录中。


 bear 回复于:2002-02-26 10:17:43
shirley 补充的太好了,如果要禁止指定用户应该可以用“who am i”来判断,再做个用户列表文件来匹配,请shirley 再补充补充,我要好好学学SHELL编程了。

 activeport 回复于:2002-02-26 10:40:53
可是用who am i 并不能得到用户名呀,只能得到组名

 shirley 回复于:2002-02-26 14:29:33
[这个贴子最后由shirley在 2002/02/26 02:33pm 编辑]

问题解决了。

1。限制所有用户的远程登录

在/etc/profile文件中适当的位置写下这段语句:

ttyno=`tty` # 获得用户登录的tty信息
if [ $ttyno != "/dev/console" ]; then # 判断是否从控制台登录
        echo "You cannot login remotely"
        ttyno=`echo $ttyno | cut -c6-20 ` # 获得终端的识别符 如 pts/?
        pid=`ps -t $ttyno|grep -v ps|tail -1|awk '{print $1}'` # 获得该终端进程号
        kill -9 $pid # 杀掉该进程
        exit 1
fi

说明: 先判断用户是不是通过CONSOLE登录上来的,如果是则允许登录,否则找到该终端的进程号,使用kill命令断掉终端连接。

当然,通过将/etc/inetd.conf文件中的telnet行注释掉可以屏蔽远程用户的telnet服务,但是无法管理ssh.使用这段脚本就都管了。

2. 禁止指定用户的远程登录

思路:在/etc目录下创建一个login-user文件,该文件的每一行是一个允许远程登录的用户的帐号。为了安全,建议将该文件设为0600属性。然后在/etc/profile文件中写下如下脚本:

ttyno=`tty|cut -c6-20` # 获得该登录的终端信息,如 pts/?
user=`/usr/ucb/whoami` # 获得用户的帐号
grep -w $user /etc/login-user # 检查/etc/login-user文件中是否有该用户
if [ $? -ne 0 ]; then # 如果没有该用户,则拒绝该用户的登录
        echo "You have not the privilege to  login remotely"
        pid=`ps -t $ttyno|grep -v ps|tail -1|awk '{print $1}'`
        kill -9 $pid
        exit 1
fi

这段代码尚未测试,有问题欢迎讨论。

 activeport 回复于:2002-02-26 14:42:58
用WHOAMI并不能得到用户名呀

 shirley 回复于:2002-02-26 14:59:37
你怎么用的呀?我用whoami没有问题,不过需要指定/usr/ucb目录。

 activeport 回复于:2002-02-26 15:08:29
#/usr/ucb/whoami
root
可是我的用户名并不是ROOT只是ROOT组而已。

 shirley 回复于:2002-02-26 15:28:08
你的"#"提示符不表明了你现在就是root吗?
先以普通用户的身份登录,再试试whoami命令。

 activeport 回复于:2002-02-26 15:36:59
[这个贴子最后由activeport在 2002/02/26 03:37pm 编辑]

不是呀,用户名应该是登陆时输入的那个才叫用户名吧。
whoami回显的应该是ID命令的那个组吧,比如在ROOT组有二个用户:CHEN和ROOT,他们用WHOAMI的结果是一样的。
#id
uid=0(root) gid=1(other)

 bear 回复于:2002-02-26 22:58:49
shirley:我佩服得五体投地,
咱俩“双剑合璧”、
虽然“初试锋芒”、
问题“迎刃而解”,
呵呵!!呵呵!!
(哎呀!谁扔的砖头!!啊!还有鸡蛋!!)


 lpp 回复于:2002-02-26 23:44:28
"思路:在/etc目录下创建一个login-user文件,该文件的每一行是一个允许远程登录的用户的帐号。为了安全,建议将该文件设为0600属性。然后在/etc/profile文件中写下如下脚本:"

Great idea. I have not test it yet. But /etc/login-user is 0600 does not work. Think hard :)

Another question is, what do you want your user to do if you disable your users' remote login? Do you only want them login on console?(I think you hardly want them do it).
If you don't want your user do both remote login/console login, you can just disable their login shell.

Am I right? :) 

It's a good shell script anyway.






 bear 回复于:2002-02-27 00:10:03
0600 ---> 0644
should work.

 shirley 回复于:2002-02-27 09:44:04
[这个贴子最后由shirley在 2002/02/27 11:13am 编辑]

一时疏忽了属性的问题。lpp和bear的补充很不错。

其实写这个script是因为前面大家提出了这个问题,从实用性上来讲,从禁止所有用户的远程登录这个目的来看,这段代码并不是必须的,实用意义并不大,通过给用户设定非标准shell也能实现,而同时很多情况下我们需要远程来管理系统。但是它提供了一个解决这样问题的思路。

但是限制某些用户的远程登录还是有一些意义的。以我的了解,目前确实还没有哪个软件考虑这个功能。现软件能做的就是拒绝某些IP地址的远程登录。

不管怎么说,通过讨论,大家都学到了一些东西。这样目的也就达到了。

 shirley 回复于:2002-02-27 11:16:09
[quote][b]下面引用由[u]bear[/u]在 [i]2002/02/26 10:58pm[/i] 发表的内容:[/b]
shirley:我佩服得五体投地,
咱俩“双剑合璧”、
虽然“初试锋芒”、
问题“迎刃而解”,
...
[/quote]
我真的发现咱们俩爱好、擅长的领域很互补。这样很不错,我可以多向你学习了。

 newboy 回复于:2002-02-27 11:48:28
其实,我知道一个比较简单的方法能禁止指定的用户登陆系统:
用root锁住该用户的账号:
  #passwd -l test
解锁账号:
  #passwd -d test   #先删除该用户的密码!
  #passwd test
   New password:
   Re-enter new password:
   passwd (SYSTEM): passwd suclearcase/" target="_blank" >ccessfully changed for test

不过这样锁定以后,该用户连console也不能登录,大家可以试试看




 newboy 回复于:2002-02-27 11:54:16
而且在unix中,whoami 和who am i是有区别的,我发现楼上的好像没有注意到!

 hancker 回复于:2002-02-27 16:03:40
用id命令不是很简单嘛!?

 bear 回复于:2002-02-27 20:42:02
“我真的发现咱们俩爱好、擅长的领域很互补。这样很不错,我可以多向你学习了。”
这句话也正是我想说的!!!向我学习不敢当,相互学习,共同提高才是目的!!

 zcycy 回复于:2002-02-28 08:41:40
老熊在暧昧的说谁?嘿嘿
(在偷蜜吃,打)

 byuq 回复于:2002-06-30 18:14:55
[这个贴子最后由byuq在 2002/06/30 06:21pm 编辑]

可以用echo $LOGNAME确定登陆用户是谁!

 mmmmn 回复于:2002-06-30 18:32:48
哈哈哈,
原来老熊也有那么乖的时候呀,不是当着我就黑口黑脸的样子,临出国了还删我的帖子,警告我不许灌水:(

 韦小宝 回复于:2002-06-30 19:52:09
出国?where?

 starwang 回复于:2002-09-03 22:34:05
可不可以针对IP地址限制?

 南非蜘蛛 回复于:2002-09-03 22:37:37
tcpwrapers可以

 duhengliang 回复于:2002-09-04 09:14:51
我想只开放ftp而禁止telnet应该是/etc/passwd 的sh 改称nologin吧

 zufuqing5303 回复于:2002-10-17 11:53:23
1.在 /etc/hosts 文件中,删掉一行:要禁止的用户IP地址.xmh。
  2.在上述 Shell 程序段中,将下述内容:
  If [ "$WH" = "local" -o "$WH" = "terminal_server" -o "$WH"= "xmh" ]
    修改为:
  If [ "$WH" = "local" -o "$WH" = "terminal_server" ]
  

 jinal 回复于:2004-12-13 17:17:25
又重新看了一下
其实可以用 "$$"就直接得到进程的pid
kill -9 $$  就行了
c shell下可以直接用logout替代kill -9 $pid
这样就可以写成
user=`/usr/ucb/whoami` # 获得用户的帐号 
grep -w $user /etc/login-user # 检查/etc/login-user文件中是否有该用户 
if [ $? -ne 0 ]; then # 如果没有该用户,则拒绝该用户的登录 
echo "You have not the privilege to login remotely" 
kill -9 $$
exit 1 
fi 

PS:我将shirley那段写成c shell后,发现得到的pid会比实际的大7
但有的时候又是正确的,奇怪啊

 jwen 回复于:2005-03-13 23:01:19
哪位高手最后总结一下啊

 3x3eyes 回复于:2005-03-14 09:54:14
......
我服了,这都能被你们找出来
但我看到bear说要好好学shell的时候,我大喊不会吧
然后一看时间2002年......

原文转自:http://www.ltesting.net