* [devel] RSBAC RC-redirect
@ 2001-05-07 15:48 Stanislav Ievlev
0 siblings, 0 replies; only message in thread
From: Stanislav Ievlev @ 2001-05-07 15:48 UTC (permalink / raw)
To: devel, rsbac
[-- Attachment #1: Type: text/plain, Size: 894 bytes --]
Привет всем!
Патчик для желающих поиздеваться над ядром.
Это есть прибомбас к RSBAC, который позволяет делать перенаправление при
просмотре файлов.
Работает следующим образом:
1. Надо всять ядро 2.4.3 и последний develop'ерский RSBAC.
2. Прикрутить указанный патчик
3. Создать каталог (например dirofile)
4. В нем создать файлы с именами 0,1,2,.... (трех вполне достаточно)
5. Выставить на каталог аттрибут rc_initial_role с волшебным значением 99
.......................
6. Каталог "превратиться" в файл
7. При просмотре "файла" dirofile под разными RC-ролями будет появляться
разное содержимое - то есть реально открываться файлы dirofile/<номер
RC-роли>
Ну как? Вот что можно творить с ядром когда есть исходники!
В общем-то это давно существует и называется "скрытые каталоги" то ли в
SCO, то ли вдругом крутом UNIX'e.
------------------------------------
Станислав Иевлев
[-- Attachment #2: dirofile-0.2.patch --]
[-- Type: text/plain, Size: 7056 bytes --]
diff -Naur linux.orig/fs/namei.c linux/fs/namei.c
--- linux.orig/fs/namei.c Mon May 7 18:29:02 2001
+++ linux/fs/namei.c Mon May 7 18:00:04 2001
@@ -35,6 +35,7 @@
#ifdef CONFIG_RSBAC
#include <rsbac/adf.h>
#include <rsbac/fs.h>
+#include <rsbac/aci.h>
#endif
#define ACC_MODE(x) ("\000\004\002\006"[(x)&O_ACCMODE])
@@ -1189,6 +1190,21 @@
union rsbac_target_id_t rsbac_target_id;
union rsbac_target_id_t rsbac_new_target_id;
union rsbac_attribute_value_t rsbac_attribute_value;
+
+ union rsbac_target_id_t redir_rsbac_target_id;
+ union rsbac_attribute_value_t redir_rsbac_attribute_value;
+
+//read after redirection
+redir_again:
+// printk(KERN_EMERG "f:%s\n",pathname);
+ acc_mode=0;
+ error=0;
+ inode=NULL;
+ dentry=NULL;
+ dir=NULL;
+ count=0;
+
+
#endif
acc_mode = ACC_MODE(flag);
@@ -1415,6 +1431,38 @@
goto exit;
}
}
+
+ //we check only directories
+ if (S_ISDIR(inode->i_mode)){
+ if (rsbac_get_attr(T_DIR,
+ rsbac_target_id,
+ A_rc_initial_role,
+ &redir_rsbac_attribute_value,
+ TRUE))
+ {
+ printk(KERN_WARNING "open_namei(): rsbac_get_attr() returned error!\n");
+ }
+
+ if (redir_rsbac_attribute_value.rc_initial_role==99)
+ {
+ //get process' RC-role
+ redir_rsbac_target_id.process = current->pid;
+ if (rsbac_get_attr(T_PROCESS,
+ redir_rsbac_target_id,
+ A_rc_role,
+ &redir_rsbac_attribute_value,
+ FALSE))
+ {
+ printk(KERN_WARNING "open_namei(): rsbac_get_attr() returned error!\n");
+ }
+
+ sprintf(pathname,"%s/%u",pathname,redir_rsbac_attribute_value.rc_role);
+ goto redir_again;
+
+ printk(KERN_EMERG "open_namei:new pathname %s\n",pathname);
+ }
+ }
+
#endif /* CONFIG_RSBAC */
if (flag & O_TRUNC) {
diff -Naur linux.orig/fs/open.c linux/fs/open.c
--- linux.orig/fs/open.c Mon May 7 18:29:02 2001
+++ linux/fs/open.c Mon May 7 18:35:52 2001
@@ -583,6 +583,23 @@
error = -EPERM;
goto dput_and_out;
}
+
+ //we check only directories
+ if (rsbac_get_attr(T_DIR,
+ rsbac_target_id,
+ A_rc_initial_role,
+ &rsbac_attribute_value,
+ TRUE))
+ {
+ printk(KERN_WARNING "sys_chdir(): rsbac_get_attr() returned error!\n");
+ }
+
+ //printk(KERN_EMERG "sys_chdir:%u\n",rsbac_attribute_value.rc_initial_role);
+
+ if (rsbac_attribute_value.rc_initial_role==99){
+ error = -ENOTDIR;
+ goto dput_and_out;
+ }
#endif
set_fs_pwd(current->fs, nd.mnt, nd.dentry);
@@ -642,6 +659,21 @@
error = -EPERM;
}
}
+
+ if (rsbac_get_attr(T_DIR,
+ rsbac_target_id,
+ A_rc_initial_role,
+ &rsbac_attribute_value,
+ TRUE))
+ {
+ printk(KERN_WARNING "sys_fchdir(): rsbac_get_attr() returned error!\n");
+ }
+
+ //printk(KERN_EMERG "sys_fchdir:%u\n",rsbac_attribute_value.rc_initial_role);
+
+ if (rsbac_attribute_value.rc_initial_role==99){
+ error = -ENOTDIR;
+ }
#endif
if (!error)
diff -Naur linux.orig/fs/stat.c linux/fs/stat.c
--- linux.orig/fs/stat.c Mon May 7 18:29:02 2001
+++ linux/fs/stat.c Mon May 7 17:28:56 2001
@@ -15,6 +15,7 @@
/* RSBAC */
#ifdef CONFIG_RSBAC
#include <rsbac/adf.h>
+#include <rsbac/aci.h>
#endif
/*
@@ -74,6 +75,8 @@
{
struct stat tmp;
unsigned int blocks, indirect;
+
+
memset(&tmp, 0, sizeof(tmp));
tmp.st_dev = kdev_t_to_nr(inode->i_dev);
@@ -247,6 +250,7 @@
{
error = -EPERM;
}
+
}
#endif
@@ -698,7 +702,30 @@
if (!error)
error = cp_new_stat64(nd.dentry->d_inode, statbuf);
+ /* RSBAC */
+ #ifdef CONFIG_RSBAC
+ //we check only directories
+ if (S_ISDIR(nd.dentry->d_inode->i_mode)){
+ if (rsbac_get_attr(T_DIR,
+ rsbac_target_id,
+ A_rc_initial_role,
+ &rsbac_attribute_value,
+ TRUE))
+ {
+ printk(KERN_WARNING "sys_stat64(): rsbac_get_attr() returned error!\n");
+ }
+
+ //printk(KERN_EMERG "sys_stat64:%u\n",rsbac_attribute_value.rc_initial_role);
+
+ if (rsbac_attribute_value.rc_initial_role==99){
+ statbuf->st_mode=(nd.dentry->d_inode->i_mode&0777)|S_IFREG;
+ }
+
+ }
+ #endif
+
path_release(&nd);
+
}
return error;
}
@@ -758,6 +785,28 @@
if (!error)
error = cp_new_stat64(nd.dentry->d_inode, statbuf);
+
+ /* RSBAC */
+ #ifdef CONFIG_RSBAC
+ //we check only directories
+ if (S_ISDIR(nd.dentry->d_inode->i_mode)){
+ if (rsbac_get_attr(T_DIR,
+ rsbac_target_id,
+ A_rc_initial_role,
+ &rsbac_attribute_value,
+ TRUE))
+ {
+ printk(KERN_WARNING "sys_stat64(): rsbac_get_attr() returned error!\n");
+ }
+
+ //printk(KERN_EMERG "sys_lstat64:%u\n",rsbac_attribute_value.rc_initial_role);
+
+ if (rsbac_attribute_value.rc_initial_role==99){
+ statbuf->st_mode=(nd.dentry->d_inode->i_mode&0777)|S_IFREG;
+ }
+ }
+ #endif
+
path_release(&nd);
}
return error;
@@ -834,6 +883,29 @@
if (!err)
err = cp_new_stat64(dentry->d_inode, statbuf);
+
+ /* RSBAC */
+ #ifdef CONFIG_RSBAC
+ //we check only directories
+ if (S_ISDIR(dentry->d_inode->i_mode)){
+ if (rsbac_get_attr(T_DIR,
+ rsbac_target_id,
+ A_rc_initial_role,
+ &rsbac_attribute_value,
+ TRUE))
+ {
+ printk(KERN_WARNING "sys_stat64(): rsbac_get_attr() returned error!\n");
+ }
+
+ //printk(KERN_EMERG "sys_lstat64:%u\n",rsbac_attribute_value.rc_initial_role);
+
+ if (rsbac_attribute_value.rc_initial_role==99){
+ statbuf->st_mode=(dentry->d_inode->i_mode&0777)|S_IFREG;
+ }
+ }
+ #endif
+
+
fput(f);
}
return err;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2001-05-07 15:48 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-05-07 15:48 [devel] RSBAC RC-redirect Stanislav Ievlev
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git