`
memorymyann
  • 浏览: 266441 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

linux安全

阅读更多

1,禁止root用户远程登录主机

vim /etc/ssh/sshd_config

修改#PermitRootLogin yes为PermitRootLogin yes(去掉注释)

service sshd restart

局域网内部可以登录,root被禁止远程登录带来的某些指令不够权限无法执行,可以通过sudo指令来执行。sudo指令需要配置/etc/sudoers。可以使用visudo来配置(推荐),具体配置细节见http://tanger.iteye.com/blog/190362

 

2.进程文件权限

在linux的shell中运行ps -le就可以看到当前系统运行的进程,uid表示该进程用户(uid是指运行id用户名命令对应的id),root用户的id=0,因此可以看到系统中很多进程的uid是0(用户对应的id可以通过 id 用户名命令来查看)。id标识该进程。ppid表示父进程id。我们可以根据这些在一定程度判断一个进程的目的和友善。可以通过kill  进程id杀死一个进程。进程的uid有个很重要的作用就是判断文件资源是否可以访问。例如在我的linux系统中有3个可以登录的用户root, memorymyann,ann。他们的id分别是0, 501, 502。我用memorymyann用户创建了一个文件love.txt,我将该文件权限设置对其它用户无法读写(root超级用户除外)。那么当你用一个程序去读取该文件时候,当你在memorymann下运行这个程序,则这个程序对应的进程的uid是501,可以读取love.txt文件。当你用ann这个用户去读取文件时,进程uid为502,这个文件便无法被打开。

系统调用setuid可以设置进程的uid,但只有从"高"向”低“设置,例如你可以将进程的uid从0(root用户)设置成501(memorymyann),但不可以从501设置成0,平级既ann与memorymyann也会设置失败。下面是具体的代码

我用memorymyann(501)角色创建了文件love.txt,拿去了其它用户的读写权限。

 

#include "stdio.h"

#include "sys/types.h"

#include "unistd.h"

 

main(){

    char ch;

    FILE * f;

    int i;

 

    i = setuid(502); //设置uid,成功返回0,失败返回-1

    printf("%d\n", i);

 

    if((f = fopen("/home/memorymyann/love.txt", "r")) == NULL){ //读取文件love.txt

       printf("not open");

       exit(0);

    }

 

    while((ch = fgetc(f)) != EOF) //逐个字符读取文件

       printf("%c", ch);

 

    fclose(f); //关闭文件

}

 

当在root用户下运行时,打印结果

0

not open

 

当在memorymyann(501)下运行时,打印结果

-1

I love yuna

 

(I love yuna是love.txt的内容,调用了linux的系统调用,程序只可以在linux下运行)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics