ChinaUnix.net
 >> ChinaUnix.net > Solaris

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

作者:activeport     发表时间:2002/02/24 10:38am

same as title

此文章相关评论:
该文章有40个相关评论如下:(点这儿可以发表评论)
kele 发表于: 2002/02/24 11:13am
如果是ftp,在/etc/ftpusers中设置即可,如果是telnet 和rlogin,你需要安装tcp-wrapper,然后做设置
 
alaler 发表于: 2002/02/24 03:57pm
直接在admintool下把帐户挂起
 
activeport 发表于: 2002/02/24 04:42pm
对不起各位,我没有说清楚,我的意思是禁止某个帐户的TELNET权限,难道SOLARIS不是在某个配置文件里列出禁止TELNET用户名的吗?
 
kele 发表于: 2002/02/24 05:56pm
solaris本身不提供这个功能,但是你可以从安装其它软件实现这个功能
 
lpp 发表于: 2002/02/24 10:34pm
TCP_WRAPPER 不能够进制某个用户登陆吧,应该只能够禁止某个主机登陆。
要禁止某个用户以telnet方式登陆,不给该用户指定login shell 就可以了。
 
czc9 发表于: 2002/02/25 09:34am
楼上的说得对,
 
activeport 发表于: 2002/02/25 10:46am
在passwd里指定?
 
activeport 发表于: 2002/02/25 03:15pm
[quote][b]下面引用由[u]lpp[/u]在 [i]2002/02/24 10:34pm[/i] 发表的内容:[/b]
TCP_WRAPPER 不能够进制某个用户登陆吧,应该只能够禁止某个主机登陆。
要禁止某个用户以telnet方式登陆,不给该用户指定login shell 就可以了。
[/quote]

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

 
shirley 发表于: 2002/02/25 03:20pm
这事不好做。如果把用户的登录shell改掉,那么不管是远程登录还是本地登录都不允许,那设这个帐号还有什么用呢?
 
bear 发表于: 2002/02/25 05:26pm
好象可以在.PROFILE中判断是否为本地,如果是本地就继续,否则退出,不过具体命令我不记得了.我回去看看.
 
activeport 发表于: 2002/02/25 05:29pm
谢谢老熊,千万别忘记了哦~~~~~~~:)
 
白虹 发表于: 2002/02/25 05:29pm
hoho!
我也想知道!
 
shirley 发表于: 2002/02/25 05:47pm
如果要判断是否本地登录,那么比较容易处理,可以在/etc/profile文件中加上这样的语句:
if [ "`tty`" != "/dev/console" ]; then
  echo "You cannot login remotely!"
  exit 1
fi

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

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

 
activeport 发表于: 2002/02/25 05:55pm
对呀,有思路了,对SHELL不熟,用PERL写一段好了,应该挺简单的。
 
lpp 发表于: 2002/02/25 10:15pm
如果用户只用pop3 mail, 不需要SHELL。
可以把shirley的 .profile 放到一个目录中,把所有的普通用户的HOME设置成这个目录,这个目录对所有的用户只读,然后在为不同的用户建立不同的工作目录(读写),再把这个.profile 修改一下,自动CD到不同用户的工作目录中。
 
bear 发表于: 2002/02/26 10:17am
shirley 补充的太好了,如果要禁止指定用户应该可以用“who am i”来判断,再做个用户列表文件来匹配,请shirley 再补充补充,我要好好学学SHELL编程了。
 
activeport 发表于: 2002/02/26 10:40am
可是用who am i 并不能得到用户名呀,只能得到组名
 
shirley 发表于: 2002/02/26 02:29pm
[这个贴子最后由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 02:42pm
用WHOAMI并不能得到用户名呀
 
shirley 发表于: 2002/02/26 02:59pm
你怎么用的呀?我用whoami没有问题,不过需要指定/usr/ucb目录。
 
activeport 发表于: 2002/02/26 03:08pm
#/usr/ucb/whoami
root
可是我的用户名并不是ROOT只是ROOT组而已。
 
shirley 发表于: 2002/02/26 03:28pm
你的"#"提示符不表明了你现在就是root吗?
先以普通用户的身份登录,再试试whoami命令。
 
activeport 发表于: 2002/02/26 03:36pm
[这个贴子最后由activeport在 2002/02/26 03:37pm 编辑]

不是呀,用户名应该是登陆时输入的那个才叫用户名吧。
whoami回显的应该是ID命令的那个组吧,比如在ROOT组有二个用户:CHEN和ROOT,他们用WHOAMI的结果是一样的。
#id
uid=0(root) gid=1(other)
 
bear 发表于: 2002/02/26 10:58pm
shirley:我佩服得五体投地,
咱俩“双剑合璧”、
虽然“初试锋芒”、
问题“迎刃而解”,
呵呵!!呵呵!!
(哎呀!谁扔的砖头!!啊!还有鸡蛋!!)
 
lpp 发表于: 2002/02/26 11:44pm
"思路:在/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:10am
0600 ---> 0644
should work.
 
shirley 发表于: 2002/02/27 09:44am
[这个贴子最后由shirley在 2002/02/27 11:13am 编辑]

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

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

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

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

 
shirley 发表于: 2002/02/27 11:16am
[quote][b]下面引用由[u]bear[/u]在 [i]2002/02/26 10:58pm[/i] 发表的内容:[/b]
shirley:我佩服得五体投地,
咱俩“双剑合璧”、
虽然“初试锋芒”、
问题“迎刃而解”,
...
[/quote]
我真的发现咱们俩爱好、擅长的领域很互补。这样很不错,我可以多向你学习了。
 
newboy 发表于: 2002/02/27 11:48am
其实,我知道一个比较简单的方法能禁止指定的用户登陆系统:
用root锁住该用户的账号:
 #passwd -l test
解锁账号:
 #passwd -d test   #先删除该用户的密码!
 #passwd test
  New password:
  Re-enter new password:
  passwd (SYSTEM): passwd successfully changed for test

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


 
newboy 发表于: 2002/02/27 11:54am
而且在unix中,whoami 和who am i是有区别的,我发现楼上的好像没有注意到!
 
hancker 发表于: 2002/02/27 04:03pm
用id命令不是很简单嘛!?
 
bear 发表于: 2002/02/27 08:42pm
“我真的发现咱们俩爱好、擅长的领域很互补。这样很不错,我可以多向你学习了。”
这句话也正是我想说的!!!向我学习不敢当,相互学习,共同提高才是目的!!
 
zcycy 发表于: 2002/02/28 08:41am
老熊在暧昧的说谁?嘿嘿
(在偷蜜吃,打)
 
byuq 发表于: 2002/06/30 06:14pm
[这个贴子最后由byuq在 2002/06/30 06:21pm 编辑]

可以用echo $LOGNAME确定登陆用户是谁!
 
mmmmn 发表于: 2002/06/30 06:32pm
哈哈哈,
原来老熊也有那么乖的时候呀,不是当着我就黑口黑脸的样子,临出国了还删我的帖子,警告我不许灌水:(
 
韦小宝 发表于: 2002/06/30 07:52pm
出国?where?
 
starwang 发表于: 2002/09/03 10:34pm
可不可以针对IP地址限制?
 
南非蜘蛛 发表于: 2002/09/03 10:37pm
tcpwrapers可以
 
duhengliang 发表于: 2002/09/04 09:14am
我想只开放ftp而禁止telnet应该是/etc/passwd 的sh 改称nologin吧
 
zufuqing5303 发表于: 2002/10/17 11:53am
1.在 /etc/hosts 文件中,删掉一行:要禁止的用户IP地址.xmh。
  2.在上述 Shell 程序段中,将下述内容:
  If [ "$WH" = "local" -o "$WH" = "terminal_server" -o "$WH"= "xmh" ]
   修改为:
  If [ "$WH" = "local" -o "$WH" = "terminal_server" ]
  
 
 

Copyright © ChinaUnix.net  *  转载请注明出处及作者